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



Teraz jest 11 lut 2025, o 15:39


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 1 lut 2016, o 21:25 
Offline
Nowy

Dołączył(a): 10 sty 2016
Posty: 8
Zbananowany użytkownik

Pomógł: 0

Witam, stworzyłem na płytce stykowej układ, gdzie podłączyłem przyciski, LCD hd47780, rtc ds1307 i buzzer. Korzystam z bibliotek do wyświetlacza od "radzia", twi od p. Mirka oraz ze znalezionej na tym forum biblioteki do RTC. Napisałem szybki program, który wyświetla godzinę w formie hh:mm:ss na ostatnich polach pierwszej linii. Dodatkowo dodałem pod przycisk umieszczony PB0 funkcje zapalenia diody. Program poprawnie pokazuje godzinę, ale raz na jakiś czas (nieokreślony) zawiesza się. Godzina przestaje się odświeżać i dioda nie zapala się po wciśnięciu przycisku. Jaka może być tego przyczyna ? W załączeniu dołączam schemat układu (zgadza się wyświetlacz oraz rtc, przyciski podłączone są w innych miejscach).



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


Kod do biblioteki RTC ds1307

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


Biblioteka do wyświetlacza oczywiście edytowane porty pod mój układ pobrałem ze strony radzio.dxp.pl - Sterowanie w trybie 4-bitowym z odczytem flagi zajętości z dowolnym przypisaniem linii sterujących.

Biblioteki do TWI pobrane ze strony p.Mirka w dziale uaktualnienia do DVD.

Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lut 2016, o 23:04 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Stawiam, że coś przestaje łączyć na stykówce. A na przykład jak używasz przy LCD pinu R/W, to przy zakłóceniu komunikacji z LCD możesz wejść do nieskończonej pętli.
Wrzuć proste miganie na diodzie LED wykonywane z przerwania timera. Będzie wiadomo czy wiesza się Ci procesor, czy tylko zapętla się gdzieś program w pętli głównej

--
Pozdrawiam,
Robert



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lut 2016, o 10:16 
Offline
Nowy

Dołączył(a): 10 sty 2016
Posty: 8
Zbananowany użytkownik

Pomógł: 0

rskup napisał(a):
Stawiam, że coś przestaje łączyć na stykówce. A na przykład jak używasz przy LCD pinu R/W, to przy zakłóceniu komunikacji z LCD możesz wejść do nieskończonej pętli.
Wrzuć proste miganie na diodzie LED wykonywane z przerwania timera. Będzie wiadomo czy wiesza się Ci procesor, czy tylko zapętla się gdzieś program w pętli głównej

--
Pozdrawiam,
Robert

Wrzuciłem przerwanie,w którym migam diodą i w przypadku zawieszenia się zegara dioda przestaje migać.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lut 2016, o 16:37 
Offline
Nowy

Dołączył(a): 10 sty 2016
Posty: 8
Zbananowany użytkownik

Pomógł: 0

Po dołożeniu przerwania migającego diodą miga ona w przypadku działania zegara jak i w przypadku jego zacięcia. W przypadku gdy zegar działa dioda miga szybko, a jak zegar się zatnie miga wolniej. Nie mam pojęcia co może być problemem.

Aktualnie kod wygląda tak:

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


//Edit:
Szybkość migania diody był spowodowany kawałkiem kodu, który obsługiwał zapalenia i gaszenie diody przy aktywnym przycisku. Z tego wniosek program faktycznie wpada gdzieś w pętlę nieskończoną bo przerwania po zatrzymaniu zegara działają prawidłowo.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lut 2016, o 11:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Jak używasz LCD z obsługą R/W to musisz w bibliotece aby skończyć pętlę sprawdzającą gotowość wyświetlacza odczytać skasowaną flagę BF. Dopóki tak nie jest, to ona kręci się w kółko i czeka na wyzerowanie BF.
Dlatego stawiam, że masz problem z komunikacją z LCD i stajesz na sprawdzaniu flagi BF.
Aby to potwierdzić, to zmień konfigurację swojej biblioteki, by nie był używany pin R/W tylko zwykłe delay-e.

--
Pozdrawiam,
Robert

------------------------ [ Dodano po: 8 minutach ]

Możesz potestować samodzielnie wymuszanie zawieszania poprzez odłączenie linii idącej do sterownika dla LCD.
Powinieneś mieć taki sam efekt.

Czy masz na pewno poprawnie zrobione zasilanie oraz na pewno dobrze stykające kable?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lut 2016, o 11:05 
Offline
Nowy

Dołączył(a): 10 sty 2016
Posty: 8
Zbananowany użytkownik

Pomógł: 0

Zmieniłem płytkę na nową ( w celu sprawdzenia czy gdzieś w układzie nie tracę styku ), ale nic to nie dało. Sam wyświetlacz bez obsługi RTC nie zacina się, jak dołączę obsługę RTC układ zacina się co losowy czas.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lut 2016, o 19:54 
Offline
Użytkownik
Avatar użytkownika

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

Powodów "zacinania" się może być wiele.
Kod programu, który zamieściłeś w Twoim pierszym poście zawiera kilka błędów.

Zobacz:

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


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


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


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


Odrazu mówię, że tego nie testowałem. Chcę Ci tylko pokazać, podstawowe błędy jakie robisz.

Poza tym nie ma potrzeby w pętli głównej co 250ms odczytywać czas z DS'a. Przecież na jego nóżce nr7 możesz ustawić cześtotliwość oscylatora na 1Hz i podłączając ją do procka możesz wyzwalać przerwanie od INT0 np zoboczem opadającym.

A jak? Temat pojawiający się pewnie dzięsiątki razy nawet na tym forum.
Choćby tutaj:
http://forum.atnel.pl/post110734.html?hilit=1307#p110734

P.S. ;)
Gorąco polecam Ci też przeczytanie książki p. Mirka:
http://atnel.pl/mikrokontrolery-avr-jezyk-c.html



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: 7 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO