ATMega16L - problem z przerwaniami - avr-gcc + ponyprog



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "Tomasz Sliwa" <tomsliwaXXX_at_nospam_XXXsys.net.pl>
Subject: ATMega16L - problem z przerwaniami - avr-gcc + ponyprog
Date: Mon, 15 Nov 2004 12:22:35 +0100


Witam
Rozpoczynam moja przygode z AVR i mam problem z przerwaniami. Robie
ksiazkowo SIGNAL(SIG_OVERFLOW0) {...}, ustawiam tryb pracy timera, wlaczam
przerwania i przy pierwszym wywolaniu przerwania program idzie w krzaki.
SIGNAL(__vector_default) tez nie daje informacji, co dzieje sie z procesorem
i dlaczego przerwania nie dzialaja poprawnie. Wyglada na to, ze procek ma
niewlasciwy poczatkowy wekor przerwan. Probowalem ustawiac fusebity na rozne
sposoby i nic nie pomaga. Moze ktos mial podobny problem z ATMega16L ???
Pozdrawiam
Tomek



Poprzedni Następny
Wiadomość
Spis treści
From: "max" <max441_at_nospam_wp.pl>
Subject: Re: ATMega16L - problem z przerwaniami - avr-gcc + ponyprog
Date: Mon, 15 Nov 2004 12:32:12 +0100


A dodałeś

#include <avr/signal.h>
#include <avr/interrupt.h>
?

Użytkownik "Tomasz Sliwa" <tomsliwaXXX_at_nospam_XXXsys.net.pl> napisał w wiadomości
news:cna3ot$hvo$1_at_nospam_nemesis.news.tpi.pl...
Witam
Rozpoczynam moja przygode z AVR i mam problem z przerwaniami. Robie
ksiazkowo SIGNAL(SIG_OVERFLOW0) {...}, ustawiam tryb pracy timera, wlaczam
przerwania i przy pierwszym wywolaniu przerwania program idzie w krzaki.
SIGNAL(__vector_default) tez nie daje informacji, co dzieje sie z
procesorem
i dlaczego przerwania nie dzialaja poprawnie. Wyglada na to, ze procek ma
niewlasciwy poczatkowy wekor przerwan. Probowalem ustawiac fusebity na
rozne
sposoby i nic nie pomaga. Moze ktos mial podobny problem z ATMega16L ???
Pozdrawiam
Tomek





Poprzedni Następny
Wiadomość
Spis treści
From: "Tomasz Sliwa" <tomsliwaXXX_at_nospam_XXXsys.net.pl>
Subject: Re: ATMega16L - problem z przerwaniami - avr-gcc + ponyprog
Date: Mon, 15 Nov 2004 12:37:40 +0100


A dodałeś

#include <avr/signal.h>
#include <avr/interrupt.h>
?
Tak
Program kompiluje sie bez ostrzezen. Jesli nie uzywam przerwan wszystko jest
OK. Deasemblowalem binarke i tez wydaje sie byc OK.
Podejrzewam, ze cos z fusebitami jest nie tak i przy wywolaniu przerwania
program skacze mi w zly obszar pamieci.
Nie mam doswiadczenia z AVR i pytam, bo moze szukam nie tam gdzie trzeba.

Pozdrawiam
Tomek





Poprzedni Następny
Wiadomość
Spis treści
From: "max" <max441_at_nospam_wp.pl>
Subject: Re: ATMega16L - problem z przerwaniami - avr-gcc + ponyprog
Date: Mon, 15 Nov 2004 14:08:55 +0100



Podejrzewam, ze cos z fusebitami jest nie tak i przy wywolaniu przerwania
program skacze mi w zly obszar pamieci.

Jesteś pewien, że błąd występuje przy wywołaniu tego przerwania? A może po
restarcie skacze odrazu w zly obszar? Działo by sie tak przy zaprogramowanym
fusie Boot Reset, wtedy po restarcie program skacze pod adres Boot Loadera.
Być może masz też żle ustawione fusy zegara.



Poprzedni Następny
Wiadomość
Spis treści
From: "Tomasz Sliwa" <tomsliwaXXX_at_nospam_XXXsys.net.pl>
Subject: Re: ATMega16L - problem z przerwaniami - avr-gcc + ponyprog
Date: Mon, 15 Nov 2004 14:44:29 +0100


Jesteś pewien, że błąd występuje przy wywołaniu tego przerwania? A może po
restarcie skacze odrazu w zly obszar?
To jest mozliwe. Program inicjuje sie dobrze, bo USART dziala poprawnie.
Kombinowalem i z zaprogramowanym i niezaprogramowanym fusie BOOTRST i nie
dziala

Być może masz też żle ustawione fusy zegara.

A maja one znaczenie?? Procek dziala na kwarcu 7.316 MHz. Generator dziala
poprawnie, bo USART generuje wlasciwa transmisje.

Pozdrawiam
Tomek



Poprzedni Następny
Wiadomość
Spis treści
From: "max" <max441_at_nospam_wp.pl>
Subject: Re: ATMega16L - problem z przerwaniami - avr-gcc + ponyprog
Date: Mon, 15 Nov 2004 15:12:19 +0100


No to sam już nie wiem. Jedyne co mi jeszcze przychodzi do głowy to może nie
ten procesor w makefilu.
Może podeślij trochę kodu do obejrzenia.



Poprzedni Następny
Wiadomość
Spis treści
From: "Tomasz Sliwa" <tomsliwaXXX_at_nospam_XXXsys.net.pl>
Subject: Re: ATMega16L - problem z przerwaniami - avr-gcc + ponyprog
Date: Mon, 15 Nov 2004 15:29:33 +0100


Może podeślij trochę kodu do obejrzenia.
Nie mam go teraz pod reka. Jesli dzis nie uruchomie przerwac, jutro rzuce
kodem

Pozdrawiam
Tomek



Poprzedni Następny
Wiadomość
Spis treści
From: "Arek Karas" <arkkarREMOVE_at_nospam_2com.pl>
Subject: Re: ATMega16L - problem z przerwaniami - avr-gcc + ponyprog
Date: Mon, 15 Nov 2004 20:47:22 +0100



Użytkownik "Tomasz Sliwa" <tomsliwaXXX_at_nospam_XXXsys.net.pl> napisał w wiadomości
news:cna4l6$nb9$1_at_nospam_nemesis.news.tpi.pl...
A dodałeś

#include <avr/signal.h>
#include <avr/interrupt.h>
?
Tak
Program kompiluje sie bez ostrzezen. Jesli nie uzywam przerwan wszystko
jest
OK. Deasemblowalem binarke i tez wydaje sie byc OK.
Podejrzewam, ze cos z fusebitami jest nie tak i przy wywolaniu przerwania
program skacze mi w zly obszar pamieci.
Nie mam doswiadczenia z AVR i pytam, bo moze szukam nie tam gdzie trzeba.
Moze to problem ze stosem ?
Jak duzo RAM-u wykorzystujesz ?
O ile mi wiadomo, avr-gcc umieszcza stos na koncu pamieci RAM procesora.
Jesli program uzywa duzo RAM-u to na stos pozostaje niewiele.

Pozdr
AK


Poprzedni Następny
Wiadomość
Spis treści
From: Aeddin <aeddin_at_nospam_op.pl>
Subject: Re: ATMega16L - problem z przerwaniami - avr-gcc + ponyprog
Date: Tue, 16 Nov 2004 08:25:52 +0100


Dnia 2004-11-15 20:47, Arek Karas wrote:

Użytkownik "Tomasz Sliwa" <tomsliwaXXX_at_nospam_XXXsys.net.pl> napisał w
wiadomości news:cna4l6$nb9$1_at_nospam_nemesis.news.tpi.pl...
[ciach]
Moze to problem ze stosem ?
Jak duzo RAM-u wykorzystujesz ?
O ile mi wiadomo, avr-gcc umieszcza stos na koncu pamieci RAM procesora.
Jesli program uzywa duzo RAM-u to na stos pozostaje niewiele.
[ciach]

Sądzę że to faktycznie za mało miejsca na stos. U mnie występował ten
sam problem, ale po zadeklarowaniu stosu wszystko zaczeło działać.
W moim programie dla ATMega8515 (piszę w avrgcc) zrobiłem to tak:
SPH = RAMEND >> 8;
SPL = RAMEND & 0xff;

Pozdrawiam
--
Aeddin

Poprzedni Następny
Wiadomość
Spis treści
From: "Tomasz Sliwa" <tomsliwaXXX_at_nospam_XXXsys.net.pl>
Subject: Re: ATMega16L - problem z przerwaniami - avr-gcc + ponyprog
Date: Tue, 16 Nov 2004 11:56:52 +0100


/* Kod programu

Pomozcie w znalezieniu bledu. Moze cos jeszcze trzeba ustawic. Fusebit
BOOTRST jest niezaprogramowany.

*/
#define __AVR_ATmega16__
#include <string.h>
#include "avr/eeprom.h"
#include "avr/io.h"
#include "avr/signal.h"
#include "avr/interrupt.h"

typedef unsigned char BYTE;
typedef unsigned int WORD;

BYTE a = 'a';
BYTE b = ' ' ;
BYTE c = 'c';
int count = 0;
void rs_init()
{
outp(0, UBRRH );
outp(47, UBRRL);
outp(BV(RXEN)|BV(TXEN), UCSRB);
//outp(BV(RXCIE)|BV(TXCIE)|BV(URSEL)|BV(UCSZ0)|BV(UCSZ1), UCSRC);
outp((BV(URSEL)|BV(UCSZ0)|BV(UCSZ1)) ,UCSRC);;
}

void rs_putch(BYTE c)
{
outp(c, UDR);
loop_until_bit_is_set(UCSRA,TXC);
sbi(UCSRA, TXC);
}
void rs_puts(char *str)
{
while (*str != 0)
{
rs_putch(*str);
str++;
}
}
BYTE rs_getch()
{
BYTE c = 0;
loop_until_bit_is_set(UCSRA, RXC);
c = inp(UDR);
return c;
}
SIGNAL(SIG_OVERFLOW0)
{
count++;
if(count > 100)
{
count = 0;
if(a < 'w') a++;
else a = '0';
}
}
SIGNAL(__vector_default)
{
rs_putch('d');
b = 'd';
}

int main()
{
outp((1<<TOIE0), TIMSK); /* enables the T/C0 overflow interrupt in the
T/C interrupt mask register for */
outp(0, TCNT0); /* start value of T/C0 */
outp(5, TCCR0); /* prescale ck/1024 */
rs_init();
rs_puts("\n\rBefore sei");
sei();
rs_puts("\n\rReset");
for(;;)
{
if(a != c)
{
rs_puts("\n\ra = ");
c = a;
rs_putch(a);
}
if(b != ' ' )
{
rs_puts("\n\rb = ");
rs_putch(b);
b = ' ' ;
}
}
return 0;
}
/*
A moze ktos moglby na szybko przepuscic przez avr-gcc i sprawdzic u siebie
czy toto dziala.
Jest moze jakis prosty symulator dla AVR pod linuxy??

Pozdrawiam
Tomek
*/



Poprzedni Następny
Wiadomość
Spis treści
From: "max" <max441_at_nospam_wp.pl>
Subject: Re: ATMega16L - problem z przerwaniami - avr-gcc + ponyprog
Date: Tue, 16 Nov 2004 12:42:29 +0100


Błędu żadnego nie ma. Sprawdziłem i działa zarówno na symulatorze (AVR
Studio) jak i na rzeczywistym procku.
Napisz dokładnie jakie fusy ustawiłeś i na czym to testujesz.

Pozdrawiam,
Piotrek.



Poprzedni Następny
Wiadomość
Spis treści
From: "Tomasz Sliwa" <tomsliwaXXX_at_nospam_XXXsys.net.pl>
Subject: Re: ATMega16L - problem z przerwaniami - avr-gcc + ponyprog
Date: Tue, 16 Nov 2004 12:49:10 +0100



Błędu żadnego nie ma. Sprawdziłem i działa zarówno na symulatorze (AVR
Studio) jak i na rzeczywistym procku.
Dzieki.
Napisz dokładnie jakie fusy ustawiłeś i na czym to testujesz.
Z fusow ustawione mam jedynie SPIEN i CKOPT. Testuje na wlasnej plytce
uruchomieniowej. Na niej mam mostek+stabilizator+ATMega16L + kwarc + MAX232
+ goldpiny do IO.

Kiedys do goldpinow przylutowalem kilka kabelkow transformatorowka i
fusebity mi sie zresetowaly. Moze cos w procku uwalilem??

Pozdrawiam
Tomek



Poprzedni Następny
Wiadomość
Spis treści
From: "Tomasz Sliwa" <tomsliwaXXX_at_nospam_XXXsys.net.pl>
Subject: Re: ATMega16L - problem z przerwaniami - avr-gcc + ponyprog - DZIALA
Date: Wed, 17 Nov 2004 11:06:01 +0100


Witam
Zadzialalo. Zgodnie z sugestiami max'a sprawdzilem Makefile.
moj Makefile wygladal tak ( zly makefile):

all:
avr-gcc -g -O3 -Wall -Wa -o librs.elf librs.c
avr-objcopy -I elf32-avr -O ihex librs.elf librs.hex

A powinien przynajmniej tak:

all:
avr-gcc -g -Os -Wall -Wa -mmcu=atmega16 -o librs.elf librs.c
avr-objcopy -I elf32-avr -O ihex librs.elf librs.hex

Nie ustawialem a Makefile'u opcji mmcu tylko rodzaj procesora ustalalem w
kodzie dyrektywa #define __ATmega16_ co bylo bledem i kompilowalo sie bez
bledow a dzialalo zle.

Dodatkowo zle w moim oryginalnym Makefile'u dzialala opcja O3. Pomogla
zamiana na Os.

Dzieki wszytkim za pomoc, a w szczegolnosci MAX'owi

Pozdrawiam
Tomek