Forum: Mikrocontroller und Digitale Elektronik µC bleibt stehen sobald per PC ein Comport geöffnet wird, Bootloader schuld?


von Sanchez (Gast)


Lesenswert?

Hallo Leute :)

Wie schon im Betreff beschrieben.

Ich benutze einen ATMega88 mit Bascom.
Er tut nix anderes als einen String über uart(emuliert über usb) an den 
Pc zu senden, das klappt wunderbar, Hterm meldet den korrekten string.

Doch wenn ich über Putty (Oder ein eigenes Programm in c++ geschrieben) 
eben jenen Comport öffne bleibt der Controller stehen, bzw sendet noch 
den string zuende der eben geschickt wird und pausiert dann die "loop 
forever" bis der Port geschlossen wird.

Ich hoffe jemand weis was, danke schonmal im Vorraus :)

Gruß Sanchez

von Malte S. (maltest)


Lesenswert?

Was ist das für eine Loop und was ist ihre Abbruchbedingung? 
Inkompatible Flusskontroll- Einstellungen?

von Karlheinz (Gast)


Lesenswert?

Hallo,

schau mal ob den uC sensibel ist auf die Stellung der 
Handshake-Leitungen RTS und/oder DTR

Das Verhalten kannst du einfach mit HTERM ausprobieren!

Gruss

von Reinhard Kern (Gast)


Lesenswert?

Sanchez schrieb:
> eben jenen Comport öffne

Was genau meinst du mit öffnen? Schon bei Openfile/Createfile oder dann 
wenn du was sendest?

Ich würde mal in dem Moment die Statussignale, v.a. RTS/CTS, beobachten. 
So eine kleine Box mit LEDs dafür ist sehr hilfreich.

Gruss Reinhard

von Wolfgang (Gast)


Lesenswert?

Sanchez schrieb:
> Doch wenn ich über Putty (Oder ein eigenes Programm in c++ geschrieben)
> eben jenen Comport öffne bleibt der Controller stehen, bzw sendet noch
> den string zuende der eben geschickt wird und pausiert dann die "loop
> forever" bis der Port geschlossen wird.

Dann steht zu vermuten, dass in Putty der Handshake eingeschaltet ist. 
Benutzt dein µC-Programm vielleicht Softwarehandshake und bekommt von 
Putty ein XOff?

von Sanchez (Gast)


Lesenswert?

Tatsächlich! Danke schonmal für den Tip
Er bleibt stehen sobald ich bei Hterm DTR einschalte, aber was erwartet 
der µC jetzt? bzw. wenns programm anhält, wie soll ich da ne 
Kommunikation realisieren?

von Karlheinz (Gast)


Lesenswert?

Hallo,

du hast grundsätzlich 3 anerkannte Möglichkeiten
1.) eine RS232 Kommunikation ohne Handshake oder
2.) eine RS232 Kommunikation mit Handshake (mit RTS/CTS und DTR/DSR)
3.) eine Kommunikation mit Software-Handshake mittels XON/XOFF

In allen Fällen müssen deine Programme (auf PC-Seite und uC-Seite) das 
berücksichtigen und das gleiche Verhalten an den Tag legen. Mischen (das 
hast du jetzt) funktioniert nicht.

Mach dich schlau wie  RTS/CTS und DTR/DSR arbeiten

http://de.wikipedia.org/wiki/RS232
(Tabelle ganz unten)

und passe deine Programme an!!!

von Sanchez (Gast)


Lesenswert?

Habe nun rausgefunden das der µC einen Reset durchführt sobald DTR aktiv 
wird.
Werde nun versuchen das ganze mit software handshake zu lösen

und danke nochmal :)

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Sanchez schrieb:
> Habe nun rausgefunden das der µC einen Reset durchführt sobald DTR aktiv
> wird.

Dann pass doch Dein Programm so an, dass das nicht passiert. Oder ist es 
nicht Dein Programm? Ich würde vielleicht auf einen nicht durch eine ISR 
abgefangenen Interrupt tippen. Ist aber nur so eine Vermutung.

von Reinhard Kern (Gast)


Lesenswert?

Sanchez schrieb:
> Habe nun rausgefunden das der µC einen Reset durchführt sobald DTR aktiv
> wird.

Das kann ja Absicht sein, irgendwie muss man den µC anhalten bzw. in den 
Bootloader schicken können, sonst könnte man ihn nicht programmieren. 
Also Schalter oder Jumper oder ein externes Signal.

Wenn du die Software nicht ändern kannst, einfach die DTR-Leitung durch 
einen Schalter unterbrechen.

Gruss Reinhard

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.