proszę o pomoc - USART , AVR, GCC, CTS



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "Krzysztof" <krysss1981_at_nospam_poczta.onet.pl>
Subject: proszę o pomoc - USART , AVR, GCC, CTS
Date: Sun, 12 Mar 2006 09:32:40 +0100


Witam!

Prosiłbym serdecznie o pomoc bo ten problem zatrzymuje moją pracę nad
projektem dyplomowym.
Sprawa jest następująca:

mam sobie taką funkcję obsługi przerwania od odbiornika USART:

SIGNAL (SIG_UART_RECV)
{
USART_odbiornik.buf[USART_odbiornik.wsk++]=UDR; //1

if(USART_odbiornik.wsk>USART_RX_buf_stop) //2
{
PORTB|=(1<<CTS);
//3
USART_odbiornik.buf_full=1; //4
USART_odbiornik.wsk=0; //5
}
}

Jak widać USART_odbiornik.wsk wskazuje na miejsce w buforze, pod które
wpisywany jest odebrany znak.
USART_RX_buf_stop - po przekroczeniu tej wartości przez
USART_odbiornik.wsk - wystawiam CTS, co
powinno zatrzymywać transmisję do momentu gdy jej nie zwolnię w programie
głównym.
Wszystko działa dobrze, gdy mam linię nr 5. Jeśli ją usunę - program nie
wstrzymuje mi transmisji i tracę bajty.

Dodam, że zależy mi na tym, aby zmienną USART_odbiornik.wsk zerować w
programie głównym, zaraz po odczycie
bufora. Dzięki temu zabezpieczam się przed sytuacją, gdy pomimo ustawienia
linii CTS - PC nadal wysyła dane,
które ma w wewnętrznym buforze.

Bardzo proszę o pomoc bo nie to nie obsługa UART'a jest moim głównym
zadaniem a zatrzymało mnie to na dobre i nie mam pomysłów co jest nie tak.

Dziękuję
Pozdrawiam




Poprzedni Następny
Wiadomość
Spis treści
From: Jack Houseman <KILLSPAMjado_at_nospam_chello.pl>
Subject: Re: =?ISO-8859-2?Q?prosz=EA?= o pomoc - USART , AVR, GCC, CTS
Date: Sun, 12 Mar 2006 10:07:31 +0100


Witam,

Mnie przychodza dwa pomysly do glowy:
1. Czy czasem wystawienie CTS nie powinno byc zrobione wczesniej, tzn. czy
UART nadawczy nie zdazy wyslac jeszcze jednego znaku mimo, ze Ty wystawiasz
CTS. W takiej sytuacji CTS powinno sie wystawic w momencie
USART_RX_buf_stop-1 - o jeden znak przed koncem bufora.

2. Moze nalezaloby przeniesc bezwarunkowe zwiekszanie wskaznika do miejsca
gdzie bedzie sprawdzany warunek zapelnienia bufora np. tak:

SIGNAL (SIG_UART_RECV)
{
USART_odbiornik.buf[USART_odbiornik.wsk]=UDR; //1

if(USART_odbiornik.wsk<USART_RX_buf_stop) //2
USART_odbiornik.wsk++;
else
{
PORTB|=(1<<CTS); //3
USART_odbiornik.buf_full=1; //4
// USART_odbiornik.wsk=0; //5
}
}
W ten sposob wskaznik stoi w miejscu - czy beda przychodzily jakies znaki
czy nie - nie ma szansy jego zwiekszenia. Ew. mozna cala linie zapisu do
bufora + inkrementacja przeniesc pod warunek if - wtedy nie bedzie tez
zapisu do bufora po przekroczeniu dl. wskaznika.

Oczywiscie nie wiem czy to jest rozwiazanie problemu - ale warto zwrocic
uwage na te sprawy.


Krzysztof wrote:

Witam!

Prosiłbym serdecznie o pomoc bo ten problem zatrzymuje moją pracę nad
projektem dyplomowym.
Sprawa jest następująca:

mam sobie taką funkcję obsługi przerwania od odbiornika USART:

SIGNAL (SIG_UART_RECV)
{
USART_odbiornik.buf[USART_odbiornik.wsk++]=UDR; //1

if(USART_odbiornik.wsk>USART_RX_buf_stop) //2
{
PORTB|=(1<<CTS);
//3
USART_odbiornik.buf_full=1; //4
USART_odbiornik.wsk=0; //5
}
}

Jak widać USART_odbiornik.wsk wskazuje na miejsce w buforze, pod które
wpisywany jest odebrany znak.
USART_RX_buf_stop - po przekroczeniu tej wartości przez
USART_odbiornik.wsk - wystawiam CTS, co
powinno zatrzymywać transmisję do momentu gdy jej nie zwolnię w programie
głównym.
Wszystko działa dobrze, gdy mam linię nr 5. Jeśli ją usunę - program nie
wstrzymuje mi transmisji i tracę bajty.

Dodam, że zależy mi na tym, aby zmienną USART_odbiornik.wsk zerować w
programie głównym, zaraz po odczycie
bufora. Dzięki temu zabezpieczam się przed sytuacją, gdy pomimo ustawienia
linii CTS - PC nadal wysyła dane,
które ma w wewnętrznym buforze.

Bardzo proszę o pomoc bo nie to nie obsługa UART'a jest moim głównym
zadaniem a zatrzymało mnie to na dobre i nie mam pomysłów co jest nie tak.

Dziękuję
Pozdrawiam

--
Pozdrawiam
Jado

>> Otwarty Projekt Automatyki Domowej [HA] http://zegaruz.republika.pl <<




Poprzedni Następny
Wiadomość
Spis treści
From: "Krzysztof" <krysss1981_at_nospam_poczta.onet.pl>
Subject: Re: proszę o pomoc - USART , AVR, GCC, CTS
Date: Sun, 12 Mar 2006 11:26:25 +0100


Jak na razie nie pomaga, dodam, że używam chip'u FTDI 232BM.

Straszne głupoty się dzieją!!!! A może w nowszych wersjach problem ten
został rozwiązany??



Poprzedni Następny
Wiadomość
Spis treści
From: Adam Dybkowski <adybkows123_at_nospam_amwaw.edu.pl>
Subject: Re: =?ISO-8859-2?Q?prosz=EA_o_pomoc_-_USART_=2C_AVR=2C?=
Date: Sun, 12 Mar 2006 20:15:57 +0100


Krzysztof napisał(a):

Jak na razie nie pomaga, dodam, że używam chip'u FTDI 232BM.

Straszne głupoty się dzieją!!!! A może w nowszych wersjach problem ten
został rozwiązany??

Następnym razem zastosuj FT245BM. Ma magistralę równoległą i stroby,
którymi steruje procesor. Jak nie ma czasu odebrać danych to nie steruje
) i wstrzymanie transmisji w komputerze odbywa się automagicznie.
Zdecydowanie lepsze rozwiązanie, niż FT232BM, który procesorowi "do
gardła" wpycha kolejne bajty i musisz za tym nadążyć.

A od strony peceta oba układy są widoczne tak samo czyli jako wirtualny
port COM (albo przez sterownik D2XX jeżeli tak wolisz).

--
Adam Dybkowski
http://www.amwaw.edu.pl/~adybkows/

Uwaga: przed wysłaniem do mnie maila usuń "123" z adresu.

Poprzedni Następny
Wiadomość
Spis treści
From: "Krzysztof" <krysss1981_at_nospam_poczta.onet.pl>
Subject: Re: proszę o pomoc - USART , AVR, GCC, CTS
Date: Sun, 12 Mar 2006 20:23:40 +0100


A msą jakieś gotowe moduły z tym układem ??


Użytkownik "Adam Dybkowski" <adybkows123_at_nospam_amwaw.edu.pl> napisał w wiadomości
news:dv1s4b$mhn$1_at_nospam_nemesis.news.tpi.pl...
Krzysztof napisał(a):

Jak na razie nie pomaga, dodam, że używam chip'u FTDI 232BM.

Straszne głupoty się dzieją!!!! A może w nowszych wersjach problem ten
został rozwiązany??

Następnym razem zastosuj FT245BM. Ma magistralę równoległą i stroby,
którymi steruje procesor. Jak nie ma czasu odebrać danych to nie steruje
) i wstrzymanie transmisji w komputerze odbywa się automagicznie.
Zdecydowanie lepsze rozwiązanie, niż FT232BM, który procesorowi "do
gardła" wpycha kolejne bajty i musisz za tym nadążyć.

A od strony peceta oba układy są widoczne tak samo czyli jako wirtualny
port COM (albo przez sterownik D2XX jeżeli tak wolisz).

--
> Adam Dybkowski
> http://www.amwaw.edu.pl/~adybkows/
>
> Uwaga: przed wysłaniem do mnie maila usuń "123" z adresu.



Poprzedni Następny
Wiadomość
Spis treści
From: Adam Dybkowski <adybkows123_at_nospam_amwaw.edu.pl>
Subject: Re: =?ISO-8859-2?Q?prosz=EA_o_pomoc_-_USART_=2C_AVR=2C?=
Date: Sun, 12 Mar 2006 20:31:59 +0100


Krzysztof napisał(a):

>> Następnym razem zastosuj FT245BM.

A msą jakieś gotowe moduły z tym układem ??

http://www.propox.com/products/t_94.html
Same układy FT245BM można kupić m.in. w Propox i Soyter.

--
Adam Dybkowski
http://www.amwaw.edu.pl/~adybkows/

Uwaga: przed wysłaniem do mnie maila usuń "123" z adresu.

Poprzedni Następny
Wiadomość
Spis treści
From: Zbych <abuse_at_nospam_onet.pl>
Subject: Re: =?ISO-8859-2?Q?prosz=EA_o_pomoc_-_USART_=2C_AVR=2C?=
Date: Sun, 12 Mar 2006 13:36:58 +0100


Krzysztof napisał(a):

USART_odbiornik.wsk - wystawiam CTS, co
powinno zatrzymywać transmisję do momentu gdy jej nie zwolnię w programie
głównym.

Zrobiłeś błędne założenie. PCet po wystawieniu CTS może ci wysłać nawet
kilkanaście bajtów, zanim zatrzyma transmisję (podobnie sytuacja wygląda
z XON/XOFF).

Bardzo proszę o pomoc bo nie to nie obsługa UART'a jest moim głównym
zadaniem a zatrzymało mnie to na dobre i nie mam pomysłów co jest nie tak.

Niepotrzebnie wymyślasz koło od nowa. Poszukaj obsługi rsa z użyciem
bufora okrężnego. Tutaj masz to napisane w asemblerze
http://members.tripod.com/Stelios_Cellar/AVR/FileArchive/Source/queue.zip

Poprzedni Następny
Wiadomość
Spis treści
From: "Krzysztof" <krysss1981_at_nospam_poczta.onet.pl>
Subject: Re: proszę o pomoc - USART , AVR, GCC, CTS
Date: Sun, 12 Mar 2006 14:59:04 +0100



Użytkownik "Zbych" <abuse_at_nospam_onet.pl> napisał w wiadomości
news:dv14kp$e1i$1_at_nospam_news.mm.pl...
Krzysztof napisał(a):

USART_odbiornik.wsk - wystawiam CTS, co
powinno zatrzymywać transmisję do momentu gdy jej nie zwolnię w programie
głównym.

Zrobiłeś błędne założenie. PCet po wystawieniu CTS może ci wysłać nawet
kilkanaście bajtów, zanim zatrzyma transmisję (podobnie sytuacja wygląda z
XON/XOFF).


Wiem! Z tego też powodu USART_odbiornik.wsk zerować chcę w programie
głównym.
Dzięki temu mogę odebrać te bajty, które wysłane zostaną po ustawieniu CTS.



Poprzedni Następny
Wiadomość
Spis treści
From: "Krzysztof" <krysss1981_at_nospam_poczta.onet.pl>
Subject: Re: proszę o pomoc - USART , AVR, GCC, CTS
Date: Sun, 12 Mar 2006 15:00:33 +0100


No tak ale tam nie ma obsługi CTS/RTS!!!



Poprzedni Następny
Wiadomość
Spis treści
From: Zbych <abuse_at_nospam_onet.pl>
Subject: Re: =?ISO-8859-2?Q?prosz=EA_o_pomoc_-_USART_=2C_AVR=2C?=
Date: Sun, 12 Mar 2006 21:31:14 +0100


Krzysztof przemówił ludzkim głosem:

No tak ale tam nie ma obsługi CTS/RTS!!!

A w czym problem ?
W przerwaniu jeśli wyjdziesz poza np. 3/4 zajętości bufora blokujesz
transmisję, a w programie głównym po opróżnieniu do, powiedzmy, 1/4
odblokowujesz.

Poprzedni Następny
Wiadomość
Spis treści
From: "Krzysztof" <krysss1981_at_nospam_poczta.onet.pl>
Subject: Re: proszę o pomoc - USART , AVR, GCC, CTS
Date: Sun, 12 Mar 2006 21:58:22 +0100


Też mi się to wydawało takie proste !!!!
Jutro spróbuję z MAXem i sprawdzę w ten sposób czy problemów nie sprawia
FTDI


Użytkownik "Zbych" <abuse_at_nospam_onet.pl> napisał w wiadomości
news:dv20f0$f5f$1_at_nospam_atlantis.news.tpi.pl...
Krzysztof przemówił ludzkim głosem:

No tak ale tam nie ma obsługi CTS/RTS!!!

A w czym problem ?
W przerwaniu jeśli wyjdziesz poza np. 3/4 zajętości bufora blokujesz
transmisję, a w programie głównym po opróżnieniu do, powiedzmy, 1/4
odblokowujesz.