www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Bascom AVR Printbin bleibt hängen


Autor: theo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das klingt überhaupt nicht logisch. Das PRINTBIN bzw. die UART Ausgabe 
sollte überhaupt nicht merken, ob ein Empfänger (PC) vorhanden ist oder 
nicht. Ich denke, deine Hardware ist unglücklich gestaltet. Leider fehlt 
der Schaltplan, um vielleicht Genaueres zu sagen.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: theo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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/...
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ß

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
theo schrieb:
> Nehme ich ihn wieder rein, hängt es, also es muss am printbin liegen!
Gewagter Schluss...  :-o
Mein Verdacht ist eher: du änderst mit/ohne dem printbin auch das 
Laufzeitverhalten deines Codes...

> woran kann es nun liegen das mein Programm hängen bleibt?
Weil keiner dein Programm kennt, kann dir das keiner sagen.

Autor: Wolfgang Schmidt (wsm)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: theo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Weinbauer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Code ?

Autor: Wolfgang Schmidt (wsm)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Status des Eingangs: Es wird kein Byte gesendet, wenn gerade eines 
empfangen wird.

Wenn also der InPort einen falschen Zustand hat, kann nicht gesendet 
werden.

W.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.