Forum: Mikrocontroller und Digitale Elektronik Hardware Handshaking


von Sebastian (Gast)


Lesenswert?

Hallo,

wie kann ich ein Hardware Handshaking durchführen?
Wenn die auf dem UART empfangenen Daten verarbeitet werden, soll der PC
keine Daten senden können.

Muss ich dazu nur T2IN des MAX232 mit CTS verbinden und T2Out an einen
I/O-Pin?

Wartet der PC automatisch vor den Senden des nächten Bytes, bis der µC
bereit ist oder muss ich das softwaretechnisch lösen?

von crazy horse (Gast)


Lesenswert?

ich habs noch nie gebraucht, da die Verarbeitung der Daten i.a.
wesentlich schneller geht als sie durch den Flaschenhals UART
reintröpfeln. Mit einen Rx-Interrupt und einem Ringbuffer ist man
eigentlich immer schnell genug. Evtl. problematisch ist das Schreiben
der Daten in einen EEPROM, da dieser ziemlich langsam ist, ebenso
lösbar.
Braucht dein Programm wirklich zu lange, um die Daten "online" zu
verarbeiten, kannst du genausogut die Baudrate runtersetzen, der
Endeffekt ist (fast) der gleiche zu RTS/CTS - die effektive
Übertragungsrate geht runter, und zwar soweit, bis dein Prozessor
mithalten kann.
Lange Rede- kurzer Sinn, man kann mit Handshake arbeiten, muss es aber
nicht. Schreib mal genauer, warum du meinst, es zu brauchen.

von Sebastian (Gast)


Lesenswert?

Die Bytes, die ich empfange schreibe ich in einen externen RAm Baustein
(I²C Bus). Wenn die beiden zuletzt empfangen Daten #13, #10 waren wird
der Befehl ausgewertet. Diese Auswertung geschieht immer noch im
Interurpt.
Meine Baudrate beträgt: 9600 BPS

von crazy horse (Gast)


Lesenswert?

im Rx-Interrupt solltest du gar nichts verarbeiten, einfach nur im
internen RAM ablegen, Schreibpointer erhöhen, Anzahl der empfangenen
Bytes erhöhen, fertig. Auswertung im Hauptprogramm (if (rec_bytes
>0)...
Bei 9600 Baud hast du über 1ms Zeit pro Byte - war bei deinen Proz. die
Gewerkschaft da? Du hast 4000 Takte zwischen 2 Bytes, das sollte doch
genügen. Weiter 10% Luft gibts, wenn du den Sender auf 2 Stopbits
setzt, das hilft auch oft.
Ansonsten sehe ich noch nicht, wo bei dir das Zeitproblem entsteht.

von Kai Schilling (Gast)


Lesenswert?

Hallo,

mein Tread vom Sim Bug war grad drüber , also

eep_r_wait_s:sbic  EECR, 0                     ; bit cleared?
             rjmp  eep_r_wait_s
             .
             ret

ist wohl geeignet .

Ich arbeite problemlos mit 9600 bis 115200 baud .

Wichtig ! Denkt an eure Quarze , zu große Toleranzen bei der
Generierung der Baudrate könnte Probleme geben , viele Gegenstationen
sind da nicht so tolerant. Also am besten nen ordentlichen Quarz 1.8432
, 3.6864 , 7.3728  oder 11.059 (kann fast jeder alte 8515 ab ) ,das
ergibt mit den passenden Teilerfaktoren ( siehe AT90S8515.pdf page 58
o.ä. ) brauchbare Baudraten mit %Error = 0.0

-üblicher Standart f=7.3728 ,UBRR= 47 ergibt saubere 9600 Baud

MfG Kai

von Kai Schilling (Gast)


Lesenswert?

Sorry...das war glaube ich die falsche Transferrichtung

darf der AVR dem PC nicht sagen wenn er genug hat ?
Oder ist die Verbindung ausschließlich unidi PC-->MCU ?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.