Forum: Mikrocontroller und Digitale Elektronik BASCOM UART mit RTS


von Werner R. (werner_85)


Angehängte Dateien:

Lesenswert?

Moin, moin,

hätte da mal gerne ein Problem:
Ein ATMega soll über RS232 mit Handshake Daten vom PC empfangen, 
Intel-Hex-File, diesen aufbereiten und an einen EPROM-Simulator 
PEPS(Conitec) übergeben.

Mit dieser Zeile

  Config Serialin = Buffered , Size = 10 , Bytematch = 13
  , Cts = Pinb.3 , Rts = Pinb.4
  , Threshold_full = 6 , Threshold_empty = 2

aktiviere ich die Schnittstelle und eine ISR wertet das Steuerzeichen CR 
(13) aus. Das klappt auch alles, sobald der Buffer das 6. Zeichen 
empfangen hat, wird RTS entsprechend gesetzt und stoppt die 
Datenübertragung - soweit alles OK. Wenn ich dann den Buffer lösche 
sollte eigendlich das RTS-Signal wieder zurückgenommen werden damit die 
nächsten Bytes empfangen werden können - soweit die Theorie - tut es 
aber nicht ????

Als Notlösung steuer ich das RTS-Signal derzeit seperat, das halte ich 
aber für suboptimal.

Hat jemand eine Erklärung, Lösung ?

Gruß Werner
PS: Das ist das reine Testprogramm für die V24

von Paul Baumann (Gast)


Lesenswert?

Die Subroutine "serial0charmatch" muß mit einem Return zurückkommen:
Zitat aus der Hilfe:
You must include the label yourself in your code and end it with a 
return.



Du mußt noch einen 2.Puffer deklarieren, nämlich Serialout.

In order to work with CTS-RTS, you need both a serial input buffer, and 
a serial output buffer. So use both CONFIG SERIALIN and CONFIG SERIALOUT 
to specify the buffers.


MfG Paul

von MWS (Gast)


Lesenswert?

Werner Römer schrieb:
> Hat jemand eine Erklärung, Lösung ?

Clear Serialin löscht nur den Puffer, übersieht aber RTS zu behandeln, 
das wäre 'ne Sache für den Support. Eine Lösung: den Puffer normal 
auslesen und damit leeren.

von Werner R. (werner_85)


Lesenswert?

Danke für die schnellen Antworten

bei meinen Testläufen war es egal ob die Ausgabe gepuffert ist
oder nicht (im Quelltext ausmaskiert) und ein Return hilft leider auch 
nicht.

Da man die "Systemvariablen" nicht direkt bearbeiten soll, habe ich die 
Daten per Overlay (im Testprogramm nicht dargestellt) ausgewertet und 
dann mit clear serialin den Buffer gelöscht (hier, der Einfachhalber 
lediglich eine Zeitschleife zum löschen) ...

Gibt es noch eine andere Möglichkeit ihn zu leeren ?

Gruß Werner

von MWS (Gast)


Lesenswert?

Werner Römer schrieb:
> Gibt es noch eine andere Möglichkeit ihn zu leeren ?

Das hab' ich berets beantwortet, einfach auslesen, dann klappt's auch 
mit dem automatischen Rücksetzen des RTS.

von Werner R. (werner_85)


Lesenswert?

moin, moin,

habe das Problem zum Support geschickt, es scheint ein Bug zu sein

Zitat:
  Thanks for reporting the problem.
  User MWS reported this to me yesterday and i have fixed it
  for the next   update/fix.

  I see that you have Size = 10  which is a bit small imo?
  While you use cts/rts, i would use a bigger buffer
  so you can read a whole line at once using INPUT.
Zitat Ende:

So werde ich bis zum nächsten Update mit der "Krücke" (RTS manuell 
löschen)
leben müssen ...

Das er über meinen kleinen Buffer mit 10Zeichen die Stirn runzelt, ist 
mir schon klar, aber ich hatte keine Lust 80Zeichen zu Tippen um die 
RTS-Steuerung zu testen ;-))
Für den Eingangsbuffer habe ich 80Zeichen vorgesehen damit eine 
komplette Zeile Intel_Hex rein geht. der Ausgangsbuffer ist nicht 
kritisch, hier werden nur Menü und Statusmeldungen zurückgegeben ...

Nochmals Danke für Eure Anregungen, bis neulich
Gruß Werner

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.