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
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.
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...
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ß
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.
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.
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?
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.