habe schon im forum gesucht aber nichts in der art gefunden und zwar folgendes problem in basic ich möchte werend das program ausgeführt wird die baudrate am mega 16 ändern (sie soll also variabel bleiben etweder 115200 oder 56200) jetzt habe ich folgenden code dazu geschrieben Baud_change: If Pind.4 = 1 Then Baud = 115200 Locate 1 , 1 : Lcd "Baudrate 115200" Reset Watchdog End If If Pind.4 = 0 Then Baud = 56200 Locate 1 , 1 : Lcd "Baudrate 56200" Reset Watchdog End If Return auf´m display zeigt er mir es an das die baudrete gewechselt wurde aber ich bekomme aber nix am PC bei beiden stellungen des schalters. Pind.4 habe ich hiermit als eingang deklariert Config Pind.4 = Input 'Ein Pin wird als Eingang definiert muss ich den PULL UP auch noch hoch zihen? weil er reagiert ja auf die änderungen. würde mcih freuen wenn mir einer helfen könnte
"
Autor: Falk Brunner (falk)
Datum: 01.10.2007 15:58
------------------------------------------------------------------------
--------
@ Der Grosse (jonnyk)
>Kann man auch eine variable baud rate beim mega 16 setzen? wenn ja wie?
Mit einem scharfen Blick in Handbuch von BASCOM?
Such mal nach BAUD (ohne Dollarzeichen am Anfang).
MFG
Falk
"
hab ich ausprobiert es geht nicht. bekomme von MC trotzdem keine
antwort.
Der Grosse wrote:
> Baud = 115200
Wenn ich mich dunkel an Basic erinnere, legst Du damit die Variable
"Baud" an und weist ihr den Wert 115200 zu, mehr nicht.
Irgendwo im SRAM steht dann also 115200.
Auf die UART dürfte das keinerlei Einfluß haben.
Ich vermute mal, es gibt ne Funktion Initialize_UART, die sollte die
UART initialisieren können.
Peter
in der hilfe von bascom steht zitiere "$BAUD overrides the compiler setting for the baud rate and BAUD will change the current baud rate. BAUD = ... will work on the hardware UART." tut leid hab mich verschrieben hast recht 57600 aber geht trotzdem nicht.
@ Peter Dannegger (peda) >Wenn ich mich dunkel an Basic erinnere, legst Du damit die Variable >"Baud" an und weist ihr den Wert 115200 zu, mehr nicht. Aber nicht bei BASCOM. Dort ist es ein Befehl. MFG Falk
Mit welcher Baudrate geht es? Geht es überhaupt, d.h. der Rest vom Programm ist OK und die Freilandleitungen zwischen µC und PC sind richtig gezogen.
da ich nicht einfach nur rum gesessen habe hier mein modifizierter code '------------------------------Variable Baudrate Einstellen---------------- Main: If Pind.4 <> Baud_changed Then Goto Baud_change If Z = 5 Then Select Case I(3) Case Chr(162) 'If Usr.txc = 1 Then Printbin Serien_nr 'End If Case Chr(49) 'If Usr.txc = 1 Then Printbin Serien_nr2 'End If Case Else 'If Usr.txc = 1 Then Printbin Fehler 'End If End Select Z = 1 End If Reset Watchdog Goto Main '----------------------------------------------------------------------- -------- Onrxd: A = Udr 'Byte aus der UART auslesen 'Print Hex(a) I(z) = A 'Hauptschleife Incr Z Return Baud_change: Select Case Pind.4 Case 0 : baud = 115200 Cls Locate 1 , 1 : Lcd "115200" Case 1 : baud = 57600 Cls Locate 1 , 1 : Lcd "57600" End Select Baud_changed = Pind.4 Goto Main End 'end program hier mein code mit dem es jetzt doch läuft!!!! ES funktioniert Danke für eure schnelle und effektive hilfe. Code lasse ich da fals es jemand sonst noch braucht. :-*
@ Der Grosse (jonnyk) >Wenn ich die baud rate ohne den schalter also Constant einstelle geht es >mit beiden. Aber wenn ich den schalter mit einbinde funktioniert es >nicht mehr. Du musst definitiv den BAUB Befehl nutzen, NICHT $BAUD ! Das ist ein himmelweiter Unterschied. Diese ganzen $Befehle sind Compileranweisungen, die nur einmal als Konstanten im Programm auftauchen, und vom Compiler während der Kompilierung verwendet werden. Während das Programm läuft, können diese nichts mehr ändern. MfG Falk
@ Der Grosse (jonnyk)
>Danke falk genau das hab ich gemacht...
Und es geht dennoch nicht?
Hmmm.
Ja er macht zwar bei der baud rate 57200 das richtige ausgeben und wenn ich wieder umschalte auf 115200 dann kommt nur noch müll
@ Der Grosse (jonnyk) >Ja er macht zwar bei der baud rate 57200 das richtige ausgeben und wenn >ich wieder umschalte auf 115200 dann kommt nur noch müll Mach mal ne kurze Pause nach dem Umschalten, so 10ms oder so. MFG Falk
Du kannst nicht einfach so die Baudrate umschalten. Beide Seiten müssen aufgehört haben zu senden, dann können sie umschalten und erst, wenn beide Seiten umgeschaltet haben, darf wieder gesendet werden. Sonst ist einer aus der Synchronisation (falsche Startflanke) und es kommt Müll raus. Außerdem kann es sein, daß die Baudratenteiler keinen Reset haben, d.h. beim Wechsel einmal voll rum (65536 Takte) zählen. Also etwas länger (1s) warten. Außerdem prellt Dein Taster an Pind.4 wie sau, d.h. die Baudrate wechselt mehrmals. Peter
Falk Brunner wrote: > > Mach mal ne kurze Pause nach dem Umschalten, so 10ms oder so. > > MFG > Falk Was mmeinst du damit? ich mache doch den schalter manuel umschalten und dann erst sende ich ihm was damit er antwortet. oder soll ich zwieschen den case anweisungen eine pause machen? oder nach jedem "baud = ..." ??? Hab ich jetzt so geändert tut sich aber nix. im ablauf ist das selbe wie auch vorher. ich denke ma länger als eine sekunde warten ist auch nicht das ware oder??? Baud_change: Select Case Pind.4 Case 0 : Baud = 115200 Cls Locate 1 , 1 : Lcd "115200" Wait 1 Reset Watchdog Case 1 : Baud = 57600 Cls Locate 1 , 1 : Lcd "57600" Wait 1 reset watchdog End Select Wait 1 reset watchdog Baud_changed = Pind.4 Goto Main
Was für ein Programm benutzt Du auf dem PC ? Hyperterminal ist krank ! Einstellungen ändern wird glaube ich ignoriert, wenn die Verbindung nicht getrennt ist. Ich hab damit die seltsamsten Effekte erlebt (COM2 wurde angezeigt, aber auf COM1 wurde gesendet). Am sichersten ist wohl, Hyperterminal zu beenden, neu starten, neue Baudrate setzen und verbinden. Peter
Peter Dannegger wrote: > Was für ein Programm benutzt Du auf dem PC ? > > Hyperterminal ist krank ! > > Einstellungen ändern wird glaube ich ignoriert, wenn die Verbindung > nicht getrennt ist. > Ich hab damit die seltsamsten Effekte erlebt (COM2 wurde angezeigt, aber > auf COM1 wurde gesendet). > > > Am sichersten ist wohl, Hyperterminal zu beenden, neu starten, neue > Baudrate setzen und verbinden. > > > Peter Jop das mache ich auch ich habe zwei hyperterminals aus com 3 angesetzt mit verschiedenen baudraten. wenn ich den schalter betätige trenne ich den einen und starte den anderen. Was mich allerdings wundert das er bei 57600 terminal das richtige ausgibt aber wenn ich wieder umschalte auf 115200 macht er es nicht mehr. wenn ich wieder auf 57600 mache geht es wieder.
@ Der Grosse (jonnyk) >Jop das mache ich auch ich habe zwei hyperterminals aus com 3 angesetzt >mit verschiedenen baudraten. wenn ich den schalter betätige trenne ich >den einen und starte den anderen. Ja, aber was und vor allem WIE sendest du Daten? Du darft nciht ununterbrochen Daten senden, sonst kann der PC nicht auf die neue Baudrate synchronisieren. Machs mal so. Am uC Baudrate umschalten Am PC Hyperterminal umschalten Sendepause am uC (10ms oder so) uC sendet normal. MfG Falk
ne es geht nicht bin gerade mit nem oszi sicherheitshalber dran gegangen daten werden werend des umschaltens nicht gesendet. Aber die pegel andern sich auch nicht (müssten sie? TXD/RXD low). und wenn ich umgeschaltet habe von 115200 auf 57600 dann geht es.
Was für eine Taktquelle benutzt Du? Sicher, dass die genannten Baudraten mit ausreichender Genauigkeit einstellbar sind? Gerade die 57,6 kBd und 115,2 kBd sind nur mit baudratentauglichen Quarzen vernünftig erzeugbar.
das ist mir schon bewust. Das verständnis hört bei mir an der stelle auf wo ich die variable $baud als ... deklariere und es geht mit beiden baudraten einwand frei. wenn ich wiederrum den schalter einbaue dann geht es nicht mehr. jetzt habe ich es folgender massen realisiert: Die var $Baud als 115200 deklariert und beim schalter setze ich die var baud auf 57600. wenn ich jetzt von 57600 auf 115200 wechsele dann lasse ich den watchdog ablaufen und nach´m reset ist er wieder auf 115200. von 115200 auf 57600 geht es. ganz normal. ist zwar nicht die beste lösung aber immer hin. wenn jemand was besseres weiß bitte um hilfe.
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.