Hardware Handshaking

Gast #64570
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?
Gast #64571
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.
Gast #64572
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
Gast #64573
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.
Gast #64574
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren