PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Asuro - Baudrate erhöhen



AsuroPhilip
14.07.2011, 23:33
Hallo,

da ich noch ein BTM-222 übrig habe, wollte ich es meinen Asuro Spendieren :)
Das klappt auch alles so wie es soll.

Kann man, da die UART-Kommunikation ja nicht mehr über IR läuft, die Baudrate im Programm höher stellen, wenn ja wie :confused:



Danke
Philip ;)

markusj
15.07.2011, 10:00
Du musst die von dir verwendete Bibliothek so modifizieren, dass die serielle Schnittstelle mit einer höheren Baudrate angesteuert wird. Problematisch wird das beim Bootloader, der spricht nämlich nur mit 2400Baud. Ich kenne das BTM-222 nicht, vermute aber, dass du da noch weitere Initialisierungen vornehmen musst ... das geht beim Bootloader schief, der tut das nämlich nicht - Außer wenn du selbst einen schreibst.

mfG
Markus

Ceos
15.07.2011, 10:06
ich bin mir jetzt gerade nicht sicher ob die asuro.lib etwas derartiges vorsieht, aber bis auf den bootloader der beim einschalten "ASURO" mit 2400Baud sendet kann man im eigenen Programm ganz leicht die Serielle Schnittstelle verändern und beliebig schnell machen! Problem dabei, man muss schon eine Baudrate wählen die mit der 36kHz Modulation der IR-Übertragung kompatibel ist!

Man könnte es bestimmt ausrechnen aber Rechnen war noch nie meine Stärke ;)

AsuroPhilip
15.07.2011, 10:09
Flashen klappt mit 2400bps, das reicht mir auch! Ich meine im programm, womit ich ihn später steuere und sensor daten schicke ;)

radbruch
15.07.2011, 11:23
Hallo

Die 36kHz-Trägerfrequenz begrenzt die Ir-Übertragung auf 2400 Baud. Bei einem direkten Anschluß ohne IR kann man die Baudrate natürlich deutlich erhöhen. Günstig sind laut Datenblatt unter "Examples of Baud Rate Setting" in der Beschreibung des USART z.B. 38400, 19200 oder 9600 mit jeweils 0,2% Fehler bei 8MHz. In diesen Tabellen findet man auch die entsprechenden Werte für das UBRR-Register welche man in der Init()-Funktion der Library beim Setup des USART einsetzen kann:


/* Init function Processor will be initalized to work correctly */
void Init (void)
{
...
// prepare RS232
UCSRA = 0x00;
UCSRB = 0x00;
UCSRC = 0x86; // No Parity | 1 Stop Bit | 8 Data Bit
UBRRL = 0xCF; // 2400bps @ 8.00MHz
...


Die Werte aus der Tabelle:
2400 207 0xcf
9600 51 0x33
19200 25 0x19
38400 12 0x0c

Da das Highbyte von UBRR immer leer bleibt, reicht es, wenn man nur UBRRL mit dem jeweiligen Wert lädt. Btw. sieht man an den Werten auch den 0,2%-Rundungsfehler.

Wie man das USART-Setup des Mega8 komplett umkrempelt habe ich hier mal getestet. Der asuro "spricht" mit einer seriellen Maus mit 1200,7,n,2:
https://www.roboternetz.de/community/showthread.php?25250-ball-mouse-modified-for-distance-input&p=237915&viewfull=1#post237915

Bei dieser niedrigen Baudrate muss man auch UBRRH setzen und deshalb entsprechend berechnen.

Gruß

mic