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



Teraz jest 28 kwi 2026, o 04:14


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 6 wrz 2015, o 19:48 
Offline
Użytkownik

Dołączył(a): 21 lis 2013
Posty: 48
Pomógł: 0

Cześć.

Mam taki mały (chyba) problem z przerwaniem, a dokładniej wektorem przerwania, myślę ze kod wam więcej powie

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


wyrzuca błąd

In file included from ../main.c:8:0:
../main.c: In function 'main':
../main.c:30:7: error: static declaration of '__vector_16' follows non-static declaration
ISR(TIMER0_COMPA_vect)
^
../main.c:30:7: note: previous declaration of '__vector_16' was here
ISR(TIMER0_COMPA_vect)
^
make: *** [main.o] Błąd 1


załorzenie jest takie zeby migać sobie z f = 1Hz, atmega ma kwarc 16Mhz.
Mógłby ktoś wyjaśnic dlaczego się ten błąd pojawił i jak powinno być?

Dodatkowo proszę o sprawdzenie obliczeń:
Jeżeli atmega ma kwarc 16Mhz a preskaler 1024
to daje impuls co 64us, co w trybie ctc daje (przy zawężeniu 0 do 251 impulsów) przerwanie co 16,128ms czyli w 1 sekundzie muszą być 62,00397 przerwań czyli daje 63

Z góry dzięki za pomoc!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 wrz 2015, o 19:54 
Offline
Użytkownik
Avatar użytkownika

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

Procedura obsługi przerwania musi się znajdować poza ciałem pętli głównej i poza funkcją main.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 wrz 2015, o 19:55 
Offline
Użytkownik

Dołączył(a): 01 cze 2015
Posty: 30
Pomógł: 2

Kod
Kod:
ISR(TIMER0_COMPA_vect)  //tu wyrzuca błąd
{
    licznik++;
    if (licznik > 63 )
    {
         licznik = 0;
         PORTD ^= ( 1<<PD6 );
     }
}

Powinien być na zewnątrz głównej funkcji.

Pozdrawiam,
Grzegorz



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 wrz 2015, o 20:02 
Offline
Użytkownik

Dołączył(a): 21 lis 2013
Posty: 48
Pomógł: 0

Ok to jest jeden problem rozwiązany, teraz dlaczego dioda nie miga tylko swieci na stałe....

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: 6 wrz 2015, o 20:12 
Offline
Użytkownik

Dołączył(a): 04 cze 2013
Posty: 517
Pomógł: 26

Bo prescaler ustawia sie w innym rejestrze TCCR0B

_________________
Przewodnik|Sterownik akwariowy



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 wrz 2015, o 20:18 
Offline
Użytkownik

Dołączył(a): 21 lis 2013
Posty: 48
Pomógł: 0

yyyy jeszcze pisałem ze str 107... (a to sie do rejestru TCCR0B odnosiło...)

Dzięki wielkie za pomoc 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: 6 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

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