Mam mały problem - nie potrafię przenieśc kodu z bascoma do avr c (eclipse).
Tzn, wiem ze nie przeniosą go 1:1 chodzi mi raczej o ogólne zasady, szkielet:
chodzi o zapis do pamięci eeprom stanu licznika - licznik sie zmienia przy pomocy przycisków góra/dół - przy wyłaczeniu zasilania oczywiście jego zawartośc jest kasowana. Oczywiście zapis przy każdej zmianie nie ma sensu - zbyt szybko "zajechałbym" pamieę. Wymuśliłem wiec taką procedurę aby przy użyciu timera dodać zwłokę minuty na zapis - jeżeli w ciągu minuty stan licznika sie nie zmieni to następuje zapis - tutaj wykrywanie zmiany było ponowne naciśnięcie przycisków.
W bascomie to działało bardzo dobrze, w c nie chce.
Tu kod BS:
Flaga:
Incr Us
If Us = 117 Then
Us = 0
Incr Ms
If Ms = 60 Then
Ms = 0
Writeeeprom Liczba , 1
Stop Timer0
End If
End If
Return
"Flaga" to podprogram wyzwalany od timera 0 z preskalerem 256 - zegar 8MHz.
Zmienne Ms i Us są zerowane przy wciśnięciu przycisku, potem jest załaczany timer poleceniem Start Timer0
Problem mam z c - jest inna struktura programu, kiedy umieściłem fukcję start_timer(); w pętli if(button_press) itd to przestało mi działać zliczanie, wyśwetlanie wyniku etc.
Potrzebuje tylko nakierowania jak to rozmieścić w programie - inicjację timera, właczenie przerwań właczenie timera odliczenie czasu zapis wyłaczenie timera w pętli while(1) mam tylko obsługę klawiszy i wyświetlacza. Zapis eepromu musi sie odbywać niejako w tle pracy głównej pętli.
Tzn, wiem ze nie przeniosą go 1:1 chodzi mi raczej o ogólne zasady, szkielet:
chodzi o zapis do pamięci eeprom stanu licznika - licznik sie zmienia przy pomocy przycisków góra/dół - przy wyłaczeniu zasilania oczywiście jego zawartośc jest kasowana. Oczywiście zapis przy każdej zmianie nie ma sensu - zbyt szybko "zajechałbym" pamieę. Wymuśliłem wiec taką procedurę aby przy użyciu timera dodać zwłokę minuty na zapis - jeżeli w ciągu minuty stan licznika sie nie zmieni to następuje zapis - tutaj wykrywanie zmiany było ponowne naciśnięcie przycisków.
W bascomie to działało bardzo dobrze, w c nie chce.
Tu kod BS:
Flaga:
Incr Us
If Us = 117 Then
Us = 0
Incr Ms
If Ms = 60 Then
Ms = 0
Writeeeprom Liczba , 1
Stop Timer0
End If
End If
Return
"Flaga" to podprogram wyzwalany od timera 0 z preskalerem 256 - zegar 8MHz.
Zmienne Ms i Us są zerowane przy wciśnięciu przycisku, potem jest załaczany timer poleceniem Start Timer0
Problem mam z c - jest inna struktura programu, kiedy umieściłem fukcję start_timer(); w pętli if(button_press) itd to przestało mi działać zliczanie, wyśwetlanie wyniku etc.
Potrzebuje tylko nakierowania jak to rozmieścić w programie - inicjację timera, właczenie przerwań właczenie timera odliczenie czasu zapis wyłaczenie timera w pętli while(1) mam tylko obsługę klawiszy i wyświetlacza. Zapis eepromu musi sie odbywać niejako w tle pracy głównej pętli.
