Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

pomiar czasu czyli taki stoper

sliver
-
-
Posty:4
Rejestracja:15 sty 2007, o 22:42
Lokalizacja:Kutno
pomiar czasu czyli taki stoper

Postautor: sliver » 22 lut 2007, o 14:27

jak zrobic w bascomie na atmedze32 z kwarcem 4MHz pomiar czasu rozpoczynany po spelnieniu jakiegos warunku i wyswietlany w formacie HH:MM:SS (moze byc tez bez sekund) na lcd ?? jesli to ma znaczenie to dlugos pomiaru nie bedzie raczej nigdy wieksza niz 12h.
pozdrawiam

shadow82
-
-
Posty:12
Rejestracja:8 lis 2006, o 15:17
Lokalizacja:Trójmiasto
Kontaktowanie:

Postautor: shadow82 » 25 lut 2007, o 11:55

Długość mierzonego czasu to 256 godzin, które można zwiększyć deklarując Hour jako Word.

Kod: Zaznacz cały

$regfile = "m32def.dat" $crystal = 4000000 Dim Exception As Bit 'Warunek Dim Hour As Byte Dim Minute As Byte Dim Second As Byte Dim Msec As Byte Dim _100ms As Bit Dim Settim As Bit Dim Tim1t As Byte Config Timer1 = Timer , Prescale = 1 Tccr1b = Tccr1b And &B11111000 'Stop Timer On Timer1 T1_int Enable Timer1 Enable Interrupts Do If Exception = 1 Then If Settim = 0 Then Load Timer1 , 6690 Tccr1b = Tccr1b Or &B00000001 'Start Timer1, Prescale = 1 Settim = 1 End If End If If _100ms = 1 Then _100ms = 0 'tutaj kod odpowiedzialny za 'aktualizację i formatowanie 'czasu End If 'Lcd "HH:MM:SS:MS" Loop T1_int: Incr Tim1t If Tim1t = 7 Then Load Timer1 , 6690 Set _100ms 'ustaw flagę - minęło 100 ms Tim1t = 0 End If Return

sliver
-
-
Posty:4
Rejestracja:15 sty 2007, o 22:42
Lokalizacja:Kutno

Postautor: sliver » 2 mar 2007, o 12:34

narazie zrobilem liczenie z dokladnoscia co do sek ale mam problem z timerami. w kodzie sa ustawione i wystartowane na samym poczatku takie dwa timery:

Config Timer0 = Counter , Edge = Rising
Config Timer1 = Timer , Prescale = 64

dopisalem do programu funkcje prostego "stopera" liczacego sekundy:

Dim Sekunda As Byte
Incr Sekunda

ale wynik jest niedokladny - na 100 spoznia sie o 11 sekund - dlaczego tak sie dzieje??
a moze cos mam zle fusebity ustawione i to jest powodem?? -> FUSEBITY

mam jeszce jedno pytanie - jesli bym uruchomil timer2 jako:

Config Timer2 = Timer , Prescale = 1

to jaka komenda korzystac z jego funkcji?? b tej chwili mam gotowy program i jest tam tylko config timerow, start timer i odrazu procedura liczenia Incr - nigdzie nie jest napisane ktory timer ma liczyc...

szymel
-
-
Posty:212
Rejestracja:16 sty 2005, o 16:42
Lokalizacja:Włocławek

Postautor: szymel » 2 mar 2007, o 15:57

...ale wynik jest niedokladny - na 100 spoznia sie o 11 sekund - dlaczego tak sie dzieje??...
Ja zaproponuję Ci takie "ustrojstwo" :D

Kod: Zaznacz cały

$regfile = "m32def.dat" $crystal = 11059200 $hwstack = 50 $swstack = 32 $framesize = 32 #if _xtal < 4000000 Const Presc = 64 #else Const Presc = 256 #endif Const Count_top =(_xtal / Presc) - 1 Const Up = 1 'kompiluj dla zliczania w górę Const Down = 0 ' w dół Const Count = Up 'Config Lcd = 20 * 4 'Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portd.7 'Config Lcdpin = Pin , Db7 = Porta.7 , E = Portc.3 , Rs = Portc.2 Dim S As Byte , M As Byte , H As Byte On Oc1a Sekunda Enable Oc1a Enable Interrupts Pwm1a = Count_top Cursor Off Cls Do 'If Warunek_start Then Gosub Start_t1 'If Warunek_stop Then Gosub Stop_t1 Loop Start_t1: 'start timer1 - CTC mode S = 0 M = 0 H = 0 #if Presc = 64 Tccr1b = &B00001011 #else Tccr1b = &B00001100 #endif Return Stop_t1: Tccr1b = 0 Return Sekunda: #if Count = Up '**********************' Incr S If S = 59 Then S = 0 Incr M If M = 59 Then M = 0 Incr H If H = 24 Then H = 0 End If End If #elseif Count = Down '********************' If S > 0 Then Decr S Else S = 59 If M > 0 Then Decr M Else M = 59 If H > 0 Then Decr H Else H = 23 End If End If End If #endif '***********************' 'Locate 1 , 1 : Lcd Hex(makebcd(h)) ; ":" ; Hex(makebcd(m)) ; ":" ; Hex(makebcd(s)); Return
Rozbuduj to do własnych potrzeb.
Dokładność zależy od stabilności oscylatora/rezonatora , oraz od tego , czy jego częstotliwość jest wielokrotnością 64 dla częstotliwości <4MHz lub 256 dla częstotliwości => 4MHz .

Piotrek

Wróć do „Projektowanie PCB, programy EDA, CAD, narzędziowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 20 gości