Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 26 sty 2026, o 13:58


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 15 ] 
Autor Wiadomość
PostNapisane: 14 gru 2016, o 03:05 
Offline
Użytkownik

Dołączył(a): 30 paź 2016
Posty: 41
Pomógł: 1

Witajcie.
Mam problem z uruchomieniem zegarka...
widać że ładnie czyta datę i godzinę i po resecie procka widać że działa a godzina się przestawia.
Próbowałem za pomocą przerwania zewnętrznego jak zalecał Pan Mirek w swoim poradniku i dalej
nie odświeża daty.
Próbowałem za pomocą timera 8 bitowego co sekundę odmierzać czas i odświeżać - to na nic.
Próbowałem robić nawet tak jak w bluebooku - zegarek stoi, chyba że go zrestetuje.
Co robię źle?
Procek: Atmega8, 1MHz.

Procedura obsługi timera wygląda u mnie następująco:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.




Funkcja odczytaj_czas(); jest u mnie napisana w biblioteczce gdzie dodałem sobie wszytkie funkcjie TWI oraz DS3231 i stamtąd ja wywołuję, tam też jest przekazywanie do znaków do LCD.

Nie potrafię dojść do tego co napisałem źle. Skoro czyta mi ładnie datę i godzinę, po resecie pokazuje aktualną godzinę to dlaczego nie odświeża co sekundę skoro wydaje mi sie tak ustawiłem?

Policzyłem to tak:
1Mhz i preskaler 1024 to daje = 1000Hz.
Czyli impuls będzie co 1 ms.
Timer mam 8 bitowy czyli przerwania będzie liczył 256* 1 ms czyli co 256ms.
na sekundę to wychodzi około 4 razy.
A chcę aby odświeżanie było co sekundę zatem wpisałem do TCNTO wartość początkową 6 aby liczył 250.
Jeśli zrobi 4 cykle (4*250ms =1 s) to ma się zgłosić przerwanie.

W wyniku tego wyświetlacz zapala mi się za sekundę ale nie zmienia nic. :(
Proszę o pomoc.

------------------------ [ Dodano po: 16 minutach ]

a w drugiej kolejności zrobiłem to w ten sposób:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


no ale tez nie działa :(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 gru 2016, o 08:12 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

Zwróć uwagę na i.
W przerwaniu nie przekroczy wartości 3,
A w pętli ni wykona sie jezeli mniejsze równe 3



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 gru 2016, o 08:41 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
A jak i gdzie deklarujesz to "i"?

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 gru 2016, o 09:02 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

A.. W telefonie nie rozwinąłem dalszej części kodu z testem przerwania.
Kolega kicajek dobrze naprowadza,
Myślę że znacznie ułatwi sprawę wskazanie deklaracji i komentarze w ustawieniach rejestrów. ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 gru 2016, o 12:09 
Offline
Użytkownik

Dołączył(a): 30 paź 2016
Posty: 41
Pomógł: 1

Witam dziękuję kolegom za odpowiedź :)
i definiuję na początku kodu volatile uint8_t i=0;

------------------------ [ Dodano po: 7 minutach ]

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


z komentarzami



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 gru 2016, o 17:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

no teraz OK, tzn :
Gdzie jest włączenie trybu licznika? chodzi o "WGMy" :) timer nie chodzi ?

------------------------ [ Dodano po: 15 minutach ]

Ta... to znowu sobie poplynąłęm :?
Piszesz o ATmega8.
Nie ma rejestrów z bitem WGM dla Timer0.
sorka. :roll:



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 gru 2016, o 20:31 
Offline
Użytkownik

Dołączył(a): 30 paź 2016
Posty: 41
Pomógł: 1

Hmm ktoś coś? :( to nie chce ruszyć.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 gru 2016, o 20:58 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

wiesz tak może źle ale pomyślałem, :?
czy próbowałeś w przerwaniu ustawić flagę co np te 4 sek i po wykonaniu odczytu w pętli od razu tę flagę wykasowć ?

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 gru 2016, o 21:13 
Offline
Użytkownik

Dołączył(a): 25 lip 2015
Posty: 140
Zbananowany użytkownik

Pomógł: 18

A ile czasu zajmuje wykonanie funkcji 'odczytaj_czas()'? I jesteś pewien, że ta funkcja zostawia magistralę I2C we właściwym stanie? Czy taki kod u Ciebie zadziała?
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 gru 2016, o 23:06 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
Puciek123 napisał(a):
Funkcja odczytaj_czas(); jest u mnie napisana w biblioteczce gdzie dodałem sobie wszytkie funkcjie TWI oraz DS3231 i stamtąd ja wywołuję, tam też jest przekazywanie do znaków do LCD.

Puciek123 napisał(a):
Hmm ktoś coś? to nie chce ruszyć.

Prześledź swój post od początku i spróbuj wczuć się w osobę która chce Ci pomóc.
Pokaż mi na jakiej podstawie ktoś ma wiedzieć co tam wydłubałeś; te nasze pytania to na zasadzie "może to, może tamto".
...a czas ucieka ;)

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 gru 2016, o 23:16 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

Sądzę, że może się przydać: ;)
http://mirekk36.blogspot.co.uk/2014/04/puapki-programowe-debuger-na-jednej.html



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 gru 2016, o 00:04 
Offline
Użytkownik

Dołączył(a): 30 paź 2016
Posty: 41
Pomógł: 1

Sprawdziłem przerwanie dioda ładnie miga 1Hz.
Spodziewam się, że funkcja odczytu się nie wyrabia w ten 1 Hz :)
Muszę pokombinować trochę, chyba za dużo natworzyłem w jednej funkcji bo jest tam odbiór bitów z RTC i od razu wysyłanie na wyświetlacz :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 gru 2016, o 00:10 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

Coś tam na pewno namieszałeś. ;)
Tak czasami bywa!
A widziałeś ten poradnik?
http://mirekk36.blogspot.co.uk/2013/11/rtc-ds3231-najdokadniejszy-zegarek-na.html
Znajdziesz tam nawet kod źródłowy. Co za problem go sobie przerobić w/g potrzeb? ;)


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 gru 2016, o 00:25 
Offline
Użytkownik

Dołączył(a): 30 paź 2016
Posty: 41
Pomógł: 1

Własnie robiłem według niego :)
Chciałem do jednej funkcji dać odczyt z RTC i wysyłanie na wyświetlacz i widocznie nie nadąża :)
Spróbuję pociąć na kawałeczki może pomoże :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 gru 2016, o 00:25 
Offline
Użytkownik

Dołączył(a): 30 paź 2016
Posty: 41
Pomógł: 1

Koledzy,
dzisiaj siedziałem z kumplem nad moim kodem 3 godziny.
Dziwny przypadek, przepuściliśmy przez analizator stanów logicznych i za każdym razem, po każdym resecie TWI wysyłało inaczej.
Timer działał, zrobiliśmy debouncing na diodzie, kod zmieniliśmy ze 100 razy- nie działało, nie działało, aż wkurzylismy się i włączyliśmy
kod który był pierwotnie...i co się okazało? Zegarek ładnie chodzi. RTC przy wszelkich zmianach nawet powtórzonych wielokrotnie robił co chce.
Teraz działa znowu z początkowym kodem. Timer działa, wszytko działa. Tylko teraz boję się wprowadzić jakiekolwiek zmiany w kodzie żeby
znowy moduł nie oszalał. Także doszliśmy do wniosku, że to nie kod (kod był pisany na podstawie intrukcji Pana Mirka) a jakiś felerny egzemplarz
modułu. Także na przyszłośc polecam kupować sam scalaczek DS3231 i samemu podlączać resztę rzeczy, albo stary PCF8583.
Dziękuję wszystkim za chęć pomocy :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 15 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO