PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Max485 / Bascom Grundlagen



Elkokiller07
11.09.2006, 11:00
Hallo,

ich möchte mir mit Max485 und Atmega 8 ein kleines Netzwerk aufbauen.
Leider bin ich noch zimlicher Leihe was die Programmierung in Bascom angeht.
Meine Frage:
Entgegen einem RS232 Bus besteht bei einem max485 die Möglichkeit, bei einer Übertragung auf dem Bus, einen Interrupt auszulösen.
Ich habe gehört dass es von der Bascom version abhängig ist, wie ich den Interrupt als Eingang benenne. Ist das richtig?
Kann ich den selben Interrupt den ich als Melder für Busaktivitäten nutze auch als Ausgang genutzt werden um den Bus zu belegen und etwas zu senden?

Danke schon mal im Vorraus für eure Antwort(en)

linux_80
11.09.2006, 13:31
Hallo,
der AVR an sich kann ja kein RS485, dieses wird meistens an den UART gehängt, und ein paar weitere Ports um die Richtung auszuwählen.
Wenn der AVR nix versendet, würde ich den 485 auf Eingang stellen, und kann dann einen IRQ erzeugen lassen bei jedem Zeichen, das über den RS485 bzw. UART kommt, man muss das ja sowieso erst auswerten ob man gemeint ist.
Wird also alles über die UART geregelt.

Oder meinst Du mit IRQ eine extra Leitung, die zum Entsprechenden RS485-Teilnehmer führt, ist dann aber unabhängig vom RS485 ?

Elkokiller07
11.09.2006, 14:42
Ja, ich möchte den Uart sowohl zum Abhören der Leitung nutzen als auch zum ansteuern des MAX485 um dann etwas zu senden.
Hast du dafür vielleicht ein Beispiel?

bertl100
11.09.2006, 17:21
nimm doch einfach den URXC Interrupt.
Der wird ausgelößt, wenn ein Byte im USARtpuffer drin ist.

Vitis
11.09.2006, 21:00
Ich glaub bei elkokiller ist da etwas verwirrt worden.
nicht der Max485 löst den Interrupt aus.
Der Max485 ist wie auch der Max232 nichts anderes als ein Schnittstellenbaustein, der für sich genommen dumm ist.
Der 485 bekommt durch Steuerleitung gesagt sende oder empfange,
beides gleichzeitig geht nicht, im Gegensatz zur RS232-Übertragung.
Man nennt sowas auch Halbduplexbetrieb.

Die rs485-Übertragung ist etwas knifflig insgesamt, es kommt sehr aufs Timing an. Die Datenrichtung wird ja wie beschrieben vom AVR bestimmt. Wichtig ist nun, das die Datenrichtung nicht von senden auf empfangen geschaltet wird während die uart noch Daten sendet. Du kannspert für die Ausgabe über UART den PRINT-Befehl benutzen oder auch einfach UDR=Byte setzen, aber, die Übertragung selbst läuft dann je nach Baudrate noch ne ganze Weile weiter, in welcher die 485 noch auf Senden stehen muß, damit die Daten ganz beim Empfänger ankommt. Dafür kannst Du den UTXC-Interrupt benutzen. Der wird ausgelöst wenn die Übertragung komplett ist.

chr-mt
12.09.2006, 06:21
[quoete]die Übertragung selbst läuft dann je nach Baudrate noch ne ganze Weile weiter, in welcher die 485 noch auf Senden stehen muß[/quote]
Genau darüber bin ich auch schon mal gestolpert ;)
Wenn man's nicht weiß, sucht man sich kaputt ;)
Ich nehme mal an, daß es die 2-Byte Hardware TXD-Buffer des AVRs sind,
die das verursachen ?
Ich warte jetzt einfach etwas, eben etwa 2 Byte lang, mit dem Umschalten und so klappt's auch ohne Interrupt.

Gruß
Christopher

Vitis
12.09.2006, 10:55
ich habs dann so gemacht,

on utxc puffer_leer
enable utxc
enable interrupts


puffer_leer:
waitus 7
portb.0 = 0 ' (Pin für Senderichtungumschaltung)
return
end

ok, ne Warteschleife hab ich auch drinne, aber das sind nur n paar zyklen, das geht noch. ich möcht den µC nicht 100 Milisekunden rumgammeln lassen, der wird gefälligst fürs Arbeiten bezahlt ... nix da Zigarettenpause ;)

(Ein Glück sind die Dinger nicht gewerkschaftlich organisiert, sonst hätt ich jetzt nen Generalstreik am Hals)