www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Bascom und RS485 Problem


Autor: Andreas S. (linux)
Datum:
Angehängte Dateien:

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

Autor: STK500-Besitzer (Gast)
Datum:

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

Autor: Andreas S. (linux)
Datum:

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

Autor: Weingut Pfalz (weinbauer)
Datum:

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

Autor: Andreas S. (linux)
Datum:

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

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.