Jak zrealizować jednokierunkową transmisję synchroniczną między AT89C55 a AT2051?

Komunikacja synchroniczna





Poprzedni Następny
Wiadomość
Spis treści
From: "Ed" <edxx_at_nospam_poczta.onet.pl>
Subject: Komunikacja synchroniczna
Date: Sat, 9 Mar 2002 09:58:24 +0200


Witam!

Parę dni temu pytałem o slave I2c na 51 bez sprzętowej obsługi I2c. Wyszło
na to że nie za bardzo się to da zrobić. Padła propozycja transmisji
synchronicznej i tu mam zagwozdkę bo o ile z transmisjš asynchronicznš nie
mam problemu to synchroniczna mi totalnie się wywala - nawet RS w trybie 0
nie chce mi gadać.
Please, podzielcie się sprawdzonymi procedurkami na dowolnš transmisję
synchroniczna na 51.
Chcę to wykorzystywać do komunikacji pomiędzy at89c55 i at2051 - wymiana
2-3bajtów. Transmisja narazie w jednš stronę.

Dzięki
Ed





Poprzedni Następny
Wiadomość
Spis treści
From: Romuald Bialy <romek_b_at_nospam_o2.pl>
Subject: Re: Komunikacja synchroniczna
Date: Sat, 09 Mar 2002 19:33:16 +0100


Ed wrote:

Witam!

Parę dni temu pytałem o slave I2c na 51 bez sprzętowej obsługi I2c. Wyszło
na to że nie za bardzo się to da zrobić. Padła propozycja transmisji
synchronicznej i tu mam zagwozdkę bo o ile z transmisjš asynchronicznš nie
mam problemu to synchroniczna mi totalnie się wywala - nawet RS w trybie 0
nie chce mi gadać.
Please, podzielcie się sprawdzonymi procedurkami na dowolnš transmisję
synchroniczna na 51.
Chcę to wykorzystywać do komunikacji pomiędzy at89c55 i at2051 - wymiana
2-3bajtów. Transmisja narazie w jednš stronę.

O trybie 0 zapomnij - to juz pisalem.
Napisz sofrwarowego uarta na 89C55 (np na 1200 czy 2400 baud), a w 2051
uzyj trybu 3 z funkcja multiprocesorowa. Tak bedzie najprosciej.

--
Pozdrawiam.... Romuald Bialy
E'mail: romek_b_at_nospam_o2.pl
WWW: http://www.polbox.com/r/romekb


Poprzedni Następny
Wiadomość
Spis treści
From: "Ed" <edxx_at_nospam_poczta.onet.pl>
Subject: Re: Komunikacja synchroniczna
Date: Tue, 12 Mar 2002 08:54:53 +0200



O trybie 0 zapomnij - to juz pisalem.
Napisz sofrwarowego uarta na 89C55 (np na 1200 czy 2400 baud), a w 2051
uzyj trybu 3 z funkcja multiprocesorowa. Tak bedzie najprosciej.

--
> Pozdrawiam.... Romuald Bialy

Wiesz może gdzie mogę znaleść jakieś przykładowe procedurki? Google nie za
bardzo mi pomógł.
Pozdrawiam
Ed



Poprzedni Następny
Wiadomość
Spis treści
From: "Ed" <edxx_at_nospam_poczta.onet.pl>
Subject: Re: Komunikacja Asynchroniczna - procedura
Date: Wed, 13 Mar 2002 18:00:02 +0200


Czołem!

Czy ktoś może sprawdzić i powiedzieć co w poniższej procedurce jest Ÿle
zrobione? Jest to procedura wysłania byte-a w taki sposób żeby odbiornik RS
1200,8,n,1 odebrał dane prawidłowo.
Obydwa procki pracujš z kwarcem 11.0592.

Czas trwania bitu na wyjsciu RS232_TxD obliczam ze wzoru: cykle =
11.0592MHz / (12*1200) = 768 cykli procesora. Jeden obieg pętli while(j--)
to 7 cykli procesora.

Pozdrawiam
Ed



void RS232_SoftTx(unsigned int baund_rate, unsigned char Tx_znak)
{
unsigned int licznik, i, j;

switch(baund_rate)
{
case 1200: {licznik = 109; break;} //768:7= 109
// case 2400: {licznik = xx; break;}
// case 4800: {licznik = xx; break;}
}

RS232_TxD = 0; // start bit
j = licznik;
while(j--);
for (i=0;i<8;i++) // transmisja 8 bitow
{
RS232_TxD = Tx_znak & 0x01;
Tx_znak = Tx_znak >> 1;
j = licznik;
while(j--);
}
RS232_TxD = 1;
j = licznik;
while(j--);
}



Poprzedni Następny
Wiadomość
Spis treści
From: Romuald Bialy <romek_b_at_nospam_o2.pl>
Subject: Re: Komunikacja Asynchroniczna - procedura
Date: Wed, 13 Mar 2002 19:44:32 +0100


Ed wrote:
Czas trwania bitu na wyjsciu RS232_TxD obliczam ze wzoru: cykle =
11.0592MHz / (12*1200) = 768 cykli procesora. Jeden obieg pętli while(j--)
to 7 cykli procesora.
[...]

Musisz jeszcze sprawdzic ile cykli zajmuje jeden obieg petli for
wysylajacej bit i odpowiednio zmniejszyc opoznienia w petli while.
Dobrze by tez bylo na czas wysylania bajtu zablokowac przerwania, bo jak
Ci jakies wlezie podczas transmisji bajtu to kupa.

--
Pozdrawiam.... Romuald Bialy
E'mail: romek_b_at_nospam_o2.pl
WWW: http://www.polbox.com/r/romekb



Poprzedni Następny
Wiadomość
Spis treści
From: "Przemek Żyła" <przemek_zyla_at_nospam_wp.pl>
Subject: Re: Komunikacja Asynchroniczna - procedura
Date: Wed, 13 Mar 2002 23:51:09 +0100



Musisz jeszcze sprawdzic ile cykli zajmuje jeden obieg petli for
wysylajacej bit i odpowiednio zmniejszyc opoznienia w petli while.
Dobrze by tez bylo na czas wysylania bajtu zablokowac przerwania, bo jak
Ci jakies wlezie podczas transmisji bajtu to kupa.

witam
a musi to byc RS?
moze by tak wykorzystac SPI? albo chociaz cos podobnego?
wtedy jako wejscie CLK pakujesz INT0 i po klopocie:)
tak bynajmniej mi sie wydaje... zawsze to cos i mozna
sprobowac....

ps: jesli walnalem cos nie na temat, to przepraaszam... bardzo dokladnie
z watkiem sie nie zapoznalem

pozdrawiam