Daten verlust wie kann ich lösen?

Gast #621951
Lesenswert?

Hallo leute,
ich habe ein Problem wenn ich die daten vom PC zu Mikrocontroller 
übertragen will. wenn mein Puffer voll ist und die PC noch daten 
schickt, geht einigen verloren. ich weisse nicht wie ich dieses Problem 
lösen kann. wie kann ich zu dem PC sagen das er muss daten aüfhören zu 
senden wenn der Puffer voll ist?
MFG
Billy
#622138
Lesenswert?

Wie wärs mit einem Protokoll:

Der PC schickt soviel Bytes, wie in Deinen SRAM-Puffer des AVR passen 
und wartet dann auf ein Zeichen zum Senden des nächsten Blocks.


Alternativ kann man auch die Baudrate soweit runtersetzen, daß der AVR 
mit der Bearbeitung hinterher kommt, während im SRAM schon die nächsten 
Bytes gepuffert werden.


Peter
Gast #622493
Lesenswert?

kann jemand mir sagen wie ich kann einen beliebigen Portpin mit der CTS 
verbinden. wenn jemand schon etwa so gemacht hat bitte zeigt mir den weg 
wie ich mein problem lösen kann. weil zeit eine weile versuche ich das 
CTS/RTS meiner Platine (STK500 ATMEGA16) aber ich komme nicht zu recht.
MFG
Billy
#622504
Lesenswert?

Normalerweise hast du auf deinem MAX232 noch 2 Kanäle
frei. Einen zum Empfangen und einen zum Senden.

Du brauchst den Sendekanal.

Den verbindest du mit der CTS Leitung auf dem RS232 Kabel.
Den zugehörigen Ansteuereingang legst du auf irgendeinen
Pin an deinem Mega16, der noch frei ist. Und mit diesem
Pin steuerst du dann die CTS Leitung, die zum PC führt.
#622531
Lesenswert?

Dann wirst du wohl einen RS232 Treiber nachrüsten müssen.
Irgendwie musst du die 0/5V von deinem µC auf die
geforderten +/- 12V auf der RS232 umsetzen muessen.

Wenn du keinen MAX232 auf der Platine hast, wie wird
denn bei den anderen RS232 Leitungen die Umsetzung
von 0/5V auf +/- 12V gemacht?
Das duplizierst du und baust die Treiberstufe einfach noch
mal auf und führst einen normalen PortPin da drüber
auf die CTS Leitung.

Ist das wirklich so schwer?
#622533
Lesenswert?

Mit dem STK500 geht das so direkt nicht, weil bei der seriellen 
Schnittstelle kein Hardware-Handshaking vorgesehen ist. Die beiden 
anderen Kanäle des MAX202 auf dem Board sind durch die 
Programmierschnittstelle belegt und am Stecker sind die Pins bereits 
untereinander verbunden. Da muss man, wenn man Hardware-Handshaking 
nutzen will, ein Zusatzplatinchen zusammenlöten und auf die 
on-board-RS232 verzichten.
#622537
Lesenswert?

Johannes M. wrote:

> Programmierschnittstelle belegt und am Stecker sind die Pins bereits
> untereinander verbunden.

Ah. Das ist natürlich schlecht.

> Da muss man, wenn man Hardware-Handshaking
> nutzen will, ein Zusatzplatinchen zusammenlöten und auf die
> on-board-RS232 verzichten.

Oder Strategie ändern:
* Software Handshake (falls die Art der Daten das zulässt)
* eigenes Protokoll
Gast #633373
Lesenswert?

Ein Software-Handshake könnte auch folgendermaßen aussehen :
Für jedes Byte, welches Du vom PC aus sendest, erwartest Du ein ein ECHO 
vom µC zurück. Dieses ECHO ist im einfachsten bzw. besten Fall das 
gesendete Byte (so kann zusätzlich eine korrekte Übertragung geprüft 
werden). Der µC überwacht nun intern seinen Buffer und verzögert das 
ECHO-Senden bei vollem, noch nicht abgearbeiteten Buffer, d.h. hierdurch 
wird der PC automatisch in einen Wartezustand gebracht solange kein ECHO 
vom µC kommt. Es sollten nun keine Daten mehr verloren gehen, der 
einzige Nachteil der auftreten kann, sind spontane nicht vorhersehbare 
Wartezyklen.

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