Forum: Compiler & IDEs UART -> bytes richtig empfangen.


von Peter L. (lahabole)


Lesenswert?

Hallo,

ich habe das Problem das meine 3 Bytes nicht wirklich sauber empfangen 
werden. Mit dem einen AVR sende ich 3 Bytes, und mit einem anderen AVR 
möchte ich diese Empfangen. Empfangen wird meist das Mittlere Byte, das 
erste und letzte Byte sind meist 0. Hat einer ne Idee wo mein Fehler 
liegt. Der Code ist übrigens aus dem UART Tutorial von hier. Meine ISR 
sieht im moment so aus.
1
#define UART_MAXSTRLEN 2
2
volatile uint8_t uart_str_complete = 0;
3
volatile uint8_t uart_str_cnt = 0;
4
volatile char uart_string[UART_MAXSTRLEN] = "";
5
6
ISR(USART_RX_vect){
7
8
unsigned char nextChar;
9
10
nextChar = UDR;
11
12
if (uart_str_complete == 0)
13
{
14
  if (uart_str_cnt < UART_MAXSTRLEN)
15
  {
16
    uart_string[uart_str_cnt] = nextChar;
17
    uart_str_cnt++;
18
  } 
19
  else
20
  {
21
    uart_str_cnt = 0;
22
    uart_str_complete = 1;
23
  }
24
}
25
  
26
}

von ?!# (Gast)


Lesenswert?

> 3 Bytes
> #define UART_MAXSTRLEN 2
?

von Peter L. (lahabole)


Lesenswert?

Ja hast recht. Ist noch von gestern Abend, da habe ich mit den Werten 
gespielt. Sollte eigentlich ne 3 sein.

von ?!# (Gast)


Lesenswert?

Wenn deine drei Bytes ein String sein sollen muss da sogar eine 4 hin, 
weil

   0       1       2     3
<Byte1> <Byte2> <Byte3> \0
                        ^^

von Peter L. (lahabole)


Lesenswert?

Nein kein string, es sind drei Numerische werte die gesendet werden. 
Daher brauche ich den kompletten bereich von 0...255, für die 
eigentlichen Daten.

von Peter II (Gast)


Lesenswert?

stimmen denn beiden baudraten? Habe beide Atmels einen Quarz?

von Peter L. (lahabole)


Angehängte Dateien:

Lesenswert?

Stimmen denke ich mal schon. Am Arduino stell ich ja nix rum, und am 
at90 hab ich das setbaud.h genommen. beide auf 9600 eingestellt, und 
sollte auch klappen. Der Logicanalyzer ist auf async seriell eingestellt 
(8n1), und spuckt keine Timingfehler aus.

Ich Empfange ja die Daten und zeitweise Stimmts ja auch, aber immer 
wieder mit einbrüchen, das die ganze cpu lahm gelegt ist. HAbe noch ein 
bild angehängt.


Die oberen 3 Zeilen sind das PWM-signal, mit Aussetzern wenn der 
Empfangene array verhauen wird. Im 2. Bild habe ich mal reingezoomt, da 
sieht man das der Datensatz verschoben ist. Die 99 im ersten Byte gehört 
nicht dazu, das wird als Anfrage gesendet.

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.