Atmega328p - Sensorwerte per UART - Absturz

Gast #4826264
Lesenswert?

Hallo,
ich versuche verschiedene Sensorwerte in einem String per UART 
(115200kbps) zu senden. Atmega328p läuft auf 16Mhz. Senden des Strings 
alle 10ms.

Ich nutze dazu den folgenden Codeteil:
1
char str[200];
2
  sprintf(str, "S %" PRIu32 " %" PRId16 " %" PRId16 " %" PRId16 " %" PRId16  " %" PRId16 " %" PRId16 " %" PRIu32 " %" PRIu32 " %" PRId16 " \r" , a_trigger, accelX, accelY, accelZ,  rotX, rotY, rotZ, light_ppg1, light_ppg2, temperature);
3
  uart_puts(str);

Es funktioniert eigentlich, aber in unregelmäßigen Abständen stürzt der 
Controller ab. Mal bei Zähler 30, mal bei 190, manchmal 100sek lang 
nicht. Nehm ich den Codeteil raus, funktioniert alles. Also an den 
Sensorwerten, die per I2C gelesen werden, scheint es nicht zu liegen.

Hat jemand eine Idee woran das liegen könnte? Ich verzweifle langsam :-/

Vielen Dank,
Niine
Gast #4826353
Lesenswert?

>Ist es vielleicht möglich, dass der String bei manchen Werten zu groß
>wird und der Speicher quasi überläuft und abstürzt?

Natürlich ist das möglich. Aber woher soll man wissen was du sonst
noch so an Speicher verplemperst? Dein char str[200];
belegt jedenfalls schon mal 10% von den 2k RAM.
Gast #4826355
Lesenswert?

Hallo,

bitte rechne Dir mal den Uart-Fehler aus:

UBBR: 16MHz /16 /115.200kbps => geht nicht !

Du meinst vielleicht:
UBBR: 16MHz /16 /115.200bps = 8,681
ist nicht ganzzahlig.

mit UBBR = 9 => Baudrate: 111.111bps
mit UBBR = 8 => Baudrate: 125.000bps

Oder
UBBR: 16MHz /8 /115.200bps = 17,361
mit UBBR = 17 => Baudrate: 117.647bps

Sonst liegt vielleicht einfach ein Puffer-Überschreiben vor.

Dein Codebsp. sollte komplett, vollständig und übersetzbar sein.
Gast #4826410
Lesenswert?

Karl M. schrieb:
> bitte rechne Dir mal den Uart-Fehler aus:
> UBBR: 16MHz /16 /115.200bps = 8,681
> ist nicht ganzzahlig.
> mit UBBR = 8 => Baudrate: 125.000bps

Ich habe es mal auf 125.000bps gestellt und einen Zähler, den ich auch 
am PC berechnen kann, wegrationalisiert. Jetzt scheint es erstmal 
flüssig zu laufen :-)

holger schrieb:
> Natürlich ist das möglich. Aber woher soll man wissen was du sonst
> noch so an Speicher verplemperst?
Karl M. schrieb:
> Dein Codebsp. sollte komplett, vollständig und übersetzbar sein.

Das ist leider an der Masse an Code schwierig, es wird ja an vielen 
Stellen beeinflusst. :-/

Danke, mit der Geschwindigkeitsänderung und dem gesparten Wert läuft es 
wieder besser :-)

Vg Niine

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren