Umschaltung/Konfiguration der Baudrate zur Laufzeit in BASCOM

hermelin

Neues Mitglied
30. Apr. 2008
9
0
1
Hamburg
Sprachen
  1. BascomAVR
Hallo Leute,

oben genanntes Problem für ein neues Projekt.
Folgendes ist geplant:
Ich möchte einen GPS Empfänger an einen ATMEGA48/88/168 anbinden.
Der GPS Empfänger hat eine RS232 Schnittstelle. Beim anlegen der Betriebsspannung am Empfänger wird diese auf eine Baudrate von 9600 gesetzt. Desweiteren erfolgt die Datenübertragung der Koordinaten um Abstand von 1 oder 2 Sekunden.
Das war die Overtüre, jetzt das Problem.
Man kan bei diesem GPS Empfänger den Abstand der Datenübertragung auf 0,5 Sek. setzen. Dann ändert dieser aber auch die Baudrate !!!
Meines Wissens ist der CONFIG Befehl für die UART nicht reconfig fähig. Oder irre ich ?
Hat jemand schon mal zur Programmlaufzeit die Baudrate einer Schnittstelle gändert ?
Wäre für einen prinzipellen Tipp dankbar. Es gibt noch keinen Quellcode. Es ist noch Konzeption !!
Damit steht und fällt mein nächstes Projekt (Nachfahren einer gelernten Strecke mit einem RC-Car per GPS).
Zwei Schnittstellen im Programm konfigurieren und diese elektronisch umschalten möchte ich nur als Notlösung verwenden.

Viele Grüße Hermlin
 
Hallo,

Meines Wissens ist der CONFIG Befehl für die UART nicht reconfig fähig. Oder irre ich ?
Hat jemand schon mal zur Programmlaufzeit die Baudrate einer Schnittstelle gändert ?
mit den Bascom-Befehlen geht es meiner Meinung nach nicht. Was hindert dich aber daran die Register UBBRL/UBBRH mit Bascom direkt zu beschreiben und die Baudrate selber direkt festzulegen ?
Es geht. Ich hab es zwar bis jetzt nur in Assembler gemacht aber das war auch nichts anderes als eine direkte Änderung der Registerinhalte.

Sieh dir mal das große Datenblatt des Controllers an. Der Abschnitt UART wird dir da weiterhelfen.

Grundsätzlich kannst du im Betrieb alle Hardwareelemente des Controllers umkonfigurieren (UART, ADC, SPI, I2C, ...)

Gruß
Dino
 
Hallo Dino,
um sowas bin ich bis jetzt immer drumrum gekommen. Aber das werde ich doch mal probieren.
Hier gilt doch glatt wieder der Spruch "Lesen bildet" ;-)
Danke.

Viele Grüße
Hermelin
 
um sowas bin ich bis jetzt immer drumrum gekommen.
Das große Daten der Controller ist sehr empfehlenswert und eigentlich "Pflichtlektüre" ;)

Aber ACHTUNG ! Die Beispiele sind allgemein gehalten nur auf Register ausgerichtet die IO-mapped sind. Darum auch beim Assembler die in/out-Befehle zum lesen/setzen der Register. Das geht bei einigen größeren oder neueren Prozessoren nicht mehr oder nur bei bestimmten Registern. Das sollte aber kein Problem sein wenn du es in Bascom machst. Dann wird das beim compilieren umgesetzt.

zB ...

UBBRL = &H34
oder
UDR = Sendebyte
oder so ...

bei den Mega48,88,168, ... (den neueren) heißen die Register dann zB ...
UBBR0L = ...
oder
UDR0 = Sendebyte

Aufschluß über die Namen der Bits und Bytes der Register gibt dir die Tabelle am Ende -> Register-Summary

Gruß
Dino
 
Hallo Zusammen,

nicht so kompliziert denken

$Baud = neue Baudrate

geht in der Laufzeit
mach ich auch so.....

Gruß Thomas
 
Ha, das war jetzt aber 'ne glatte 6! :aetsch:Das wußte sogar der Opa...:wink:

Schöne Ostern!
 
Hallo zusammen!

OK... kan kann man zwar die Baudrate on-the-fly ändern, aber warum muss man das denn?

Wenn man zusätzlich zum Hardware-USART noch einen Software-USART verwendet, kann man getrennte Pins verwenden und auch getrennte Baudraten.

Zusätzlich gibt es dann noch SERIN und SEROUT mit denen ich bei jedem Aufruf alle Parameter neu vorgeben kann..... nicht nur die Baudrate.


Möglichkeiten gibt es also scheinbar viele in diese Richtung. :cool:

Grüße,
Cassio
 
Hi Cassio,

aber warum muss man das denn?
so wie Hermelin geschrieben hat verändert der GPS-Empfänger bei Erhöhung der Anzahl der Datenpakete pro Sekunde von sich aus seine Baudrate. Wenn man also die Baudrate der Schnittstelle nach dem ändern des Modus vom GPS-Empfänger nicht erhöht verliert man den Kontakt zum Empfänger (steht im ersten Beitrag von ihm).

Gruß
Dino
 
Außerdem bedeutet der SW-UART einen erheblichen Mehraufwand an Flash und Programmzeit. Beim HW-UART übernimmt die Hardware den Empfang der einzelnen Bits, und meldet erst das komplett empfangene Byte. Beim SW-UART muß das Programm jedes einzelne Byte selbst abfragen.

@Baudrate:
laut Bascom-Hilfe überschreibt "$baud=lustigeZahl" lediglich den entsprechenden Wert in den Options. Zum verändern der Baudrate zur Laufzeit ist "baud=nochLustigereZahl" vorgesehen.
Und ich behaupte jetzt mal ganz dreist, daß dadurch auch nur die UBRR beschrieben werden. Allerdings nimmt einem Bascom die Berechnngen aus der Taktfrequenz ab. Ob Bascom U2Xn aus UCSRnA kennt (zumindest beim Mega88 mit n=0) weiß ich auch nicht.
 
Hallo Leute,

vielen Dank für die vielen Antworten.
Übrigens: Mit dem "drurum gekommen" meinte ich eher die/den Klimmzüge die man bei manchen problemen machen muss ;-)
Ihr habt natürlich mit dem lesen der Doku vollkommen recht. Aber ich habe leider mit dem Englisch manchmal ein kleines Problem. ;-)
Aus meiner Sicht können wir das Thema jetzt ruhig schließen.

Noch einen schönen Ostermontag.

Gruß hermelin
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)