Bascom AVR Printbin bleibt hängen

Gast #1991629
Hallo zusammen,

ich habe folgendes Probelem. Ich habe ein kleines Programm für einen 
Atmega169 in Bascom AVR geschrieben. Ich schicke Zyklisch per RS232 
Daten vom µC zu einem PC.

Soweit funktioniert auch alles wunderbar.

Jetzt mein Problem:

Es funktioniert alles solange eine Verbindung zwischen µC und PC 
besteht. d.h. sobald ich das rs232 kabel ziehe hängt sich mein µC auf.
Das ist soweit auch noch logisch, da der Printbin-Befehl den ich 
verwende das Programm solange blokiert bis die Zeichen gesendet wurden.

Jetzt hatte ich versucht mit "Serialout" einen Sendepuffer ein zu 
richten, was aber zum selben Ergebnis führte. Ich schätze der 
Sendepuffer ist auch irgendwann voll. (Kann man den puffer irgendwie 
löschen?)

Jetzt meine Frage:

Wie kann ich verhindern, das mein Programm hängen bleibt sobald die 
Verbindung zum PC getrennt wird? Bzw. wie kann ich überprüfen ob die 
UART verbunden ist? oder den Printbin befehl zurück nehmen? oder eine 
"Try Catch" Ausnahme programmieren, mit der ich das hängenbleiben 
umgehen kann?

Die Verbindung zum PC soll beliebig gesteckt und gezogen werden können.

Vielen Dank für euere Hilfe
Moderator (Firma: Titel) Persönliche Seite
theo schrieb:
> d.h. sobald ich das rs232 kabel ziehe hängt sich mein µC auf.
Empfängst du da evtl. durch das Abziehen irgendein Zeichen, mit dem du 
nichts anfangen kannst.

Das Senden dürfte wie schon erwähnt kein Problem darstellen: über eine 
serielle Schnitte kannst du den ganzen Tag Zeichen raussenden, ohne dass 
irgendwer mithört...
Gast
Hallo,

den Schaltplan, habe ich momentan leider nicht hier, er ist aber im 
Prinzip gleich mit dem auf dem Demoboard butterfly verwendeten 
atmega169.

hier der link zur pdf:
http://www.atmel.com/dyn/resources/prod_documents/doc4271.pdf
ab seite 34 ist der Schaltplan.

woran kann es nun liegen das mein Programm hängen bleibt?

nehme ich den printbin Befehl raus, läuft das Programm sauber durch, bis 
halt eben auf den Sendebefehl.
Nehme ich ihn wieder rein, hängt es, also es muss am printbin liegen!

gruß
Prüfe mal, ob der serielle Eingang einen anderen Status hat. Sollte 
dieser, ohne dass ein Signal angeschlossen ist, abgefragt werden, dann 
führt der falsche Status zu einem Hänger in der Eingaberoutine oder bei 
einer Statusabfrage.

W.
Gast
Hallo nochmal,

was meint ihr mit ich ändere das Laufzeitverhalten? bzw wie kann ich das 
verhindern?

also es ist so, im Programm passiert nicht viel, also momentan zumindest 
nicht. Ich hähle momentan nur die Zyklen hoch und bei jedem 100. Zyklus 
schicke ich ein printbin raus mit einem festen Zahlenwert. danach folgt 
ein "waitms 10" und der Zählwert wird zurückgesetzt. und nach den 
nächsten 100 Zyklen das selbe.

Wie ist das gemeint mit dem Status des Einganges?
Gast
hmm ... naja ...
wozu soll der waitms nach dem Printbin gut sein?
Mit Printbin schickst Du auch keinen Zahlenwert, sondern Bytes.
Wenns nur ein Byte sein soll kannst Du das auch per

UDR = bytevariable machen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.