wurm
16.07.2007, 21:28
Hallo,
ich bin im Moment ein bißchen am Verzweifeln. Irgendwie bekomme ich das mit der Buskommunikation auf dem 485-Bus nicht richtig hin.
Und da dieses ein super Forum ist, stelle ich hier mal meine Frage:
Ich habe eine Master-Steuerung, die 2 Slave´s ansprechen soll, die dann eine Antwort geben.
Das ganze ist über einen 485 Bus verbunden. Hierbei muss ich zwischen senden und empfangen umschalten.
Der Master (Atmege128) wird mit Bascom programmiert und so sieht der Code aus:
' Kommunikation
'Software UART 2
Open "comd.2:19200,8,n,1" For Input As #2
Open "comd.3:19200,8,n,1" For Output As #3
Tastendruck:
Set Busrxtx ' 485 Bus auf senden
'Print #3 , chr(100) ' Slave1 ansprechen
'Reset Busrxtx '485 Bus auf empfangen
'Slave1_in = Inkey(#2) ' Slave1 antwort holen
'Set Busrxtx ' 485 Bus auf senden
'Print #3 , Chr(101) ' Slave2 ansprechen
'Reset Busrxtx '485 Bus auf empfangen
Slave2_in = Inkey(#2) ' Slave2 antwort holen
'Abfragen
if Slave1_in = 001 then gosub Vorwärts
.....
goto Tastendruck
Bei den Slave´s ist ein Pic16F873a im Einsatz. Diesen habe ich mit PicBasic programmiert. Der Code sieht dabei folgendermaßen aus.
' Definitionen
define osc 4
include "modedefs.bas"
DEFINE HSER_RCSTA 90h
DEFINE HSER_TXSTA 24h
DEFINE HSER_BAUD 19200 ' 19200 Bauds
DEFINE HSER_CLOERR 1
Bus_out var byte
Bus_out_alt var byte
zaehler var word
Bus_in var Byte
busrw var portc.5
output portc.5
Schleife:
low busrw 'Slave auf empfang
HSERIN [Bus_in]
if Bus_in = 101 then 'Slave soll Antworten //100 für Slave1 //101 für Slave2
high busrw 'Slave auf senden
HSEROUT [Bus_out] 'Variable Bus_out ausgeben (Anweisungen von Sensoren)
low busrw 'Slave auf empfangen
endif
goto Schleife
Irgendwie erkennt der Pic nicht, dass er angesprochen wird.
Hat jemand eine Idee, was ich an dem Code ändern sollte, damit es funktionieren kann?
Mfg,
Thorsten
ich bin im Moment ein bißchen am Verzweifeln. Irgendwie bekomme ich das mit der Buskommunikation auf dem 485-Bus nicht richtig hin.
Und da dieses ein super Forum ist, stelle ich hier mal meine Frage:
Ich habe eine Master-Steuerung, die 2 Slave´s ansprechen soll, die dann eine Antwort geben.
Das ganze ist über einen 485 Bus verbunden. Hierbei muss ich zwischen senden und empfangen umschalten.
Der Master (Atmege128) wird mit Bascom programmiert und so sieht der Code aus:
' Kommunikation
'Software UART 2
Open "comd.2:19200,8,n,1" For Input As #2
Open "comd.3:19200,8,n,1" For Output As #3
Tastendruck:
Set Busrxtx ' 485 Bus auf senden
'Print #3 , chr(100) ' Slave1 ansprechen
'Reset Busrxtx '485 Bus auf empfangen
'Slave1_in = Inkey(#2) ' Slave1 antwort holen
'Set Busrxtx ' 485 Bus auf senden
'Print #3 , Chr(101) ' Slave2 ansprechen
'Reset Busrxtx '485 Bus auf empfangen
Slave2_in = Inkey(#2) ' Slave2 antwort holen
'Abfragen
if Slave1_in = 001 then gosub Vorwärts
.....
goto Tastendruck
Bei den Slave´s ist ein Pic16F873a im Einsatz. Diesen habe ich mit PicBasic programmiert. Der Code sieht dabei folgendermaßen aus.
' Definitionen
define osc 4
include "modedefs.bas"
DEFINE HSER_RCSTA 90h
DEFINE HSER_TXSTA 24h
DEFINE HSER_BAUD 19200 ' 19200 Bauds
DEFINE HSER_CLOERR 1
Bus_out var byte
Bus_out_alt var byte
zaehler var word
Bus_in var Byte
busrw var portc.5
output portc.5
Schleife:
low busrw 'Slave auf empfang
HSERIN [Bus_in]
if Bus_in = 101 then 'Slave soll Antworten //100 für Slave1 //101 für Slave2
high busrw 'Slave auf senden
HSEROUT [Bus_out] 'Variable Bus_out ausgeben (Anweisungen von Sensoren)
low busrw 'Slave auf empfangen
endif
goto Schleife
Irgendwie erkennt der Pic nicht, dass er angesprochen wird.
Hat jemand eine Idee, was ich an dem Code ändern sollte, damit es funktionieren kann?
Mfg,
Thorsten