mikrocontroller.net

Forum: Compiler & IDEs 24 bit über RS232


Autor: Christoph (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Ich würde gerne ca.24 bit, darf auch ein long int also 32 bit sein, zw. 
pc und atmega32 senden (beide Richtungen)über die RS232. Labview soll 
mit dem µC Daten austauschen(gehört zu meiner Diplomarbeit). 8 bit 
funktionieren bei mir schon sehr gut (mit Hterm), der Empfang läuft über 
ISR.
Nun bin ich etwas Ratlos da ich keine Programmiererfahrung und auch µC 
nur aus meinem Studium kenne.
Wie splitte ich das ganze auf bzw. wie mach ich klar, dass die 3 oder 4 
Byte zusammen gehören. Wie füge ich eine Nachricht richtig zusammen wenn 
ich Daten empfange. Da ich nur 3 Byte brauche soll ich dann im 4 Byte 
zB. FF übertragen damit ich das ende erkenne?

Ich hab leider noch nichts passendes im Tutorium bzw. Forum gefunden.
Ich bin für jeden Hinweis dankbar.

Autor: 6645 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt verschiedene Moeglichkeiten, die sind verschieden aufwendig. Was 
geschieht wenn mal ein Byte der 3 noetigen bytes verloen geht ? Waere 
das tragisch ? Wenn es einigermassen sicher sein soll, sendet man einen 
Header und dann die Daten. Der Header kann ein, zwei, drei bytes gross 
sein.

Autor: Christoph (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich denke es wär nicht so tragisch da sich die nachrichten periodisch 
wiederholen.
Aber ich hab mir nochmal das tutorium durchgelesen und bin auf 
"Schreiben von Variableninhalten" gestoßen mit uart_puts und uart_putc. 
Wenn ich jetzt zB. in die Variable 0xacf0 schreibe und in der funktion 
itoa die 10 auf 16 ändere überträgt er mir 4Byte acfo in ASCII. wie kann 
ich das ändern, damit er nur zwei byte überträgt also ac fo in hex ???

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christoph wrote:
> ich denke es wär nicht so tragisch da sich die nachrichten periodisch
> wiederholen.

Das du dich da mal nicht täuscht.
Wenn ein Byte verloren geht (oder sich dein PC Programm auf das
falsche Byte synchronisiert) und dein PC Programm so geschrieben
ist, dass es immer 4 aufeinanderfolgende Bytes zusammenfasst, dann
werden auf PC Seite die Bytes durcheinander kommen.

Irgendeine Form der Synchronisierung nach dem Muster: 'Jetzt fängt
ein neuer Datensatz an' muss es praktisch immer geben.
Ansonsten ist es nur ein kleiner Schritt zum Chaos.

> Aber ich hab mir nochmal das tutorium durchgelesen und bin auf
> "Schreiben von Variableninhalten" gestoßen mit uart_puts und uart_putc.

Das überträgt in Textform. Du willst aber eine binäre Übertragung.

> Wenn ich jetzt zB. in die Variable 0xacf0 schreibe und in der funktion
> itoa die 10 auf 16 ändere überträgt er mir 4Byte acfo in ASCII. wie kann
> ich das ändern, damit er nur zwei byte überträgt also ac fo in hex ???

Indem du nicht itoa benutzt um von einer Binärzahl die textuelle
Repräsentierung zu ermitteln, sondern die beiden Bytes direkt
mit uart_putc() überträgst.
  unsigned int number;

  uart_putc( (unsigned char)( number >> 8 ) );    // zuerst das HighByte
  uart_putc( (unsigned char) number );            // dann das Low Byte

Autor: Christoph (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank funktioniert

da ich bei ca. 22 benötigten bits eh eine long int übertragen werde, 
habe ich noch genügend frei die ich zur synchronisierung in LabView 
verwenden kann. danke für den hinweis

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.