RTV forum PL | NewsGroups PL

Timeout w programie AVR z użyciem USART - pomoc w realizacji?

avr-gcc problem z programem.

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Timeout w programie AVR z użyciem USART - pomoc w realizacji?

Bartosz Waleska
Guest

Tue May 18, 2004 1:04 pm   



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_loop_2(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();
}

Artur Lipowski
Guest

Wed May 19, 2004 6:20 am   



Bartosz Waleska wrote:
....
Quote:
Generalnie chcialbym by po ustawieniu rs_stop na 1 usart wyslal K i
zakonczyl dzialanie.
A masz rs_stop zadeklarowane jako volatile?


....
Quote:
SIGNAL (SIG_OVERFLOW0){
rs_timeout++;
if (rs_stop == 0x00){
if (rs_timeout >= 220){
BTW> a gdzie zerujesz rs_timeout


Quote:
usart0_send("RS time outss");
To rozumiem, że tylko testowo, bo wypisywanie w ISR stringu przez UART

jest co najmniej problematyczne.

Quote:
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

Bartosz Waleska
Guest

Wed May 19, 2004 5:48 pm   



</ciach>
Quote:
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.

Artur Lipowski
Guest

Thu May 20, 2004 5:22 am   



Bartosz Waleska wrote:
....
Quote:
A test jakos przeprowadzic trzeba, no a co z moim rs timeout?
....

A co z odpowiedzią na moje dwa pytania kontrolne?

Pozdrawiam,
--
Artur Lipowski

Bartosz Waleska
Guest

Thu May 20, 2004 5:44 am   



</ciach>
Dobrze, ze napisales... wzrok juz nie ten, nie zauwazylem ;)

Quote:
A masz rs_stop zadeklarowane jako volatile?

hm... nie...
mam tylko:
po deklaracji bibliotek, jako zmienna globalna:
unsigned char rs_stop;

Quote:

...
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")Wink
a nastepnie zeruje rs_timeout, ustawiam "bramkowanie" rs_stop=0x00
i czekam na dane USART1_Receive( void )


Quote:
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 Smile
Z tego wiem, ze dochodzi do przepelnienia mojego timeoutu... problem jest
pozniej (chyba).

pozdrawiam,
bartek.

Artur Lipowski
Guest

Thu May 20, 2004 6:18 am   



Bartosz Waleska wrote:

Quote:
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

elektroda NewsGroups Forum Index - Elektronika Polska - Timeout w programie AVR z użyciem USART - pomoc w realizacji?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map