Jak poprawnie ustawić timeout dla komunikacji RS w AVR-GCC z USART?
avr-gcc problem z programem.
From: "Bartosz Waleska" <combosoft_at_nospam_poczta.onet.pl>
Subject: avr-gcc problem z programem.
Date: Tue, 18 May 2004 16:04:25 +0200
czesc,
Potrzebuje zrobic sobie timeout do rs'a, cos mi to nie dziala i nie bardzo
wiem dlaczego. Moze ktos "rzuci" okiem i zobaczy:
Generalnie chcialbym by po ustawieniu rs_stop na 1 usart wyslal K i
zakonczyl dzialanie.
Wiem ze timer dziala poprawnie (dostaje komunikat).
A moze jakos inaczej to realizowac? Jestem otwarty na propozycje...
pozdrawiam,
bartek.
PS. Zadzialalo mi to jezeli mialem wlaczone usart0_transmit('e') (wysyla e
na drugi port), ale opoznienie ktore probowalem
wstawic niz juz nie zmienilo.
unsigned char USART1_Receive( void )
{
char status,data;
while (1)
{
while(rs_stop != 0x01){
if (((status=UCSR1A) & RX_COMPLETE)!=0){
data=UDR1;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
return data;
}
//USART0_Transmit('e');
/_delay_loop2(100);
}
if (rs_stop == 0x01){
return 'K';
}
};
}
SIGNAL (SIG_OVERFLOW0){
rs_timeout++;
if (rs_stop == 0x00){
if (rs_timeout >= 220){
rs_stop = 0x01;
usart0_send("RS time outss");
}
}
TCNT0= 0x29; //reload counter value
wdt_reset();
}
========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!news.task.gda.pl!not-for-mai
From: Artur Lipowski <lal_at_nospam_pro.onet.pl>
Subject: Re: avr-gcc problem z programem.
Date: Wed, 19 May 2004 09:20:48 +0200
Bartosz Waleska wrote:
...
Generalnie chcialbym by po ustawieniu rs_stop na 1 usart wyslal K i
zakonczyl dzialanie.
A masz rs_stop zadeklarowane jako volatile?
...
SIGNAL (SIG_OVERFLOW0){
rs_timeout++;
if (rs_stop == 0x00){
if (rs_timeout >= 220){
BTW> a gdzie zerujesz rs_timeout
usart0_send("RS time outss");
To rozumiem, że tylko testowo, bo wypisywanie w ISR stringu przez UART
jest co najmniej problematyczne.
wdt_reset();
To bardzo zły pomysł, a w zasadzie błąd (w 99.9% przypadków). Nie
resetuj watchdoga w przerwaniu, a szególnie przerwaniu timera.
Pozdrawiam,
--
Artur Lipowski
========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mai
From: "Bartosz Waleska" <combosoft_at_nospam_poczta.onet.pl>
Subject: Re: avr-gcc problem z programem.
Date: Wed, 19 May 2004 20:48:57 +0200
</ciach>
wdt_reset();
wiem, wiem... na razie poprostu nie mam jeszcze zadnego kodu, trudno wiec
cokolwiek zerowac.
A test jakos przeprowadzic trzeba, no a co z moim rs timeout?
Jak to robic poprawnie? moze ktos moze pochwalic sie gotowcem?
Zalozenie: w timerze (1) jest zadanie danych (rs_recive) a w timerze 0
pojawia sie
rs_timeout i teraz jak przekonac rs_recive zeby odeslala jakiekolwiek znaki
co by zaspokoic potrzebe 1 timera? Dlaczego moj sposob niezbyt chce dzialac?
pozdrawiam,
Bartek.
========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!news.task.gda.pl!not-for-mai
From: Artur Lipowski <lal_at_nospam_pro.onet.pl>
Subject: Re: avr-gcc problem z programem.
Date: Thu, 20 May 2004 08:22:03 +0200
Bartosz Waleska wrote:
...
A test jakos przeprowadzic trzeba, no a co z moim rs timeout?
...
A co z odpowiedzią na moje dwa pytania kontrolne?
Pozdrawiam,
--
Artur Lipowski
========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mai
From: "Bartosz Waleska" <combosoft_at_nospam_poczta.onet.pl>
Subject: Re: avr-gcc problem z programem.
Date: Thu, 20 May 2004 08:44:23 +0200
</ciach>
Dobrze, ze napisales... wzrok juz nie ten, nie zauwazylem ;)
A masz rs_stop zadeklarowane jako volatile?
hm... nie...
mam tylko:
po deklaracji bibliotek, jako zmienna globalna:
unsigned char rs_stop;
...
SIGNAL (SIG_OVERFLOW0){
rs_timeout++;
if (rs_stop == 0x00){
if (rs_timeout >= 220){
BTW> a gdzie zerujesz rs_timeout
rs_timeout zeruje w timerze 1.
Najpierw wysylam z timer1 zapytanie po rs (rs_send("daj dane");)
a nastepnie zeruje rs_timeout, ustawiam "bramkowanie" rs_stop=0x00
i czekam na dane USART1_Receive( void )
usart0_send("RS time outss");
To rozumiem, że tylko testowo, bo wypisywanie w ISR stringu przez UART
jest co najmniej problematyczne.
to oczywiscie tylko testowo -dziala :)
Z tego wiem, ze dochodzi do przepelnienia mojego timeoutu... problem jest
pozniej (chyba).
pozdrawiam,
bartek.
========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!news.task.gda.pl!not-for-mai
From: Artur Lipowski <lal_at_nospam_pro.onet.pl>
Subject: Re: avr-gcc problem z programem.
Date: Thu, 20 May 2004 09:18:14 +0200
Bartosz Waleska wrote:
A masz rs_stop zadeklarowane jako volatile?
hm... nie...
mam tylko:
po deklaracji bibliotek, jako zmienna globalna:
unsigned char rs_stop;
A to jest FAQ #1
I w 90% przyczyna tzw. "problemów" z przerwaniami.
Pozdrawiam,
--
Artur Lipowski
========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai