RTV forum PL | NewsGroups PL

Konfiguracja Timer0 w ATMega8: problem z przerwaniami i wysyłaniem danych co 1 sek.

ATMega8 i Timer0

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Konfiguracja Timer0 w ATMega8: problem z przerwaniami i wysyłaniem danych co 1 sek.

KeiCi
Guest

Mon Oct 15, 2007 5:19 pm   



Witam,
zapoznaję się z programowaniem mikrokontrolerów z rodziny AVR
i o ile z programowaniem bez przerwań jakoś sobie radzę to
kiedy dochodzą przerwania zaczynają się schody ;]

Czy mógłby mi ktoś powiedzieć co robię źle?
Wszystko działa ładnie, przetwornik dziala, wysyłanie
po RSie działa do momentu gdy próbuję dodać timer.
Tak to wyliczyłem że powinno dokonywać pomiaru i
wysyłać co 1 sek. ale tak się nie dzieje.

############## CODE ##############
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sfr_defs.h>

#include "a2c.h"
#include "uart.h"


volatile char flag;
volatile unsigned int T0_counter;

int main(void) {

TCCR0 |= _BV(CS02) | _BV(CS00);
TIMSK |= _BV(TOIE0);
SFIOR |= _BV(PSR10);

T0_counter=0;
flag=0;

uart_init();
a2c_init();

sei();

while (1) {
if (flag==1) {
T0_counter++;
flag=0;
};
if (T0_counter>5859) {
T0_counter=0;
cli();
uart_write(0);
uart_write(a2c_convert(0));
sei();
};
// for (i=0;i<60000;i++) { for (j=0;j<6000;y++) { }; };
};

return 0;
};

ISR (SIG_OVERFLOW0) {
flag=1;
}
############## END ##############


Dziękuję za pomoc i pozdrawiam
--
KC

AK
Guest

Mon Oct 15, 2007 7:07 pm   



KeiCi pisze:
Quote:
Witam,
zapoznaję się z programowaniem mikrokontrolerów z rodziny AVR
i o ile z programowaniem bez przerwań jakoś sobie radzę to
kiedy dochodzą przerwania zaczynają się schody ;]

Czy mógłby mi ktoś powiedzieć co robię źle?
Wszystko działa ładnie, przetwornik dziala, wysyłanie
po RSie działa do momentu gdy próbuję dodać timer.
Tak to wyliczyłem że powinno dokonywać pomiaru i
wysyłać co 1 sek. ale tak się nie dzieje.

A czy ustawisz prawidlowo stos ?

Poza tym, przy inicjalizacji Timera proponowal bym zamienic kolejnosc:
najpierw skonfigurowac, potem wlaczyc.

TIMSK |= _BV(TOIE0);
TCCR0 |= _BV(CS02) | _BV(CS00);

Polecam tez darmowe AVR Studio - mozna symulowac, debugowac na poziomie
kodu w C - przydatne narzedzie.

Pozdr
AK



Quote:
############## CODE ##############
#include <avr/io.h
#include <avr/interrupt.h
#include <avr/sfr_defs.h

#include "a2c.h"
#include "uart.h"


volatile char flag;
volatile unsigned int T0_counter;

int main(void) {

TCCR0 |= _BV(CS02) | _BV(CS00);
TIMSK |= _BV(TOIE0);
SFIOR |= _BV(PSR10);

T0_counter=0;
flag=0;

uart_init();
a2c_init();

sei();

while (1) {
if (flag==1) {
T0_counter++;
flag=0;
};
if (T0_counter>5859) {
T0_counter=0;
cli();
uart_write(0);
uart_write(a2c_convert(0));
sei();
};
// for (i=0;i<60000;i++) { for (j=0;j<6000;y++) { }; };
};

return 0;
};

ISR (SIG_OVERFLOW0) {
flag=1;
}
############## END ##############


Dziękuję za pomoc i pozdrawiam


KeiCi
Guest

Mon Oct 15, 2007 10:33 pm   



AK napisał(a):
Quote:
KeiCi pisze:
Witam,
zapoznaję się z programowaniem mikrokontrolerów z rodziny AVR
i o ile z programowaniem bez przerwań jakoś sobie radzę to
kiedy dochodzą przerwania zaczynają się schody ;]

Czy mógłby mi ktoś powiedzieć co robię źle?
Wszystko działa ładnie, przetwornik dziala, wysyłanie
po RSie działa do momentu gdy próbuję dodać timer.
Tak to wyliczyłem że powinno dokonywać pomiaru i
wysyłać co 1 sek. ale tak się nie dzieje.

A czy ustawisz prawidlowo stos ?
Poza tym, przy inicjalizacji Timera proponowal bym zamienic kolejnosc:
najpierw skonfigurowac, potem wlaczyc.

TIMSK |= _BV(TOIE0);
TCCR0 |= _BV(CS02) | _BV(CS00);

Polecam tez darmowe AVR Studio - mozna symulowac, debugowac na poziomie
kodu w C - przydatne narzedzie.

Pozdr
AK


Właśnie w Avr Studio piszę. W symulacji jest ok, przerwanie śmiga,
zwiększa licznik itd. Po zaprogramowaniu układu już nie działa.
Dodałem nawet diódę do wolnego wyjścia - powinna migać co dwie sekundy,
ale nie miga ;]

Jak ustawić stos? Project->Conf. options->Memory Settings->Stack Settings?

Pozdrawiam
--
KC

KeiCi
Guest

Tue Oct 16, 2007 2:28 pm   



Problem się rozwiązał. Poprzestawiałem coś w ustawieniach
i wektor przerwań nie zaczynał się od początku tylko
kilkadziesiąt bajtów dalej.
I o ile normalnie nie miało to wpływu na działanie to przy
skokach do przerwań program szedł w maliny.

Pozdrawiam
--
KC

elektroda NewsGroups Forum Index - Elektronika Polska - Konfiguracja Timer0 w ATMega8: problem z przerwaniami i wysyłaniem danych co 1 sek.

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map