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



Teraz jest 15 lis 2024, o 20:34


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 
Autor Wiadomość
PostNapisane: 4 cze 2016, o 09:57 
Offline
Nowy

Dołączył(a): 16 mar 2016
Posty: 8
Pomógł: 0

Cześć,

Przed przystąpieniem do prób skomunikowania mikrokontrolera z zegarem RTC (PCF8583F) poprzez magistralę IIC, chciałem sprawdzić przerwanie zewnętrzne generowane na podstawie sygnałów z pinu INT RTC.

Według specyfikacji zegara :

Obrazek

Powinien on generować przerwania cykliczne co 1 sekundę, pod warunkiem iż bit alarmu wcześniej nie został skonfigurowany.
Tak też jest ustawiony rejestr kontrolny po resecie :

Obrazek

Przerwanie zewnętrzne dla Atmegi664P jest skonfigurowane prawidłowo. W przypadku wystąpienia przerwania INT0 powinna zapalić się dioda, podłączona do PORTU A, PA0.
Przy zwarciu PD2 do dowolnego pinu VCC na płytce reakcja zachodzi. Przy podłączeniu PD2 do wyprowadzenia INT zegara nic się nie dzieję.

Poniżej wycinek z kodu testowego :
Konfiguracja przerwania.

Kod:
void ext_init()
{
   EICRA |= (1<<ISC01);
   EIMSK |= (1<<INT0);
   EIFR |= (1<<INTF0);
   
}

// External Interrupt Request 0
ISR(INT0_vect)
{
   LED_TOGGLE;
}


Dodatkowo w funkcji main port PD2 jest ustawiony jako wyjście, aby je podciągnąć.

Czy może być tak że zegar fabrycznie ma ustawiony inaczej rejestr kontrolny i dla tego przerwanie nie przychodzi ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 cze 2016, o 10:07 
Offline
Moderator
Avatar użytkownika

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

Po pierwsze to podłącz sobie zwykłą diodę LED oczywiście przez rezystor do wyjścia INT układu PCF8583 (katodą) a anodę przez rezystor do VCC i zobacz czy będzie sobie mrugać co sekundę - to najprostszy możliwy test tego scalaka (wszędzie o tym piszę i to pokazuję)

Jeśli chodzi o kod to nie wiadomo czy dałeś sei(); bo całego kodu inicjalizacyjnego nie pokazujesz nie wiedzieć czemu a tam mogłeś zrobić babole szczególnie gdy piszesz to:

d3tox napisał(a):
Dodatkowo w funkcji main port PD2 jest ustawiony jako wyjście, aby je podciągnąć.

Ustawiony jako wyjście aby podciągnąć ? to w końcu jak ? .. ustawiasz go jako wejście czy wyjście ? ;)

podpowiedź - MUSI BYĆ ustawiony jako WEJŚCIE

a wystawienie jedynki na odpowiedni bit w rejestrze PORTx powoduje jego podciągnięcie

zajrzyj sobie tutaj:
http://mirekk36.blogspot.com/2012/01/av ... stawy.html

------------------------ [ Dodano po: 1 minucie ]

d3tox napisał(a):
y może być tak że zegar fabrycznie ma ustawiony inaczej rejestr kontrolny i dla tego przerwanie nie przychodzi ?


Pomyśl sobie - po co takie rzeczy z kosmosu wymyślać, że zegar ma inaczej ustawiony rejestr jakiś tam niż to napisane jest w PDF jeśli ty nawet diody LED nie podłączałeś aby go sprawdzić ?

coś źle robisz w kodzie po prostu

_________________
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: 4 cze 2016, o 12:01 
Offline
Nowy

Dołączył(a): 16 mar 2016
Posty: 8
Pomógł: 0

Sei(); - było zadeklarowane.

mirekk36 napisał(a):
podpowiedź - MUSI BYĆ ustawiony jako WEJŚCIE


Dziękuje za podpowiedź :). Działa.



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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