mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MAX 485 Problem beim umschalten


Autor: The Engineer (the_engineer)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: The Engineer (the_engineer)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du solltest das TXC-Bit auswerten, wenn du mit rs485 arbeitest.
Guck mal ins Datenblatt, was es damit auf sich hat. (ich weiß es...)

Autor: Christian Schoch (kriki)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
DDRD = (1 << DDD2); // Datenrichtung als Ausgang

Was isn DDD2 ?

Autor: The Engineer (the_engineer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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

Autor: The Engineer (the_engineer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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

Autor: The Engineer (the_engineer)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
So mit der TXC Änderung klappt es jetzt.

Danke !

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nennt man sowas nicht "Hilfe zur Selbsthilfe?"

Autor: The Engineer (the_engineer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So verstehe ich die "Arbeit" im Forum...

Autor: Bobby McFerrin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: The Engineer (the_engineer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Mathias Imming (methi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
abo

Autor: The Engineer (the_engineer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Methi

Sehe gerade das Du abo hast. Womit kann ich Dir helfen ? Umschaltung
und Ping Pong der Daten mit RS-485 Protokoll ist fast laufähig.

Gruß
Thorsten

Autor: Mathias Imming (methi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://www.mikrocontroller.net/forum/read-1-307453...

schaun sie da, ähnliches problem... für das projekt sammle ich halt
alle infos, die ich finde... und da ich mit MC noch wenig Erfahrung
habe, verschlinge ich solch ein material natürlich :)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.