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)
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
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?
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!
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.
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.