Forum: Compiler & IDEs Mal wieder Probleme mit UART


von Spiffman G. (spiffman)


Lesenswert?

Hallo zusammen,

ich habe gerade ein bisschen Probleme mit meinem UART.
Leider komme ich mit dem Fehlerbild überhaupt nicht zurecht und weiß 
nicht, wo ich suchen soll.
Ich benutze einen MAX3222 in meinem Projekt zur Debug-Ausgabe. D.h. ich 
möchte nur senden, nicht empfangen.
Baudrate ist 115200, ich habe aber auch schon geringere Baudraten 
versucht.
An PortC hängt ein ULN2803 mit dem ich ein paar Relais treibe.
Die Schaltzyklen möchte ich zählen und im EEPROM abspeichern

Am Anfang mache im code folgendes:
1
  sei();
2
  uart_init();
3
  uart_put_s_P("\n\r\n\r\n\r\n\r-------------------------------------------\n\r");
4
5
  //-----------------------------------------------------------------------------
6
  // Variablen aus dem EEPROM befüllen
7
  //-----------------------------------------------------------------------------
8
  uart_put_s_P("EEPROM:\n\r");
9
10
  p1 = load_from_EEPROM_x16( 0x0000, 0x0300);
11
  p2 = load_from_EEPROM_x16( 0x0002, 0x000A);
12
13
  p3 = load_from_EEPROM_x8( 0x0010, 0xA0);
14
15
  //Schützzähler laden
16
  schuetzzaehler_load();
17
18
  .
19
  .
20
  .
21
22
  uart_put_s_P("Initialisierung erfolgreich!\n\r");

An meinem PC empfange ich:
1
¨H¨H¨H¨¨©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©
2
©©I¨¨AI=5é
3
0x0000: 0xFFFF (Default -> 0x0300)
4
0x0002: 0xFFFF (Default -> 0x000A)
5
0x0010: 0xFF   (Default -> 0xA0)
6
0x0020: 0xFF   (Default -> 0x01)
7
Schutzzaehler
8
9
S1: 0x00000000
10
S2: 0x00000000
11
S3: 0x00000000
12
S1: 0x00000000
13
S5: 0x00000000
14
S6: 0x00000000

Habt ihr eine Idee warum am Anfang die Zeichen falsch sind, später dann 
aber alle korrekt Empfangen werden?
1
void uart_put_s_p (const char *text);
2
3
//Damit Strings aus dem Flash gelesen werden
4
#define uart_put_s_P(__s) uart_put_s_p(PSTR(__s))

von g457 (Gast)


Lesenswert?

> Habt ihr eine Idee warum am Anfang die Zeichen falsch sind, später dann
> aber alle korrekt Empfangen werden?

Falsche Startbiterkennung. Kurze Pause einlegen nach der 
Initialisierung.

von Roland .. (rowland)


Lesenswert?

Kommt "Initialisierung erfolgreich!" auch korrekt an?

von Spiffman G. (spiffman)


Lesenswert?

g457 schrieb:
> Falsche Startbiterkennung. Kurze Pause einlegen nach der
> Initialisierung.

Hallo,

danke für den Hinweis.
Ich habe nach der Initialisierung einfach eine Pause von 50ms gemacht 
und jetzt kommt alles korrekt an.
Danke!

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
Noch kein Account? Hier anmelden.