PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Schnittstelle abhören



elkokiller
17.08.2006, 22:36
Hallo,

ich möchte mehrere Mega8 (Slave) über RS485 verbinden.
Auf jedem läuft ein eigenes Programm.

Bei einer Abfrage durch einen Master sollen verschiedene Zustände der einzelnen Slave rückgemeldet werden.

Mein Problem:

Wie kann ich für die Slave eine eigene Adresse festlegen und das existierende Programm so erweitern, dass parallel dazu die Schnittstelle "abgehört" wird und eine entsprechende Reaktion erfolgt?
Der Interrupt scheidet ja aus da ich nur RXD und TXD zur Verfügung habe.

Kann mir jemand helfen?

Tobias

Hanni
17.08.2006, 23:42
Das Stichwort lautet MCPM (Multi Processor Comunication Mode).
Im übrigen wird genau dort selbstverständlich der RX Complete Interupt benötigt.

Genaueres dazu findest du in den Datenblatt des ATmega 8.


Grüße,
da Hanni.

elkokiller
18.08.2006, 07:17
im Datenblatt kann ich leider nichts über Basic finden. Hast du vielleicht einen Beispielcode?

bertl100
18.08.2006, 15:43
enable interrupts
enable urxc
on urxc UARTINTERRUPT


UARTINTERRUPT:
.......
....... x=UDR

bertl100
18.08.2006, 15:46
Bei der neuen Bascomversion muß RS485 initialisiert werden.
Schau in der Hilfe nach

Config Print0 = Portd.4 , Mode = Set
Config Pind.4 = Output 'set the direction yourself

bertl100
18.08.2006, 15:48
Es gibt für RS485 ein eigenes Sample in Bascom.
Findest du unter MCS Electronics/Samples/RS485.bas

Hanni
18.08.2006, 18:17
Leite, ist euch schon mal der Gedanke gekommen, das RS485 nur den Bus, nicht das Protokoll darstellt ? Es mag zwar richtig sein, das die gängigen Tranceiver schon wissen wollen, ob man nun sendet oder empfängt, aber das ist ja wohl Pillepalle. Den einen Pin kann ich auch selber setzen, dafür brauch ich nicht ne extra lib.

@Bertl100:
Wie wäre es damit, den eigenen tread zu editieren, anstatt hier nen Triplepost hinzusetzen !!

@Elkokiller:
Natürlich wird in einem AVR Datenblatt, genau wie auch in Appnotes wohl nie Basic auftauchen. Dafür ist es schlicht und einfach zu wenig verbreitet und produziert zu aufgeblasenen Code.

Im Übrigen, wo bitte ist das Problem? Der MCPM Mode ist im Datenblatt selbst lediglich in seiner Funktion beschrieben. nicht im Code.
Bei richtiger Anwendung / Impletierung des ganzen, reagiert der µC Erst einmal nur auf die gesendeten Adressen und bei Übereinstimmung auch auf die folgenden Daten. Dafür muss man nunmal Bits schubsen.

Ein Codebeispiel könnte ich dir sicherlich liefern. Nur nicht in deinem geliebten Basic.

Grüße,
da Hanni.

bertl100
19.08.2006, 10:55
@Hanni:
Ich weis nicht wieso, aber das manuelle setzen des Richtungspins hat bei mir nicht funktioniert. Mit der lib aber schon.
Wenn du unbedingt bei 50 UART-Ausgaben den Pin setzen willst, so ist das deine Sache. Warum gibt es diese lib eigentlich. Damit sich Leute wie du aufregen können uns sagen"Das kann ich auch selber machen".
Dann können wir ja alle gleich in Assambler arbeiten.


edit:
sorry für den Tripplepost. Das Mausrad ist manchmal sehr schwergängig.

Hanni
19.08.2006, 11:30
Wenn du unbedingt bei 50 UART-Ausgaben den Pin setzen willst, so ist das deine Sache. Warum gibt es diese lib eigentlich. Damit sich Leute wie du aufregen können uns sagen"Das kann ich auch selber machen".
Dann können wir ja alle gleich in Assambler arbeiten.


Nuja, auch in Assembler kann ich mir meine Subroutinen so schreiben, das cih eigentlich nur den String an diese Routine Übergebe, diese kümmert sich dann um den Rest.