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



Teraz jest 22 mar 2026, o 11:39


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
PostNapisane: 12 kwi 2013, o 11:20 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 lip 2012
Posty: 157
Pomógł: 8

Witam. Problem jak w temacie, działa dobrze przez ok minute czasami nawet przez 3 a później się wykrzacza. W zasadzie to od startu do końca program powinien robić to samo, czyli zliczać impulsy z INT0. Przerwanie od timer2 wykorzystane jest na potrzeby generowania sygnału PWM oraz do zliczania czasu ok 1s.

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


no i się kurcze pogubiłem. Nie wykluczam, że LCD ma jakieś inne adresy linii, chociaż gdy testowałem każdy znak i wiersz to nie było żadnego problemu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 kwi 2013, o 11:27 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

Zmień to 92. if(time_count==20000) na if(time_count>20000)

I zobacz czy wtedy sie bedzię wykrzaczać ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 kwi 2013, o 11:34 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 lip 2012
Posty: 157
Pomógł: 8

Niestety znów się posypało. Próbowałem już przy użyciu dwóch timerów, czyli jeden dla PWM a drugi dla odliczania impulsów przez 1s ale nic nie pomogło.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 kwi 2013, o 11:36 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

No dobra ........ rozumiem że wartości które są wyświetlane na lcd są nie prawdziwe .... tak ?

I opisz dokładniej co się dzieje ....... bo opis sie wykrzacza raczej za dużo nie mówi ;)



Ostatnio edytowano 12 kwi 2013, o 11:41 przez Malutki_27, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 kwi 2013, o 11:41 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 lip 2012
Posty: 157
Pomógł: 8

ok minuty jest w porządku, dopiero po czasie pojawiają się ???0??? &*%# ##%% na różnych liniach, albo na lini 0 i 2, znaki migają albo na wszystkich 4 liniach są wyświetlone jakby statycznie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 kwi 2013, o 11:49 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

Dopiero teraz to zauważyłem ;)

Problemem może być to że cały czas odświeżasz wyświetlacz w pętli while i dodatkowo go czyścisz w przerwaniu.
Pamiętaj że w momencie wywołania przewania pętla główna jest wstrzymywana na rzecz przerwania w twoim przypadku od timera , więc może się zdarzyć sytuacja że w trakcie zmiany informacji wyświetlanych na LCD wpada sobie ISR (TIMER2_COMP_vect) (które wstrzymuje wykonywanie głownego programu) ze swoim LCD_CLS() i cały misterny plan idzie w ....... ;)

Wywal czyszczenie lcd_cls z przerwania przenieś je do pętli while, dodatkowo w przerwaniu wykozystaj flagę do do odświeżania wyświetlacza w pętli głównej.

Nie wiem czy to w miere jasno napisałem .... ale mam nadzieję że załapiesz.

------------------------ [ Dodano po: 6 minutach ]

Dodatkowo przyglądając temu przerwaniu ja osobiście wywalił bym cały warunek if do petli głównej ....



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 kwi 2013, o 13:41 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27450
Lokalizacja: Szczecin
Pomógł: 1045

Nigdy - przenigdy - wszędzie o tym piszę - nie używaj obsługi LCD w przerwaniach - a SZCZEGÓLNIE funkcji CLS :( .... o tej funkcji najlepiej w ogóle zapomnieć .

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 kwi 2013, o 13:51 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 lip 2012
Posty: 157
Pomógł: 8

racja z tym lcd_cls(); z przerwania do while(1) przeniosłem
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


i smiga jak należy. Dzięki za pomoc.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 kwi 2013, o 16:08 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 08 mar 2013
Posty: 236
Lokalizacja: Warszawa
Pomógł: 5

nie wiem czy dobrze rozumiem, robisz to tak, że w przerwaniu timera2 generujesz pwm z okreslonym wypelnieniem, dodatkowo co iles wygenerowanych przerwań zliczasz ilosc wygenerowanych przerwan int. Ale co w przypadku, gdyby int szybko zliczal i przerwanie byłoby wykonywane niemalże bezprzerwy?
Ja tam słabo się znam, ale dwa przerwania związane co okreslony czas nie sa chyba uniwersalne.

_________________
sig off ;(



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 4 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