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



Teraz jest 23 gru 2024, o 00:37


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 
Autor Wiadomość
PostNapisane: 8 kwi 2020, o 10:56 
Offline
Nowy

Dołączył(a): 08 kwi 2020
Posty: 8
Pomógł: 0

Cześć,
Chcę za pomocą przerwań spowodować miganie jednej diody LED i nie mogę tego zrobić.
Nie wiem co robię źle. Proszę o pomoc.
Dioda jest podłączona Anodą do uC na PC0 i katodą do masy.
uC to Atmega88PA z taktowaniem 1 MHz.

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: 8 kwi 2020, o 11:10 
Offline
Użytkownik

Dołączył(a): 11 sty 2015
Posty: 166
Pomógł: 24

No w przerwaniu gasisz diodę, a gdzie ją zapalasz?
użyj operatora ^.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 kwi 2020, o 11:13 
Offline
Nowy

Dołączył(a): 08 kwi 2020
Posty: 8
Pomógł: 0

auers napisał(a):
No w przerwaniu gasisz diodę, a gdzie ją zapalasz?
użyj operatora ^.


W funkcji głównej main jest: PORTC |= LED1; , czyli dioda powinna być cały czas zapalona i gaszona gdy wystąpi przerwanie.
Układ zachowuje się tak, że dioda faktycznie się świeci, tak jakby przerwanie wgl. nie występowało.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 kwi 2020, o 12:00 
Offline
Moderator
Avatar użytkownika

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

Ten kod jest w 100% poprawny i powiem więcej działa - zatem coś musiałeś mocno poplątać np w połączeniach albo nie wiem co
Oczywiście lepiej jest zawsze dawać sobie XOR jak pisał wyżej kolega auers - bo to łatwiej zawsze okiem wyłapać ale u ciebie dioda powinna normalnie zgasnąć i już. Więc w kodzie nie szukaj przyczyny.

_________________
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: 8 kwi 2020, o 12:30 
Offline
Użytkownik

Dołączył(a): 11 sty 2015
Posty: 166
Pomógł: 24

W tej chwili nie mam jak tego sprawdzić, ale wg mnie nie ma prawa działać.
Pętla while jest pusta.
W przerwaniu jest wyjście ustawione w stan niski.
Ale w jaki sposób ma przejść w stan wysoki?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 kwi 2020, o 12:50 
Offline
Nowy

Dołączył(a): 08 kwi 2020
Posty: 8
Pomógł: 0

auers napisał(a):
W tej chwili nie mam jak tego sprawdzić, ale wg mnie nie ma prawa działać.
Pętla while jest pusta.
W przerwaniu jest wyjście ustawione w stan niski.
Ale w jaki sposób ma przejść w stan wysoki?


Tak jak mówiłem, w funkcji main wpisałem PORTC |= LED1; , a że LED1 to (1<<PC0) to na pinie PC0 jest ustawiony cały czas stan wysoki.

mirekk36 napisał(a):
Ten kod jest w 100% poprawny i powiem więcej działa - zatem coś musiałeś mocno poplątać np w połączeniach albo nie wiem co
Oczywiście lepiej jest zawsze dawać sobie XOR jak pisał wyżej kolega auers - bo to łatwiej zawsze okiem wyłapać ale u ciebie dioda powinna normalnie zgasnąć i już. Więc w kodzie nie szukaj przyczyny.


Połączenie jest tak banalne, że musi być prawidłowe, sprawdziłem to ustawiając kolejno 1 i 0 na PC0, dioda reaguje tak jak powinna.
Czy to może być wina samego uC? No ale opóźnienia działają, a podejrzewam, że są związane z Timerem w uC, czyli ten również teoretycznie działa.
Nie wiem, może kupię drugą sztukę uC i wgram na nią ten program.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 kwi 2020, o 12:59 
Offline
Użytkownik

Dołączył(a): 11 sty 2015
Posty: 166
Pomógł: 24

Pytanie co chcesz zrobić?
Raz mrugnąć? To masz dobrze i jak Mirek napisał szukaj problemu w połączeniach.
Jeżeli ma migać cyklicznie? To Ci nie działa bo nie ustawiasz ponownie wyjścia w stan wysoki.
Zamiast PORTC &= ~LED1
zrób PORTC ^= LED1


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 kwi 2020, o 13:21 
Offline
Moderator
Avatar użytkownika

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

ASUR napisał(a):
Nie wiem, może kupię drugą sztukę uC i wgram na nią ten program.

Kompletny absurd i nonsens ... po prostu kosmos. Podejrzewanie procków o takie uszkodzenia to szok .... szok

Prędzej mogłeś sam upalić sam pin procka bo np nie podłączyłeś rezystora do diody LED. A podłączyłeś ? Ale wtedy wystarczy sprawdzić miganiem diodą LED na tym pinie w pętli głównej w main.c - sprawdziłeś ?

_________________
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: 8 kwi 2020, o 14:21 
Offline
Nowy

Dołączył(a): 08 kwi 2020
Posty: 8
Pomógł: 0

mirekk36 napisał(a):
ASUR napisał(a):
Nie wiem, może kupię drugą sztukę uC i wgram na nią ten program.

Kompletny absurd i nonsens ... po prostu kosmos. Podejrzewanie procków o takie uszkodzenia to szok .... szok

Prędzej mogłeś sam upalić sam pin procka bo np nie podłączyłeś rezystora do diody LED. A podłączyłeś ? Ale wtedy wystarczy sprawdzić miganiem diodą LED na tym pinie w pętli głównej w main.c - sprawdziłeś ?


Podłączałem wszystko tak jak pokazywałeś na YT i sprawdziłem. Okazuje się, że częstotliwość była za wysoka i moja dioda migała za szybko żebym mógł to zobaczyć i należało faktycznie zmienić operator na ^= w przerwaniu. Zwiększyłem preskaler na 255 i zmieniłem operator na ^= i jest git.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 kwi 2020, o 14:30 
Offline
Użytkownik

Dołączył(a): 11 sty 2015
Posty: 166
Pomógł: 24

ASUR napisał(a):
Zwiększyłem preskaler na 255 i zmieniłem operator na ^= i jest git.

Znowu coś kręcisz.
Jak zwiększyłeś preskaler na 255 jak miałeś 1024?
Po pierwsze nie ma preskalera 255.
Po drugie jak go zmniejszasz na 256 to fizycznie zwiększasz częstotliwość a nie odwrotnie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 kwi 2020, o 09:13 
Offline
Nowy

Dołączył(a): 08 kwi 2020
Posty: 8
Pomógł: 0

Mój błąd, chodziło mi o OCR0A.



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

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