Uart Bus vertausch Variable

Gast #1737926
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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?
#1739422
Lesenswert?

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

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