array über uart übertragen

Gast #4617763
Lesenswert?
• ▲
▼
Hallo, ich habe einen Array und möchte davon einzelne Felder über UART 
übertragen.
Die UART-Übertragung an sich funktioniert, jedoch nicht mit einem array
1
...
2
uint8_t buffer[5] = {1,2,3,4,5};
3
...
4
usart_transmit_char(mirf_buffer[0]);
5
usart_transmit_char(5);
6
...
1
void usart_transmit_char(unsigned char data){
2
  /* Wait for empty transmit buffer */
3
  while ( !( UCSR0A & (1<<UDRE0)) );
4
  /* Put data into buffer, sends the data */
5
  UDR0 = data;
6
}

jedoch bekomme ich nur kryptische Zeichen. Die Zahl (die 5 aus dem 
zweiten aufruf) kommt ganz normal an. Das ganze mache ich mit einem 
Atmega328p.
Was habe ich falsch gemacht?

Mark
(Firma: Vescomp) #4617826
Lesenswert?
• ▲
▼
Karl M. schrieb:
> Das stimmt nicht ! eine 5 = 0x05 = 0b0101 und nichts anders.

Mark schrieb:
> jedoch bekomme ich nur kryptische Zeichen. Die Zahl (die 5 aus dem
> zweiten aufruf) kommt ganz normal an.

 5 ist Kontrollzeichen und wird auch als solches angezeigt (senkrechter
 Balken).
 Wenn die 5 ganz normal ankommt (als 5 und nicht als kryptisches
 Zeichen), dann hat entweder sein Compiler das entsprechend übersetzt
 oder der TO sagt nicht die Wahrheit.

 Such dir eins davon aus, mir ist es egal.
Gast #4617931
Lesenswert?
• ▲
▼
1. Welcher Typ von uC wird verwendet?
2. Was ist die Taktquelle für Deinen uC?
3. Welche Taktfrequenz?
4. Welches sind die vor der 5 übertragenen Zeichen?
5. Was kommt tatsächlich an? Falls Zeichen nicht benennbar, mache bitte 
ein Bildschirmfoto und poste das hier?
(Firma: matzetronics) #4620094
Lesenswert?
• ▲
▼
Kann es sein, das du einfach buffer[0], der ein 0x01 (= Ctrl-A) enthält 
sendest, aber erwartest das es eine '1' ( = 0x31) ist?

Wenn du deinen Buffer so initialisierst:
1
uint8_t buffer[5] = {'1','2','3','4','5');
würde er ASCII Zeichen senden, die du am Terminal dann als "12345" 
siehst.
(Firma: Vescomp) #4620227
Lesenswert?
• ▲
▼
Matthias S. schrieb:
> Wenn du deinen Buffer so initialisierst:
> uint8_t buffer[5] =  {'1','2','3','4','5');
> würde er ASCII Zeichen senden, die du am Terminal dann als "12345"
> siehst.

 Das war schon vor 3 Tagen:
 Beitrag "Re: array über uart übertragen"

 Der TO hat wahrscheinlich seinen Fehler korrigiert, aber da er
 noch nie etwas von Netiquette gehört hat, meldet er sich nicht mehr.
#4620257
Lesenswert?
• ▲
▼
Sobald man mehr als ein Byte senden will, braucht man erstmal ein 
Protokoll, d.h. eine Regel, nach der der Empfänger eindeutig feststellen 
kann, wann ein Paket beginnt und wann es endet.
Daneben ist es nicht verkehrt, wenn der Empfänger auch erkennen kann, ob 
ein Paket gestört oder unvollständig ist. Der Master kann ja mitten im 
Paket einen Watchdogreset gemacht haben, das Kabel kurz mal gezogen 
worden sein, ein Spannungseinbruch usw.

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