array über uart übertragen

Gast #4617763
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
Gast #4617777
Mit der (5) übergibst du UDR0 = data sauber 8 Bit. Breiter ist die 
Übertragung bei 8 Bit halt nicht.
Was du in mirf_buffer hast, kann hier kein Mensch erahnen....
Gast #4617788
oh, mirf_buffer war noch eine alte Variable. das habe ich geändert. 
trotzdem kommt nur müll raus. aber buffer[0]=0 sind doch auch nur 8bit 
oder nicht? was ist daran anders als 5?
(Firma: Vescomp) #4617826
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
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?
Gast #4617933
Bis du ganz sicher, dass das Array die erwarteten Werte enthält? Ein 
Stack-Überlauf bewirkt unter anderem, das Variablen unerwartete Werte 
enthalten.
(Firma: matzetronics) #4620094
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
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
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

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.