Witam serdecznie. Poniżej kod programu (fragmenty) na ATmega 16, 8MHz: $regfile = "m16def.DAT" $crystal = 8000000 Dim Tp As Integer , Ss1 As String * 6 Dim Tb As Integer , Ss2 As String * 6 Dim Tk As Integer , Ss3 As String * 6 Dim Dsid1(8) As Byte Dim Dsid2(8) As Byte Dim Dsid3(8) As Byte Dim B As Byte 'deklaracja zmiennej do odczytu kodów ID Dim W As Byte '*************************konfiguracja przerwania INT0************************** Config Int0 = Falling ' INT0 wyzwalane zboczem opadającym On Int0 Zero_cross 'skocz do Zero_cross - przejście przez zero '*************************konfiguracja TIMER1*********************************** Config Timer1 = Timer , Prescale = 64 'Timer1 jako licznik, dzielnik = 64(przepełnienie co 4us) On Timer1 Tim1_isr 'skocz do Tim_isr - załaczenie triaków '*************************odblokowanie systemu przerwań************************* Enable Int0 'odblokowanie przerwania Enable Interrupts 'odblokowanie globalnego systemu przerwań '**************************zmienne w programie********************************* Dim Moc As Byte ' zmienna przechowująca poziom Dim K As Word Moc = 0 'program główny do 1wreset 1wwrite &H55 1wverify Dsid1(1) 'wysyłamy adres pierwszego czujnika If Err <> 1 Then 1wwrite &HBE Tp = 1wread(2) Tp = Tp * 10 Tp = Tp / 16 Ss1 = Str(tp) Ss1 = Format(ss1 , " 0.0") Locate 1 , 1 'Pozycja wyświetlania nazwy i temperatury (1.1 -> 1 linia 1 kolumna, 2.10 -> 2 linia 10 kolumna itd) Lcd "Piec: " ; Ss1 ; Chr(0) ; Chr(1) Else Locate 1 , 1 Lcd "ERROR Piec " End If '--------------------------------- 1wreset 1wwrite &H55 1wverify Dsid2(1) 'wysylam adres drugiego czujnika If Err <> 1 Then 1wwrite &HBE Tb = 1wread(2) Tb = Tb * 10 Tb = Tb / 16 Ss2 = Str(tb) Ss2 = Format(ss2 , " 0.0") Locate 2 , 1 Lcd "Bojler: " ; Ss2 ; Chr(0) ; Chr(1) Else Locate 2 , 1 Lcd "ERROR Bojler " End If '--------------------------------- 1wreset 1wwrite &H55 1wverify Dsid3(1) 'wysylam adres trzeciego czujnika If Err <> 1 Then 1wwrite &HBE Tk = 1wread(2) Tk = Tk * 10 Tk = Tk / 16 Ss3 = Str(tk) Ss3 = Format(ss3 , " 0.0") Locate 3 , 1 Lcd "Kolektor:" ; Ss3 ; Chr(0) ; Chr(1) Else Locate 3 , 1 Lcd "ERROR Kolektor " End If '--------konwersja temp dla wszystkich dsow 1wreset 1wwrite &HCC 1wwrite &H44 Wait 3 Tna = E_tna Tn = Tna / 10 Locate 4 , 1 Lcd "Nastawa: " ; Tn ; ".0" ; Chr(0) ; Chr(1) loop Tim1_isr: Set K_pompa 'załącz triak2 Disable Timer1 'wyłącz Timer1 Return 'powrót '*****************podprogram odmierzajacy czas od przerwania******************** Zero_cross: Reset K_pompa ' wył. Triaka w ZERO sieci 230V K = Lookup(moc , Obroty) ' pobranie z tablicy wartości Timera1 Load Timer1 , K ' załadowanie pobranej wartości do Timera1 Enable Timer1 ' załączenie Timera1 - odliczanie czasu Return 'powrót Obroty: 'podprogram prędkości Data 0% , Data 915% , 760% , 625% , 490% , 335% , 100% Bardzo proszę o jakieś praktyczne rozwiązania tego problemu lub przykłady.
|
|||
Witam. Nie jestem być może
Witam.
Nie jestem być może eksperkem w dziedzinie programowania avr'ów,(dopiero zaczynam), ale mia
łem podobny problem gdy bawiłem się procesorami serii '8051 (at89c4051)
Musisz na czas pomiaru (dla magistrali 1-wire) wyłączyć przerwania inaczej pomiar nie będzie
możliwy. Spotkałem się z tym podczas pracy z projektem sterownika do pieca co na '4051.
Wentylator był sterowany przebiegiem PWM(programowym w timerze), ale gdy chciałem uzyskać
odczyt temperatury to musiałem wyłączyć przerwanie co powodowało nierównomierną pracę wentylatora,
szarpanie.Dlatego też przesiadam się na avr one mają pwm sprzętowy ale gdy to nie pomorze ,
zamiast czujnika na magistrale 1-wire zastosuje czujnik lm35.
Rzdzę to samo lub przebudowę programu. Przerwania i 1-wire trochę się ze sobą gryzą.
Pozdrawiam.
Re: pomiar temp
Jeśli pomiar z ds jest prawidłowy a czasami tylko pojawia się 0 stopni to najprościej będzie chyba dodać warunek w programie i odczytywać do zmiennej tymczasowej a przepisywać do zmiennej właściwej jak pomiar jest prawidłowy i nie różni się np od poprzedniego wskazania nagle o 20 stopni (bo to spewnością oznaka błędu).
Poza tym sprawdź na krótkim kablu do czujnika ds jak to działa
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Re:
Fakt faktem, jest to też jakieś wyjście z sytuacji i chyba będzie najwłaściwsze i być może najprostsze. Dziś już niestety ni zdążę nic poprawić, ale jutro dam znać co i jak.
Pozdrawiam:)