Hi, ich habe grade folgendes Problem:
Ich möchte innerhalb meines Programmes die Baudrate ändern. Grund ist
ein angeschlossenes Gerät, welches erst mit 9600Baud läuft, danm aber
auf 19200 eingestellt werden soll.
Ich nutze die Bibliothek von Peter Fleury.
So sieht das ganze aus:
1
#define F_CPU 8000000
2
[...]
3
uart_init(UART_BAUD_SELECT(9600,F_CPU));
4
uart_puts("$PSRF100,1,19200,8,1,0*38\r\n");
5
uart_init(UART_BAUD_SELECT(19200,F_CPU));
6
uart_puts("$PSRF103,00,00,01,00*24\r\n");
Allerdings holt er hier direkt die 19200 und nicht erst 9600. Mein
Terminal Programm müsste ja je nach Einstellung einmal müll und einmal
richtig empfangen. Es empfängt aber beides richtig, bzw beides nicht.
Meine Rückfallebene sollte eigtl sein, das ich alles mit 9600baud laufen
lasse. Da ist aber das nächste Problem:
Will ich das so senden, Crasht der µC. (LED blinkt nicht). Sende ich nur
3 Strings, geht alles. Auch mit delays (von paar ms bis hin zu einer
sekunde) stürzt er ab. Buffer sind beide auf 128 definiert. Erhöhe ich
den TX Buffer, kann ich mehr senden, senke ich ihn, stürzt er früher ab.
Eigentlich müsste der Buffer doch geleert werden nach dem Senden?!
Controller ist ein Mega8 mit 8Mhz Quarz, Data Memory Usage bei 54%. Also
genug platz für den Stack.
Verbunden ist der Controller mit dem PC mit einem FT232. Die Verbindung
geht in beide Richtungen. Kommentier ich obigen Code aus, reagiert er
korrekt auf vom PC gesendete Kommandos.
Der obige Code ist mit das erste, was gemacht wird nach der
Port-Initialisierung.
Betrieben mit einem 3,7V LiPo Akku, mit einem 3,3V Spannungsregler
dahinter.
Hat jemand eine Idee, wie ich das erste Problem lösen kann und worans
beim zweiten hapert?
Peters Bib arbeitet mit einem Buffer, der von einem Interrupt
abgearbeitet wird.
setz dir oben mal spasseshalber ein _delay_ms(100)vor dem 2. Init rein.
dann klackert der UART schon ein paar Bytes Langsam raus...
und es geht nicht, der µC stürzt ab. Ich versteh nur absolut nicht
warum? Selbst mit 1000ms geht es nicht.
Um auszuschließen das doch irgendwas mit dem Speicher nicht stimmt, habe
ich diverse Arrays kleiner definiert und bin so auf 35% Memory Usage
gekommen, keine besserung.
Langsam nerft der Fehler echt... Die letzte "hürde", dann währe das
Programm fertig.
Weiß denn niemand rat? Ich poste auch gerne das komplette Projekt, falls
das hilft.