Forum: Mikrocontroller und Digitale Elektronik Uart Bus vertausch Variable


von Christian (Gast)


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

von Stefan B. (stefan) Benutzerseite


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

von spess53 (Gast)


Lesenswert?

Hi

Da geht anscheinend etwas verloren. Allerdings sind deine Informationen 
mehr als dürftig.

MfG Spess

von Spezi (Gast)


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?

von Christian (Gast)


Lesenswert?

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!

von Karl H. (kbuchegg)


Lesenswert?

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.

von Christian (Gast)


Lesenswert?

und wie bekomme is das hin?

von Ulrich E. (ulrich_e)


Lesenswert?

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)

von Karl H. (kbuchegg)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.