MAX 485 Problem beim umschalten

OP #318472
Hallo,

folgendes mir nicht erklärbares Problem. Mein Programm sendet jede
Sekunde ein J zu einem anderen Controller, der das empfangende Zeichen
auf einem Display ausgibt.Funktioniert super.

Wenn ich VOR der for(;;) Schleife den Max auf senden schalte klappt
es.

Problem :

Wenn ich Ihn in der for Schleife auf senden schalte, klappt es NICHT
!!
Ich verstehe es einfach nicht !?

Danke im vorraus !
Gruß
Thorsten
Angehängte Dateien:
OP
So glaube ich habe es gefunden. Aber verstehen tue ich es noch immer
nicht !?

Es ist die Delay Routine. Wenn ich diese NACH dem umschalten aktiviere,
dann sendet er nix.Warum auch immer !? Ohne die Delay Routine klappt es
wunderbar.

Was ist an der Delay Routine so schlecht, das diese den Programmablauf
so stört !?

Probiere es einmal per Timer, aber da es ein RS485 Protokoll werden
soll, dachte ich das die Delay Routine ok wäre.Nummer 1 sendet und
wartet ein paar Sekunden.Dann gibt Nummer 2 Antwort. naja.....

Nutze diese Delay Routine auch bei anderen Sachen 1-Wire mit DS18S20,
serielles Display u.s.w. nur in diesem Fall ist sie wohl nicht ok.

Warum auch immer. Irgendjemand vielleicht eine Idee ?

Danke im vorraus !
Gruß
Thorsten *gähn
Angehängte Dateien:
OP
@Kriki

DDD2 bedeutet DataDirection Port D Bit 2

im Tutorial ist es mit Port B.

Da es bei mir Port D ist, sieht es etwas komisch aus, aber das
funktioniert einwandfrei.Darf nach dem umschalten nur keine Delay
Schleife aus meinem Programm benutzen, da sonst das umschalten zwar
funktioniert ( Nachgemessen ), aber das senden klappt nicht.

Thorsten
OP
@Rahul

Meintest Du das deswegen, da ich auch halbduplex beim RS485 habe,das
ich dieses TXC Bit auswerten sollte.

Zitat :

    Dieses Bit wird vom AVR gesetzt, wenn das im Sende-Schieberegister
befindliche Zeichen vollständig ausgegeben wurde und kein weiteres
Zeichen im Sendedatenregister ansteht. Dies bedeutet also, wenn die
Kommunikation vollumfänglich abgeschlossen ist.
    Dieses Bit ist wichtig bei Halbduplex-Verbindungen, wenn das
Programm nach dem Senden von Daten auf Empfang schalten muss. Im
Vollduplexbetrieb brauchen wir dieses Bit nicht zu beachten.
    Das Bit wird nur dann automatisch gelöscht, wenn der entsprechende
Interrupthandler aufgerufen wird, ansonsten müssen wir das Bit selber
löschen.

Gruß
Thorsten
OP
Wenn man noch nie mit dem Max485 gearbeitet hat , finde ich den Ausdruck
Hilfe zur Selbsthilfe doch ok. Habe immerhin nicht gesagt weiß nicht ,
kann mir das mal einer machen. Etwas Denkanstoß braucht der Mensch ab
und zu :-)

Gruß
Thorsten
Gast
Sers,
@ engineer
Etwas prinzipielles. Wenn du Daten periodisch austauschen möchtest
würde ich dir empfehlen die Anfrage des Masters über nen Timer zu
steuern. Im Slave und Master wertest du die empfangenen Daten über den
UART-Interrupt aus.
Habe mit dieser Methode schon ein Netzwerk mit ATMega8515 als Master
und bis zu 8 ATMega16 als Slave in einem Netzwerk betrieben.
Delay Funktion ist nix gut für diese Anwendung.
Ergo: Mit Timern und Interrupts arbeiten!
OP
Sicherlich, ich war auch schon weiter, da es aber plötzlich das Problem
des umschalten gab, habe ich alles wieder bis auf ganz simpel
zurückgebaut im Programm, um den Fehler des umschaltens heraus zu
bekommen.

Trotzdem Danke für den Tip.

Gruß
Thorsten

Antwort schreiben

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