Hy, bin neu hier und habe mit der Programmierung von Python noch sehr wenig Erfahrung, daher bitte ich um Nachsicht. Ich habe sitze jetzt schon seit ca. 3 Wochen daran, mit meinem Raspberry Pi eine Kommunikation mit einem ATMEGA16, über eine RS485 Verbindung, herzustellen. Leider bisher nur mit sehr wenig Erfolg. Ich habe auf dem Raspberry ein Programm laufen, welches eine Adresse (z.B. 5) in die Pipe schickt und das Modul, auf dem ein ATMEGA16 am laufen ist, soll sich erkennen, seine eigene Adresse nochmal zum vergleich zurück senden und dann einen Wert übermitteln. Problem ist allerdings, dass das Modul nur bei 1 oder 80 reagiert und dann auch nur eine 80 zurück sendet (mit dem Wert lassen wir erst mal sein, da ich gerne erst mal das ansprechen hin bekommen will). Habe es jetzt schon mit dem RasPi Comm und der UART-Schnittstelle (mit jeweils einem RS485-IC SN75176BP) versucht. Meine Vermutung ist, dass ich mit pyserial kein startbit senden kann. Oder ich stelle mich zu dusslig an. Da mir die Beiträge hier bisher immer sehr gut geholfen haben, hoffe ich, dass ihr mir auch bei diesem Problem helfen könnt. Danke schon mal im Voraus. Kay
Hallo Kay, bist Du Dir sicher (geprüft!) das Deine Hardware richtig arbeitet? A und B Leitung richtig verbunden? Wird Dein Direction Pin (DIR) zur richtigen Zeit und ausreichend Lange angesteuert? Ist im Ruhezustand dein DIR auf "Empfang" geschaltet? hast Du ein Scope, mit dem Du die Signal ansehen kannst? Ev. postest Du mal einen Schaltplan. Erst wenn das alles richtig können wir uns die Software ansehen. Gruß Florian
Hallo Florian, vielen Dank für die schnelle Antwort Hardware ist alles OK und richtig. Auch das DIR ist richtig. Wie gesagt, mir dem RasPi Comm und über UART habe ich die gleichen Probleme bzw. das gleiche Fehlerbild. Wenn ich den ATMEGA einfach seine eingestellte Adresse (bei 1) lasse, empfängt das Raspi immer eine 80. Wenn ich mir das ganze mit nem Ossi anschaue ist schon zu sehen, das mein Raspi kein Startbit sendet und mein ATMEGA16 erwartet es leider und sendet es auch mit raus. Das Raspi sendet zb. eine 1 wie es sich gehört (nur leider ohne Startbit) und der ATMEGA auch (mit Startbit). Ich kann auch gerne mal ein Foto machen von dem ganzen. P.S.: Wenn ich zwei AMTEGA zusammenschließe und die Aufgabe vom Raspi (nur Verbindungsaufbau, Adresse prüfen, Wert übermitteln und Wert anzeigen über LEDs) von einem der beiden ATMEGA machen lasse, geht es. Weil beide mit Startbit arbeiten. Nur pyserial will einfach kein Startbit senden und ich habe auch in keinem Forum was gefunden was mir weiter hilft.
Kein Startbit ist allerdings schon sehr merkwürdig. Kannst Du vor dem RS485 Treiber mit dem Scope mal messen? Fehlt da das Startbit auch schon oder erst nach dem Treiber?
Ja, fehlt auch schon vorher. anbei mal ein Bild von meinem Scope. Übertragen wird eine 1.
Hi
> Übertragen wird eine 1.
Wenn das ein 0x00000001 sein soll, dann passt das doch. Startbit und
Bit0.
MfG Spess
Leider sind rechts die höherwertigen Bits. Auf dem Bild ist eine 5 zu sehen
Hi >Leider sind rechts die höherwertigen Bits. Ja. Das Startbit ist links. Dann folgt Bit0, Bit1, Bit2, ... , Stopbit. >Auf dem Bild ist eine 5 zu sehen. Passt auch. MfG Spess
Hmmm.... gibt es zufällig einen weg meine Ausgabe zu negieren?
Hi
>gibt es zufällig einen weg meine Ausgabe zu negieren?
Wozu? Das ist ein korrektes UART-Signal.
MfG Spess
Stimmt schon, aber der ATMEGA sieht 0V als Logische 1. Sprich: wenn ich meine Ausgabe negiere müsste er es richtig interpretieren.
Hi
>Stimmt schon, aber der ATMEGA sieht 0V als Logische 1.
Unsinn. Der ATMega sieht das genau so.
MfG Spess
Kay Raabe schrieb: > Stimmt schon, aber der ATMEGA sieht 0V als Logische 1. Wo hast du denn den schrott her? Kay Raabe schrieb: > Leider sind rechts die höherwertigen Bits. > > Auf dem Bild ist eine 5 zu sehen Dann schau doch mal in das Datenblatt des Controllers... siehe Bild (ausschnitt aus dem Datenblatt)!
Bei einer RS485 Kommunikation soll auf beide Seiten (Sender und Epmfänger) jeweils einen UART<->RS485 Adapter vorhanden sein. Diese Adapter stellen sicher dass das Signal mit der gesendeten Polarität empfangen wird. Hast Du auf beide Seiten jeweils einen Adapter? Sind die RS485 Leitungen richtig (A->A, B->B) angeschlossen? Wenn die Polarität nicht stimmt, dann kann nur A mit B gewechselt sein...
das ist alles ok. Wie schon gesagt, der ATMega mit der Ardesse 1 erkennt sich bei 1 und 80 und sendet eine 80 zurück
So sieht eine 2 gesendet von meinem ATMega aus
Hi
>So sieht eine 2 gesendet von meinem ATMega aus
Dann stimmt etwas anderes nicht. Zeig mal dein Programm.
MfG Spess
Kay Raabe schrieb: > So sieht eine 2 gesendet von meinem ATMega aus Nie und nimmer. Das ist keine 2, das ist eine -2. Oder eine ~2 oder eine (255-2). Zeig mal den Code.
Kay Raabe schrieb: > So sieht eine 2 gesendet von meinem ATMega aus verwendest du software UART auf ATmega? Sonnst kann das höchstens ein 0x1C sein...
Hy, habe es aus beruflichen Gründen leider erst jetzt geschaft wieder zu screiben. Problem ist beseitigt! Ihr hattet recht, war ne ~2. Und dann kam noch dazu, dass die Übertragungsrate vom ATMega falsch berechnet war. Jetzt geht alles. Vielen dank nochmal an alle.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.



