WinAVR i rejestry ATmegi



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "Jacek M." <tymkonto_at_nospam_poczta.onet.pl>
Subject: WinAVR i rejestry ATmegi
Date: Tue, 24 May 2005 18:08:29 +0200


Mam w swoim projekcie w WinAVR dwa pliki: main.c i a.c. W funkcji main
wywoluje funkcje void A_Init(void).
plik main.c:
#include <avr/io.h>
#include "a.h"

void main (void){
A_Init(); // inicjalizacja;
... // dalsza czesc programu
}

plik a.c:
#include <avr/io.h>

void A_Init(void){
UCSR1C = (3<<UCSZ0)|(2<<UPM0);
UCSR1B = 1<<TXEN;

... // dalsze linie funkcji
}

plik a.h
void A_Init(void);

Funkcja A_Init zawiera kilka linii ustawiajacych stany w rejestrach
mikrokontrolera Atmega128. Problem polega na tym, ze jesli nie zaremuje
wszystkich takich linii w tej funkcji (odwolujacych sie do rejestrow
mikrokontrolera) program nie opuszcza funkcji i nie wraca do main(). Po
zaremowaniu ich, wpisalem w tej funkcji linie inkrementacji wewnetrznej
zmiennej ... program dzialal prawidlowo. Oczywiscie oba pliki *.c sa
zadeklarowane w pliku makefile, tam tez ustawiony jest typ
mikrokontrolera... . Moze wiecie co sie dzieje? Mikrokontrolery w jezyku C
programuje od wielu lat ale to jest moj pierwszy program w WinAVR i nie wiem
juz co robic.
Z gory dziekuje za pomoc
Jacek



Poprzedni Następny
Wiadomość
Spis treści
From: Marcin Stanisz <mstanisz_at_nospam_bzdury.poczta.onet.pl>
Subject: Re: WinAVR i rejestry ATmegi
Date: Tue, 24 May 2005 21:42:22 +0200


On Tue, 24 May 2005 18:08:29 +0200, Jacek M. wrote:
plik a.h
void A_Init(void);

Spróbuj:
extern void A_Init(void);

Pozdrawiam
--
Marcin Stanisz

"A lie will go round the world before the truth has got its boots on"
Terry Pratchett, "Truth"


Poprzedni Następny
Wiadomość
Spis treści
From: "Jacek M." <tymkonto_at_nospam_poczta.onet.pl>
Subject: Re: WinAVR i rejestry ATmegi
Date: Tue, 24 May 2005 22:33:06 +0200



Użytkownik "Marcin Stanisz" <mstanisz_at_nospam_bzdury.poczta.onet.pl> napisał w
wiadomości news:pan.2005.05.24.19.42.21.897976_at_nospam_bzdury.poczta.onet.pl...
On Tue, 24 May 2005 18:08:29 +0200, Jacek M. wrote:
plik a.h
void A_Init(void);

Spróbuj:
extern void A_Init(void);

Pozdrawiam
--
> Marcin Stanisz
Niestety to nie to. Zrobiolem eksperyment i przenioslem te funkcje i
umiescilem ja w jednym pliku z funkcja main(). Poniewaz teraz jest ona
powyzej main() nie potrzebuje dekalracji. Sytuacja jest bez zmian tzn. w
funkcji wywolywanej z main() gdy A_Init nie odwoluje sie do rejestrow
mikrokontrolera wszystko jest w porzadku a jesli to robi; program nie wraca
do main() i idzie w maliny. Na poczatku plikow gdzie odwoluje sie do zasobow
mikrokontrolera umieszczona jest linia: #include <avr/io.h> . Przeciez to
definiuje jego zasoby. Juz zglupialem. Moze pomoze mi ktos bardziej
doswiadczony ode mnie...
Jacek M.



Poprzedni Następny
Wiadomość
Spis treści
From: "Jacek R. Radzikowski" <jacek_at_nospam_spamer.die.die.die.piranet.org>
Subject: Re: WinAVR i rejestry ATmegi
Date: Tue, 24 May 2005 21:38:09 +0000 (UTC)


Jacek M. <tymkonto_at_nospam_poczta.onet.pl> wrote:

U?ytkownik "Marcin Stanisz" <mstanisz_at_nospam_bzdury.poczta.onet.pl> napisa? w
wiadomo?ci news:pan.2005.05.24.19.42.21.897976_at_nospam_bzdury.poczta.onet.pl...
[...]
Niestety to nie to. Zrobiolem eksperyment i przenioslem te funkcje i
umiescilem ja w jednym pliku z funkcja main(). Poniewaz teraz jest ona
powyzej main() nie potrzebuje dekalracji. Sytuacja jest bez zmian tzn. w
funkcji wywolywanej z main() gdy A_Init nie odwoluje sie do rejestrow
mikrokontrolera wszystko jest w porzadku a jesli to robi; program nie wraca
do main() i idzie w maliny. Na poczatku plikow gdzie odwoluje sie do zasobow
mikrokontrolera umieszczona jest linia: #include <avr/io.h> . Przeciez to
definiuje jego zasoby. Juz zglupialem. Moze pomoze mi ktos bardziej
doswiadczony ode mnie...

Przesledz kod asemblerowy generowany przez kompilator.
Objawy wskazuja na jezdzenie po stosie i nadpisanie adresu
powrotu. Upewnij sie ze masz zadeklarowane poprawnie wszystkie
typy, jesli kompilujesz avr-gcc dodaj do opcji -Wall i -pedantic.
No i oczywiscie dokladnie przeanalizuj wszystkie warningi
i skad sie one biora

pzdr.
j.





Poprzedni Następny
Wiadomość
Spis treści
From: Marcin Stanisz <mstanisz_at_nospam_bzdury.poczta.onet.pl>
Subject: Re: WinAVR i rejestry ATmegi
Date: Tue, 24 May 2005 23:40:18 +0200


On Tue, 24 May 2005 22:33:06 +0200, Jacek M. wrote:
Niestety to nie to. Zrobiolem eksperyment i przenioslem te funkcje i
umiescilem ja w jednym pliku z funkcja main(). Poniewaz teraz jest ona
powyzej main() nie potrzebuje dekalracji. Sytuacja jest bez zmian tzn. w
funkcji wywolywanej z main() gdy A_Init nie odwoluje sie do rejestrow
mikrokontrolera wszystko jest w porzadku a jesli to robi; program nie wraca
do main() i idzie w maliny. Na poczatku plikow gdzie odwoluje sie do zasobow
mikrokontrolera umieszczona jest linia: #include <avr/io.h> . Przeciez to
definiuje jego zasoby. Juz zglupialem. Moze pomoze mi ktos bardziej
doswiadczony ode mnie...

No, dobra - szukamy dalej:
1. Jaka to ATmega?
2. Czy jest prawidłowa deklaracja procesora w makefile?
3. Czy podczas kompilacji wyrzuca jakieś ostrzeżenia?

Pozdrawiam
--
Marcin Stanisz

"A lie will go round the world before the truth has got its boots on"
Terry Pratchett, "Truth"


Poprzedni Następny
Wiadomość
Spis treści
From: "Jacek M." <tymkonto_at_nospam_poczta.onet.pl>
Subject: Re: WinAVR i rejestry ATmegi
Date: Tue, 24 May 2005 23:55:43 +0200


No, dobra - szukamy dalej:
1. Jaka to ATmega?
2. Czy jest prawidłowa deklaracja procesora w makefile?
W makefile mam linie deklaracji: MCU = atmega128

3. Czy podczas kompilacji wyrzuca jakieś ostrzeżenia?
Nie. Kompilacja konczy sie: > Process Exit Code: 0

Pozdrawiam
--
> Marcin Stanisz
W listingach nie ma zadnych ostrzezen ani bledow. Projekt zredukowalem juz
do jednego pliku ktory posiada dwie funkcje:
int main (void)
i
void USART1_Init( void )



Poprzedni Następny
Wiadomość
Spis treści
From: "Marek Dzwonnik" <mdz_at_nospam_WIADOMO_PO_CO_TO.message.pl>
Subject: Re: WinAVR i rejestry ATmegi
Date: Wed, 25 May 2005 01:49:00 +0200


Użytkownik "Jacek M." <tymkonto_at_nospam_poczta.onet.pl> napisał w wiadomości
news:d707sr$j4p$1_at_nospam_news.onet.pl

1. Jaka to ATmega?
2. Czy jest prawidłowa deklaracja procesora w makefile?
W makefile mam linie deklaracji: MCU = atmega128

http://www.google.pl/groups?selm=b2aga8%24ba4%242%40atlantis.news.tpi.pl


--
Marek Dzwonnik, GG: #2061027 - zwykle jako 'niewidoczny'
(Uwaga Gadu-Gadulcowicze: Nie odpowiadam na anonimy.)


Poprzedni Następny
Wiadomość
Spis treści
From: "Jacek M." <tymkonto_at_nospam_poczta.onet.pl>
Subject: Re: WinAVR i rejestry ATmegi
Date: Wed, 25 May 2005 19:21:48 +0200


W listingach nie ma zadnych ostrzezen ani bledow. Projekt zredukowalem juz
do jednego pliku ktory posiada dwie funkcje:
int main (void)
i
void USART1_Init( void )

Po wielu probach okazalo sie, ze problem lezy w zupelnie innym miejscu.
Okazalo sie, ze program (chociaz na razie trudno go tak nazwac) zachowuje
sie poprawnie jesli zaprogramuje fusa M103C. Jenak nie o emulacje ATmega103
na 128-ce mi chodzi. Chcialbym aby mikrokontroler pracowal poprawnie w
trybie 128-ki ale nie wiem co sie dzieje. Programuje w WinAVR i w pliku
makefile mam linie definicji mikrokontrolera:
MCU = atmega128
Reszta definicji w tym pliku chyba jest poprawna poniewaz w ubozszym trybie
program dziala. Pakiet WinAVR jest instalowany dwa miesiace temu. Kompilacja
nie sygnalizuje ani bledow, ani ostrzezen. Nie wiem co robic. Moze macie
jakies pomysly?

Pomozcie prosze.
Pozdrawiam
Jacek M.



Poprzedni Następny
Wiadomość
Spis treści
From: "Greg" <xgrzes_at_nospam_poczta.onet.pl>
Subject: Re: WinAVR i rejestry ATmegi
Date: Thu, 26 May 2005 00:01:26 +0200


zaczalbym od sciagniecia najnowszego winavr



Poprzedni Następny
Wiadomość
Spis treści
From: dom on <domon_at_nospam_gazeta.KROPKA.pl>
Subject: Re: WinAVR i rejestry ATmegi
Date: Tue, 24 May 2005 22:47:05 +0200


może spróbuj dodać
#include <avr/signal.h>

Poprzedni Następny
Wiadomość
Spis treści
From: "Jacek M." <tymkonto_at_nospam_poczta.onet.pl>
Subject: Re: WinAVR i rejestry ATmegi
Date: Tue, 24 May 2005 23:02:11 +0200



Użytkownik "dom on" <domon_at_nospam_gazeta.KROPKA.pl> napisał w wiadomości
news:d7045h$rnj$1_at_nospam_nemesis.news.tpi.pl...
może spróbuj dodać
#include <avr/signal.h>
Niestety to nie to. Wiem, ze problem jest z powrotem programu do miejsca z
ktorego funkcja A_Init() byla wywolana. Nadal gdy A_Init() nie odwoluje sie
do rejestrow wszystko jest w porzadku. Co ciekawsze, program dochodzi do
konca funkcji A_Init(), wiem bo ustawilem tam znacznik. Nawet jesli wczesnej
przechodzi przez punkt w ktorym zmienia ustawienia tych rejestrow wszystko
jest OK.
Jacek M.



Poprzedni Następny
Wiadomość
Spis treści
From: Krzysiek Kubicki <coobix_at_nospam_gazeta.plBeZTeGo>
Subject: Re: WinAVR i rejestry ATmegi
Date: Tue, 24 May 2005 23:24:45 +0200


Jacek M. wrote:
Co ciekawsze, program dochodzi do
konca funkcji A_Init(), wiem bo ustawilem tam znacznik. Nawet jesli wczesnej
przechodzi przez punkt w ktorym zmienia ustawienia tych rejestrow wszystko
jest OK.

ale masz tam return 0; , prawda?

--
Pozdrawiam
Krzysztof Kubicki
http://www.kubi.rox.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "Jacek M." <tymkonto_at_nospam_poczta.onet.pl>
Subject: Re: WinAVR i rejestry ATmegi
Date: Tue, 24 May 2005 23:39:16 +0200


Jacek M. wrote:
Co ciekawsze, program dochodzi do
konca funkcji A_Init(), wiem bo ustawilem tam znacznik. Nawet jesli
wczesnej przechodzi przez punkt w ktorym zmienia ustawienia tych
rejestrow wszystko jest OK.

ale masz tam return 0; , prawda?
Krzysztof Kubicki
Nie, poniewaz funkcja jest typu void. Co ciekawsze te znaczniki o ktorych
wspominalem sa podobne co do typu i parametrow wejsciowych do A_Init(). Sa
to funkcje ktore po prostu migaja ledami. Ustawione w interesujacych mnie
miejscach informuja mnie czy program tam doszedl... One rowniez w swoim
wnetrzu operuja na rejestrach wewnetrznych, z tym ze na portach
wyjsciowych... Juz nic nie rozumiem z tego. Poniewaz jestem na poczatku
programu brak mi narzedzi by podejrzec to co dzieje sie na chociazby stosie
i licze na Wasze doswiadczenie.
Jacek



Poprzedni Następny
Wiadomość
Spis treści
From: "Jacek M." <tymkonto_at_nospam_poczta.onet.pl>
Subject: Re: WinAVR i rejestry ATmegi
Date: Thu, 26 May 2005 07:17:44 +0200



Użytkownik "Jacek M." <tymkonto_at_nospam_poczta.onet.pl> napisał w wiadomości
news:d706u1$rrl$1_at_nospam_news.onet.pl...
Jacek M. wrote:
Co ciekawsze, program dochodzi do
konca funkcji A_Init(), wiem bo ustawilem tam znacznik. Nawet jesli
wczesnej przechodzi przez punkt w ktorym zmienia ustawienia tych
rejestrow wszystko jest OK.

No i sprawa sie wyjasnila. Uzywalem do programowania mikrokontrolera
ATmega128 programatora ISP programmer udostepnionego na liscie przez Adama
Dybkowskiego. Tam zaprogramowany fusebit M103C oznaczony jest jako
niezaznaczony. Zwrocilem sie do autora z prosba o pomoc i dostalem
odpowiedz, ze zaprogramowany fusebit oznaczony jest jako nie
zazanczony.Wydawalo mi sie, ze jest dokladnie na odwrotnie, dlatego moje
poszukiwania byly bezowocne. Po zaprogramowaniu tego bitu (znacznik w
programatorze zaznaczony) wszystko wrocilo do normy.
Dziekuje Wam wszystkim za pomoc.
Jacek M.