Uart Bus vertausch Variable

Gast #1737926
Ich habe 2 Atmega32 erst direkt Uart und dann per Max485 verbunden aber 
jedesmal taucht das selbe problem auf.
ich schicke nur 2 variablen von Controller 1. zu Controller 2.  am 
anfang geht alles wie gewollt, aber nach ein paar Minuten oder einen 
Reset werden die Variablen vertauscht, (Variable 1 hat den Wert von 
Variable 2.)

Controller 1. (der der nur sendet)
1
'----UART BUS-------------------------------------------------------------------
2
   Open "COMd.6:9600,8,N,1,inverted" For Output As #1       'TXD
3
   Open "COMd.7:9600,8,N,1,inverted" For Input As #2        'RXD
4
'----UART Bus Daten senden------------------------------------------------------
5
   Printbin #1 , Kreis01 ; Sa01

Controller 2. (empfänger)
1
'----UART BUS-------------------------------------------------------------------
2
Open "COMa.7:9600,8,N,1,inverted" For Output As #1          'TXD
3
Open "COMd.7:9600,8,N,1,inverted" For Input As #2           'RXD
4
'-------------------------------------------------------------------------------
5
Do
6

7
Inputbin #2 , Kreis01 , Sa01                                'Variable einlesen
Persönliche Seite #1737956
Vermutlich geht dir ein Wert verloren z.B. weil keine Flusskontrolle 
vorhanden ist und der Empfänger gerade nicht empfangen kann, wenn der 
Sender sendet.

Du könntest z.B.

Brute-Force Wartezeiten zwischen den Sendevorgängen hinzufügen, in der 
Hoffnung, dass der Empfänger danach mit der Verarbeitung fertig ist.

Die Werte zusätzlich mit Kennung ("Wert1=...") oder Prüfsumme versenden, 
so dass ein teilweiser Datenausfall auf Empfängerseite erkannt wird.

Eine Rückmeldung des Empfängers einbauen, so dass der Datenausfall auf 
Senderseite erkannt wird und die Sendung ggf. wiederholt oder gebremst 
werden kann.

Z.B. dass der Empfänger selbst was sendet (XON/XOFF Verfahren) oder eine 
Handshake-Leitung verwenden (RTS/CTS Verfahren) s. RS232
Gast #1737981
Hallo,

warum verwendest du einen Software-UART? Der Mega32 hat doch einen in 
Hardware.

Wie schnell hintereinander werden die Daten gesendet? Ist eine grössere 
Pause zwischen den Paketen?

> Printbin #1 , Kreis01 ; Sa01

Als was sind diese Variablen deklariert?
Gast #1738989
den Hardware Uart hatte ich erst, dann dachte ich aber das der Fehler 
damit zutuen hat, deswegen bin ich umgestiegen, die beiden variablen 
sind als Byte declariert!
#1739003
Christian schrieb:
> den Hardware Uart hatte ich erst, dann dachte ich aber das der Fehler
> damit zutuen hat, deswegen bin ich umgestiegen,

Damit wird alles nur noch schlimmer.

Dein Problem ist, dass du keine wie auch immer geartete 
Steuerinformation hast, woran der Empfänger erkennen kann, was jetzt das 
erste Byte und was das zweite Byte ist.
#1739152
ganz einfach so:
Du musst 16Bit übertragen. Das verteiltst du jetzt auf 4Bytes(32Bit)
Byte1: 0b0000AAAA
Byte2: 0b0001AAAA
Byte3: 0b0010BBBB
Byte4: 0b0011BBBB

Danach einfach:
Variable1 = (Byte1 & 0x0F) | (Byte2 >> 4)
Variable2 = (Byte3 & 0x0F) | (Byte4 >> 4)
#1739422
Ulrich E. schrieb:
> ganz einfach so:
> Du musst 16Bit übertragen. Das verteiltst du jetzt auf 4Bytes(32Bit)
> Byte1: 0b0000AAAA
> Byte2: 0b0001AAAA
> Byte3: 0b0010BBBB
> Byte4: 0b0011BBBB
>
> Danach einfach:
> Variable1 = (Byte1 & 0x0F) | (Byte2 >> 4)
> Variable2 = (Byte3 & 0x0F) | (Byte4 >> 4)

Und das wichtigste:
Bei jedem Byte testen (anhand des oberen Nibbles) um welchen Teil der 
beiden Eregnisbytes es sich handelt.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 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.