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



Teraz jest 27 kwi 2024, o 10:53


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 15 lis 2013, o 21:50 
Offline
Użytkownik

Dołączył(a): 16 maja 2012
Posty: 349
Lokalizacja: Legnica
Zbananowany użytkownik

Pomógł: 23

Witam
Jak w temacie, czyli czy jest możliwe programowe wywołanie w ATMega328 obsługi przerwania INT0/INT1?
Piszę obsługę termostatu ze sterowaniem grupowym i fazowym. Na razie nie mam układu docelowego a tym samym detektora "zera". Bazą jest zestaw ATB. Pomyślałem sobie, że użyję Timer0 (mam w nim już kilka timerów programowych) do wywołania przerwania INT0 które docelowo ma służyć jako detektor zera.
W tym celu próbowałem w obsłudze przerwania ISR(TIMER0_OVF_vect) wywołać
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

ale mi to nie bangla. Nie mam już wolnych pinów, ale kosztem buzzera zrobiłem sygnał zegarowy ok.100Hz na PB3 i podpiąłem go do wejścia INT0. Jeżeli jest jednak możliwość zmajstrowania czegoś takiego jak w temacie to prosiłbym o podpowiedź.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lis 2013, o 23:04 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Powyższa linijka kasuje flagę przerwania.
Możesz tą flagę ustawić jeśli wejście INT0/PD2 skonfigurujesz jako wyjście. Jak zmienisz stan PORTD.2 to w zależności od konfiguracji wywołasz przerwanie.


Autor postu otrzymał pochwałę

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lis 2013, o 16:54 
Offline
Użytkownik

Dołączył(a): 16 maja 2012
Posty: 349
Lokalizacja: Legnica
Zbananowany użytkownik

Pomógł: 23

No tak. Przecież to takie oczywiste !!! :)
Sprawdziłem. Nie muszę zmieniać kierunku portu. Mając ustawione PD2 na wejście z włączonym pull-up ( przy detektorze zera mam podciągnięcie zewnętrznym rezystorem ) w przerwaniu TIMER0_OVF_vect wpisuję do portu 0 czyli wyłączam pull-up. Wprawdzie chyba to jest stan Hi-Z więc nie ma pewności czy tam jest 0 czy 1, ale przerwanie mi się generuje, bo kontrolnie w ISR(INT0_vect) mam włączony kontrolny migacz LED'em. W tym też przerwaniu ponownie włączam pull-up. Który czeka na ponowne wyłączenie w przerwaniu TIMER0.
Dzięki wielkie za odpowiedzi.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lis 2013, o 19:31 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1960
Lokalizacja: Lipsko
Pomógł: 125

Ja przy testach swojego sterownika podczas testów użyłem normalnego przerwania co 100Hz. Mało tego, wszelkie timery, multipleksy, itd. też miałem pod tym przerwaniem, a gdy już program wszedł do urządzenia końcowego to zmieniłem to przerwanie na wywoływane z INT0 - częstotliwość w sieci jest stosunkowo stabilna więc i kwarc nie był potrzebny aby wszystko ładnie chodziło :-)

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lis 2013, o 16:03 
Offline
Użytkownik

Dołączył(a): 16 maja 2012
Posty: 349
Lokalizacja: Legnica
Zbananowany użytkownik

Pomógł: 23

Po kilku testach stwierdziłem, że pozostawianie PD2 w stanie HiZ wprowadza zakłócenia w generowaniu przerwania INT0. Stosowałem różne kombinacje tj. włączanie podciągania w TIMER0 wyłączanie w INT0, włączanie i wyłączanie podciągania w TIMER0, z LOOP'em czy bez. w którymś z wariantów nawet było tak, że kabelek łączeniowy działał jak antena i przerwania generowały się probabilistycznie "w zależności od okoliczności". Pewne wyniki uzyskałem w takiej konfiguracji ( fragment procedury obsługi przerwania TIMER0 )
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

kod debounce akurat przydał się do ustalenia stanów na PD2.
Kolega Krauser jak jak do drzewiej bywało ma rację.

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

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