Serielle Übertragung ?!

dg2ygq

Neues Mitglied
23. Juli 2007
239
0
0
Bielefeld
Sprachen
Ich hab da ein Gerät, welches ich seriell Daten übermitteln will.
Nun mag dieses Gerät aber Start- und Stopbits haben.

Kann mir mal jemand auf die Sprünge helfen, wie ich nen Code dafür in Bascom schreiben kann?

Im Anhang der Ausschnitt aus dem Manual des Gerätes.
 

Anhänge

  • y-cat.jpg
    y-cat.jpg
    68,1 KB · Aufrufe: 21
Hallo dg2ygq,

einfach Print Byte ;
Bascom macht automatisch Startbit und Stopbit, so wie es dein Plan will.

SickBoy
 
Bzw allgemeiner gesprochen: Über U(S)ART übertragen. Ein U(S)ART Telegramm besteht aus Starbit, Daten, Paritäts- und Stopbit.
Link: http://upload.wikimedia.org/wikipedia/de/d/de/RS-232_timing.png

Zumindest reicht es bei C in das entsprechende Register zu schreiben und das Senden als UART Zeichensatz geschieht automatisch :)
 
Hallo Michael,

ich kann mich zunächst SickBoy nur anschließen. Einfach die RS232 konfigurieren und Daten mit Print an das Device senden.

Einige Hinweise habe ich aber noch welche Du Dir ansehen solltest:

1. Verwendest Du die HW-RS232 oder die SW-RS232

2. Standardmäßig hängt Dir BASCOM bei einem Print immer CR/LF (Zeilenvorschub) an. Wenn Du das nicht möchtest weil es das zu steuernde Gerät stört dann musst Du hinten ein Semikolon anhängen.

3. Bei einem SW-Uart nimmst zu besser nicht den Print sondern den SEROUT. Schau Dir den mal in der BASCOm-Hilfe an. Ok ok, PRINT geht schon auch :p

4. Mach Dir Gedanken darüber ob das Gerät was Du steuern möchtest auch Antworten schickt oder ob es nur dumm "zuhört" Ggf. solltest Du Dir Gedanken über einen Daten-Empfangs-Buffer machen so dass Dir keine Daten verloren gehen, wenn das Ding zu beliebigen Zeiten antwortet. Denn vermutlich möchtest Du in Deinem Code ja noch etwas anderes machen als die RS232 zu bedienen.

Grüße,
Markus
 
Erst mal ein Dankeschön für die Antworten.
Ich bin aber noch nicht dazu gekommen das zu probieren :eek:

Ja doch Markus, das Ding hört nur stumpf zu, und soll dann das tun was ich erwarte, und das ohne Antwort oder Widerspruch :D
Mit einem SW-RS232 bin ich sicher besser bedient, da kann ich mir ja die Portpins aussuchen wie ich mag.

Muss ich dann jedes Byte einzeln mit Print bzw Serout ausgeben, oder kann ich die 5 Bytes auch in ein Paket packen?
 
Hallo Micha,

Du kannst die 5 Byte mit einem Print bzw. Serout schreiben. Ich bin mir aber sicher, dass Du mit einer SW-RS232 schlechter bedient bis. Ganz klar, die PIN's stehen fest aber dafür macht der Controller den Rest für Dich selbst via HW und das Programm muss sich nicht um Timing usw. kümmern. Das würde ich mir schon sehr sehr gut überlegen. Nur in der Not, wenn die HW-RS232 belegt ist und Du die PIN's nicht anderweitig "umschiften" kannst würde ich auf SW setzen. Ich gebe prinzipiell HW den Vorrang!

Grüße,
Ma
 
Geht nicht :mad:
Ich hab denn mal HW genommen, beim Mega16 ist TXD = PinD1, hoffe ich.

Hier mein Proggy:

$regfile = "m16def.dat"
$crystal = 16000000
$baud = 4800

Dim A As Byte
Dim B As Byte
Dim C As Byte
Dim D As Byte
Dim E As Byte

A = &H00
B = &H00
C = &H00
D = &H00
E = &H07

Do

Wait 2
Print A ; B ; C ; D ; E ;

Loop

End
Ist das "Example: to step up 500kHz"
Das Display der Gerätes wird beim Datenempfang kurz etwas heller, drum gehe ich davon aus dass zwar Daten ankommen, aber nix damit anfangen kann.

Hier ist die Dokumentation des Gerätes als pdf, auf Seite 11 und 12 (9 / 10) gehts um die Serielle Übertragung:
http://home.arcor.de/dg2ygq/FT757GX_serv.pdf

Schaut doch mal, Vielleicht hab ich auch nur einfach ne Kleinigkeit übersehen?!
 
Haaaaaa :D
Statt Print einfach Printbin genommen, und schon fluppts ....

Jetzt muss ich nur noch heraus bekommen, wie ich die 4 Bytes für die Frequenz am gechicktesten zusammen bastle, damit ich sie vernünftig in eine Tabelle bekomme :confused:

In der Tabelle möchte ich feste Frequenzen ablegen, nur wenn ich jetzt zB 28,000 haben möchte, müsste ich ja 4 Bytes ablegen : 02 80 00 00. Ist sehr umständlich sowas, muss doch auch irgendwie einfacher gehen ?!
 
Hi Michae,

war das nun eine konkrete Frage oder von Dir nur laut gedacht?
Brauchst Du die Frequenz in der Tabelle nur für die Ausgabe oder willst Du auch och was anderes damit machen?

Prinzipiell ist es so, dass Du auch Signle oder Double printen kannst. Habe ich auch schon gemacht und dann kannst Du Dir das drum herum schenken.

Dein Problem mit PRINTBIN verstehe ich aber zusätzlich nicht. Bei mir funktioniert es nämlich auch mit dem originalen von Dir abgebildeten Code.

Das einzige Problem was ich mir vorstellen könnte ist das Senden einer logische NULL. NULL ist in der Regel die String-Ende-Kennung. Eventuell hast Du damit probleme aber dan sollte es bei mir ja auch nicht funktionieren.

Grüße,
Markus
 
War laut gedacht :p

Ich habe mir da eine Tabelle im Word-Format gemacht:
Code:
~~~~~~~~~~~
dim B as Word
~~~~~~~~~~~
A = &H00
C = &H02
D = &H0A
~~~~~~~~~~~
Ausgabe:

   B = Lookup(kanal , Freq)
   Printbin A ; B ; C ; D ;
~~~~~~~~~~~

Freq:
Data &H6955% , &H6965% , &H6975% , &H6985% , &H7005% , &H7015% , &H7025% , &H70.....

Variable A bleibt immer 00 (xxx.xxx.00 MHz)
Vraiable C bleibt immer 02 (02x.xxx.xx MHz)
Variable D bleibt immer 0A (Steuerbefehl für Frequenz)

Variable B habe ich in einer Tabelle abgelegt (x.xxx. MHz)
(Wobei mir immer noch unklar ist, was das % am Ende jeder Data zusuchen hat)

Wieso funktioniert das bei dir, Markus? Wo hast denn du so schnell eine Yaesu her :confused:
Mit Print funktioniert es eindeutig nicht. Ich übertrage doch die Variablen nicht als (Ascii-)Text ?! Versteh ich hier auch nicht, wo der Unterschied zwischen Print und Printbin ist!

Bei diesem Projekt bin ich mal von der für mich typischen 2-Stelligen 7-Segmentanzeige auf ein 20*2 LCD-Display gegangen.
Ich glaub das muss ich noch ein wenig üben ....
Kann man bei solchen Displays auch nur die Upper- oder Lowerline löschen? CLS bewirkt ja eine komplett Reinigung.
Ach ich merk schon, wird nen anderes Thema, sollt ich mal nen neuen Thread für eröffnen ...

Micha
 
Hallo Micha,

alsooo, das % am Ende der Daten in Deiner Tabelle geben an, dass es sich bei Deinen Daten um Word bzw. integer handelt. Damit werden im Speicher jeweils 2 byte pro Datenwert reserviert. Wenn Du Das % weg läßt dann sind es nur 1 Byte.

Die Hilfe zu BASCOM sagt hier:
Integer and Word constants must end with the %-sign.


Dann zum Test:
Ich habe es nicht mit Yaesu probiert denn so schnell bin ich dann doch nciht. Ich habe es
1. in der BASCOM SIMU
2. auf meinem STK500 mit Mega16 probiert.

Ich wollte einfach sehen ob prinzipiell etwas falsch läuft den in der Theorie sieht manches anders aus als in der Praxis.


Dann zu Print:
Prinzipiell arbeiten PRINT und PRINTBIN gleich. Sie geben Daten auf einer Datei oder der RS232 aus. Der uNterschied zwischen beiden Befehlen liegt im Detail. PRINTBIN arbeitet genau so wie PRINT CHR(var);. Dabei werden nicht automatisch CR+LF hinzugefügt und es wird auch die String-Ende-Kennung nicht ausgewertet, welche durch &H00 repräsentiert wird.
Deshalb meinte ich in meinem letzten Beitrag, dass ich vermute, dass es eben damit zusammenhängt.
Zur Erläuterung: Das Ende eines String welcher zunächst "beliebig" lang sein kann wird mit &H00 = NULL gekennzeichnet. Damit weiß der Rechner, wann der String zuende ist. bedeutet, ein String mit 10 Zeichen hat immer noch an Position 11 eine &H00. Da Du das geziehlt mit Print gesendet hast gehe ich davon aus, dass bei Print die &H00 nicht als NULL sondern als Ende gewertet wird und Du dann auch nix auf der Leitungs siehst weil nix ausgegeben wird.


Dann zur Frage mit CLS:
Schau Dir dazu bitte die Hilfe von BASCOM zum CLS-Befehl an. Mit dem CLS Y, X1 , X2 sollte es möglich sein eine einzelne Zeile zu löschen. Ich habe es aber noch nie probiert.


Grüße,
Markus
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)