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



Teraz jest 18 mar 2026, o 06:42


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 15 ] 
Autor Wiadomość
PostNapisane: 3 sty 2014, o 21:27 
Offline
Nowy

Dołączył(a): 24 gru 2013
Posty: 9
Pomógł: 0

Witam chciałem napisać swój własny program testowy do timera miał on migać diodą. Program jest do Atmegi8A-PU i dla timera 16 bitowego.Taktowanie 8MHz O to kod
Kod:
/*
 * Main.c
 *
 *  Created on: 03-01-2014
 *      Author: Dawid
 */
#include <avr/io.h>
#include <avr/interrupt.h>

#define LED (1<<PB1)
#define LED_X PORTB ^= LED

void main(void) {

   DDRB |= LED
   TCCR1B |= (1 << WGM12); // ustawienie timera1 (16 bitowego)
   TCCR1B |= (1 << CS10) | (1 << CS12);//preskaler wyosi 1024
   OCR1B = 15624;
   TIMSK |= (1 << OCIE1B);
   sei();

   sei();
   //Globalne uruchomienie przerwań

   while (1)
      ; //główna pętla programu

}

//############ Procedura obsługi przerwania od przepełnienia timera ############
ISR(TIMER0_OVF_vect) {
   

   LED_X;

}
//##############################################################################

Tylko że dioda nie miga:(

Proszę zmienić wyświetlanie kodu --- > wstawiamy w znacznikach SYNTAX nie CODE --> SunRiver



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sty 2014, o 21:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 lut 2013
Posty: 376
Lokalizacja: Kłopoty-Stanisławy
Pomógł: 33

1. A wjakim trybie ma pracować Timer ?
2. Z jaką częstotliwością?
3. Jak jest taktowana Mega ?

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

Wywołujesz wektor przerwań dla Timera0 – więc nie będzie działać i mega cały czas się będzie resetować

_________________
50 znaków Atnela ....



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sty 2014, o 21:36 
Offline
Nowy

Dołączył(a): 24 gru 2013
Posty: 9
Pomógł: 0

1 W trybie CTC
2 2 sekundy czyli 0.5Hz
3 Mega 8MHz

Gdzie wywołuje timer0 ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sty 2014, o 21:41 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 kwi 2013
Posty: 65
Pomógł: 0

Jak uruchamiasz timer1 to i w przerwaniu ma być
ISR (TIMER1_COMP_vect)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sty 2014, o 21:42 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 lut 2013
Posty: 376
Lokalizacja: Kłopoty-Stanisławy
Pomógł: 33

dawidu00 napisał(a):
TCCR1B |= (1 << WGM12); // ustawienie timera1 (16 bitowego)


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


dawidu00 napisał(a):
ISR(TIMER0_OVF_vect) {
   
   LED_X;

}


Jeżeli wywołujesz Wektor dla Timer0 to jakim cudem Timer1 może w ogóle ruszyć — Mega cały czas Ci się resetuje i nic nie mignie, chyba że przypadkiem.

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

_________________
50 znaków Atnela ....



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sty 2014, o 21:43 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 sie 2012
Posty: 245
Lokalizacja: Kielce
Pomógł: 6

W argumencie makra ISR.

...oj równocześnie pisaliśmy

_________________
1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sty 2014, o 21:48 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 lut 2013
Posty: 376
Lokalizacja: Kłopoty-Stanisławy
Pomógł: 33

W dodatku kolega wywoływał wektor dla trybu normal — przepełnienie licznika .....

Poza tym Timer1 - 16-bitowy do generowania "pika" co 0.5Hz ..... to totalne nieporozumienie .....

Następnym razem użyj Timerka0 którego już nie tak szkoda, generuj sobie tiki (heart beat :) ) co 10-100 ms i programowo odczekasz sobie dowolny czas w zakresie typu zmiennej. Czyli jak 8-bit to – zmienna * heart beat = da Ci dowolony czas ... pod warunkiem że zmienna będzie < 256. Zawsze można użyć 16-bit ......

_________________
50 znaków Atnela ....



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sty 2014, o 22:01 
Offline
Nowy

Dołączył(a): 24 gru 2013
Posty: 9
Pomógł: 0

mam taki kod i dalej wywala
Kod:
/*
 * main.c
 *
 *  Created on: 03-01-2014
 *      Author: Dawid
 */
/*
 * main.c
 *
 *  Created on: 03-01-2014
 *      Author: Dawid
 *       *
 */
#include <avr/io.h>
#include <avr/interrupt.h>

#define LED (1<<PB1)
#define LED_X PORTB ^= LED
void main(void) {
   DDRB |= LED

TCCR1B |= (1 << WGM12) | (1 << WGM13); tu tkwi problem
   TCCR1B |= (1 << CS10) | (1 << CS12);
   OCR1B = 15624;
   TIMSK |= (1 << OCIE1B);
   sei();

   
   while (1) {

   }
}
ISR(TIMER1_COMPB_vect){

   LED_X;

}

tak konsola wywala Building
file: .../main.c
Invoking: AVR Compiler
avr-gcc -Wall -Os -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega8 -DF_CPU=8000000UL -MMD -MP -MF"main.d" -MT"main.d" -c -o "main.o" "../main.c"
../main.c:19: warning: return type of 'main' is not 'int'
../main.c: In function 'main':
../main.c:21: error: called object '2' is not a function
make: *** [main.o] Error 1



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sty 2014, o 22:06 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 lut 2013
Posty: 376
Lokalizacja: Kłopoty-Stanisławy
Pomógł: 33

źle zainiciowana funkcja main

powinno być

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

_________________
50 znaków Atnela ....



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sty 2014, o 22:06 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 kwi 2013
Posty: 418
Lokalizacja: Rzeszów
Pomógł: 102

Zależnie o jaki problem chodzi, ale jeśli ten kod faktycznie odzwierciedla źródło, to na pewno problemem jest brak średnika w linii wcześniejszej ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sty 2014, o 22:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 lut 2013
Posty: 376
Lokalizacja: Kłopoty-Stanisławy
Pomógł: 33

ehhh..... już późno .... ;)

_________________
50 znaków Atnela ....



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sty 2014, o 22:40 
Offline
Nowy

Dołączył(a): 24 gru 2013
Posty: 9
Pomógł: 0

Kolejne moje małe pytanie czemu dioda zapala się i od razu gaśnie. Kod:
Kod:
/*
 * main.c
 *
 *  Created on: 03-01-2014
 *      Author: Dawid
 */
/*
 * main.c
 *
 *  Created on: 03-01-2014
 *      Author: Dawid
 *       *
 */
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

#define LED (1<<PB1)
#define LED_TOG PORTB ^= LED

int main(void) {

   DDRB |= LED;
   PORTB &=~LED;


   TCCR1B |= (1 << CS10) | (1 << CS12); // set prescaler = 1024 ---> please check proper values in PDF
   TCCR1B |= (1 << WGM12) | (1 << WGM13); // set CTC mode ---> please check proper values in PDF
   OCR1B = 7811; // every  [ 2000 ms ]
   TIMSK |= (1 << OCIE1B); // enable CompareX interrupt

   sei();

   while (1) {

   }
}
ISR(TIMER1_COMPB_vect) {
   LED_TOG;


}



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sty 2014, o 22:43 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 lut 2013
Posty: 376
Lokalizacja: Kłopoty-Stanisławy
Pomógł: 33

Nie rozumiem co złego się dzieje ...
Teraz ma ZMIENIAĆ stan na przeciwny co 1 sekundę

_________________
50 znaków Atnela ....



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sty 2014, o 22:43 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

@dawidu00 kolejne małe pytanie
czemu nie korzystasz ze znaczników syntax=c ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sty 2014, o 22:59 
Offline
Nowy

Dołączył(a): 24 gru 2013
Posty: 9
Pomógł: 0

proszę o zamknięcie tematu



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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