Forum: Mikrocontroller und Digitale Elektronik Bascom und RS485 Problem


von Andreas S. (linux)


Angehängte Dateien:

Lesenswert?

Hallo, ich hoffe ich finde hier Hilfe. Bei meinem jetzigen Problem bin 
ich trotz 2 monatiger Recherche  in einer Sackgasse gelandet. Folgendes 
vorab geschildert : Ich habe einen Mega8 mit angeschalteten MAX232 und 
nachgeschalteten Max481 (RS485 BUS). Der Max 481 (Pin 2+3 auf Low) 
befindet sich permanent im Sendemodus. Die Taktfrequenz für den Mega8 
ist ein 14,7456Mhz Oszillator wegen der  0% Fehlerquote bei Serieller 
Datenübertragung. Die Baudrate beträgt 9600 Baud. Zum Test der RS485 
Verbindung verwende ich einen RS485 auf RS232 Konverter der direkt mit 
der seriellen Schnittstelle meines PCs verbunden ist. Als Testsoftware 
auf meinem PC verwende ich HTERM. Sende ich nun Daten per Print Befehl 
--  Print Chr(02) ; "Hier meine Daten an die Kamera" ; Chr(03)  (Info: 
ASCII 02 ist Stx und ASCII 03 ist Etx)  empfängt HTERM die Daten Korrekt 
und Sauber. Am selben RS485 Bus hängt auch eine steuerbare Kamera mit 
dran, die ich vom Mega8 aus steuern möchte. Die Kamera zeigt jedoch 
keine Reaktion. Sende ich aber mit HTERM dieselben  Daten zurück an 
meinen RS485 BUS reagiert  die Kamera. WARUM ??? Kenntnis: Meine 
Schaltung sowie meine RS485 Verbindung (zumindest vom Mega8 zum PC) 
funktioniert. Das Datenpaket ist korrekt, da ich ja vom PC aus die 
Kamera damit ansprechen kann. Wieso lässt sich vom Mega8 die Kamera 
nicht über RS485 ansprechen ????  Ich bitte um Hilfe da ich mittlerweile 
schon davon träume. Wer hat noch eine Idee ?  Vielen Dank für jede 
Anregung schon mal.

von STK500-Besitzer (Gast)


Lesenswert?

Gibt es zu der Kamera bzw. deren Protokoll auch Unterlagen?

>Der Max 481 (Pin 2+3 auf Low)befindet sich permanent im Sendemodus.
Und wenn die Kamera irgedwas zurücksenden will?
Bei der RS485-Übertragung muss man das TXC-Flag des UART auswerten.

von Andreas S. (linux)


Lesenswert?

Hallo, vielen Dank für die Info. Es handelt sich um eine Panasonic 
Kamera mit dem New Panasonic Protokoll. Der Aufbau sieht so aus: 
>STX<ADxx;GC7:yyyyyyy>ETX<   xx=die Kameraadresse und yyyyyyy=den zu 
sendenden Befehl. Ich habe mit VisualBasic 2008 ein kleines Programm 
geschrieben, welches mir die Kamera steuert. Das Programm funktioniert 
obwohl ich auch nur Daten sende und keine Empfangsdaten auswerte. Die 
Daten sende ich in meinem VB-Programm ebenfalls als String, genauso wie 
von meinem Mega8 aus. Von VB funktioniert es vom Mega8 nicht mehr obwohl 
die mitgeloggten Daten exakt übereinstimmen.
Das TXC-Flag soll Später mit ausgewertet werden. Bis jetzt gibt es aber 
nur meinen Sender und EINEN Empfänger, somit denke ich ist das TXC-Flag 
vorerst nicht relevant. Es ist mir ein Rätsel.

von Weingut P. (weinbauer)


Lesenswert?

tja, Du sendest zwar mit dem PC nix anderes, aber du lässt mit dem
Mega den Bus nicht mehr frei im Gegensatz zur PC-Ansteuerung.
Möglich dass die Kamera das merkt.
Daher ist Config Print (Bascom -> Hilfe -> Suche) Dein Freund.
Auch möglich, dass vom PC die Daten nicht so aus der Kanone geschossen 
kommen wie vom ATMega, der die Bytes doch sehr akkurat aneinander
reiht. Eventuell mal mit n paar Millisekunden zwischen den Bytes 
probieren.

ach so:

Print Chr(02) ; "AD01;GC7:9030001" ; Chr(03)
 kann man machen, ich machs anders:

Print "{002}AD01;GC7:9030001{003}"

von Andreas S. (linux)


Lesenswert?

@Fhutdhb Ufzjjuz  ich danke dir für den Tip. Du hast mich direkt mit der 
Nase darauf gestoßen. Ich habe es so gelöst (Vielleicht habe ich damit 
auch eine/n Andere/n helfen können)

$regfile = "m8def.dat"
$crystal = 14745600
$baud = 9600

Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 2 , 
Databits = 8 , Clockpol = 1
Config Serialout = Buffered , Size = 18

Enable Interrupts

Dim Puffer(18) As Byte


Usart_tx Alias Portd.1
Config Usart_tx = Output

Puffer(1) = &H02
Puffer(2) = "A"
Puffer(3) = "D"
Puffer(4) = "0"
Puffer(5) = "1"
Puffer(6) = ";"
Puffer(7) = "G"
Puffer(8) = "C"
Puffer(9) = "7"
Puffer(10) = ":"
Puffer(11) = "9"
Puffer(12) = "0"
Puffer(13) = "3"
Puffer(14) = "0"
Puffer(15) = "0"
Puffer(16) = "0"
Puffer(17) = "1"
Puffer(18) = &H03

Do
Ucsrb.txen = 0
Usart_tx = 0
Waitus 200
Usart_tx = 1
Ucsrb.txen = 1
Waitms 2000                     'Evtl anpassen.

Printbin Puffer(1);
Loop

End
' Es muss halt noch eine Flussteuerung für den Max481 mit eingebaut 
werden;
' Der nach dem Sendevorgang einfach den Max481 auf Low schalten und den
' 485 Bus frei gibt, da sonst keine anderen Teilnehmer senden können

Linux

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.