Forum: Mikrocontroller und Digitale Elektronik Bascom open Befehl Verständnissproblem


von Frank J. (jaeko01)


Lesenswert?

Hallo Forum,
ich habe arge Probleme den Open Befehl von Bascom zu verstehen.
Wenn ich das Beispiel von Bascom versuche zu verstehen geht bei mir das 
Licht aus.

Hier der Beispielcode:

Dim B As Byte

'Optional you can fine tune the calculated bit delay
'Why would you want to do that?
'Because chips that have an internal oscillator may not
'run at the speed specified. This depends on the voltage, temp etc.
'You can either change $CRYSTAL or you can use
'BAUD #1,9610
'In this example file we use the DT006 from www.simmstick.com
'This allows easy testing with the existing serial port
'The MAX232 is fitted for this example.
'Because we use the hardware UART pins we MAY NOT use the hardware UART
'The hardware UART is used when you use PRINT, INPUT or other related 
statements
'We will use the software UART.

Waitms 100

'open channel for output

Open "comd.1:19200,8,n,1" For Output As #1
Print #1 , "serial output"

'Now open a pin for input

Open "comd.0:19200,8,n,1" For Input As #2

'since there is no relation between the input and output pin
'there is NO ECHO while keys are typed

Print #1 , "Number"

'get a number

Input #2 , B

'print the number

Print #1 , B

'now loop until ESC is pressed
'With INKEY() we can check if there is data available
'To use it with the software UART you must provide the channel

Do
  'store in byte

  B = Inkey(#2)

  'when the value > 0 we got something

  If B > 0 Then

    Print #1 , Chr(b)                      'print the character

  End If
Loop Until B = 27

Close #1
Close #2

End

Wenn ich mir die Zeilen Open "comd.1:19200,8,n,1" For Output As #1 und
Open "comd.0:19200,8,n,1" For Input As #2 anschaue verstehe ich die 
Syntax nicht. Einmal spricht man von channel for output und dann open a 
pin for input. Warum ??? Wieso nicht nur channel oder pin.

Hat bei mir mit einem Max233 und einem Terminalprogramm zwar 
funktioniert und das auch noch mit nur Masse und RX. Versthe ich nicht. 
Als ich dann TX verbunden hatte ging nichts mehr. Konnte, ohne TX 
verbunden zu haben, Text und Zahlen mit dem Terminalprogramm senden und 
bekam das gleich zB."123" dann als empfangene Daten zurück.
Vieleicht kann mir das einer von Euch erklären damit ich das auch 
verstehe.

Gruß Frank

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Frank Jakob schrieb:
> Wenn ich mir die Zeilen Open "comd.1:19200,8,n,1" For Output As #1 und
> Open "comd.0:19200,8,n,1" For Input As #2 anschaue verstehe ich die
> Syntax nicht.

Und die Beschreibung http://avrhelp.mcselec.com/index.html?open.htm 
hast Du Dir auch schon angesehen?

Da wird eine Software-UART auf den Portpins D0 (TxD) und D1 (RxD) 
konfiguriert.

Wo ist das Problem?

von Sebastian R. (Gast)


Lesenswert?

Bascom emuliert hier eine serielle Schnittstelle für Input und Output.
Funktionell betrachtet also einen Eingangskanal und einen Ausgabekanal 
(Channel).
Physisch betrachtet werden 2 Pins konfiguriert.
Beide haben miteinander nichts zu tun.

von Frank J. (jaeko01)


Lesenswert?

Hallo Rufus,
genau das ist ja das Beispiel was ich meine.
Ich verstehe nicht warum man einmal von Channel und einmal von Pin 
redet.
Den Unterschied den ich sehe ist "For outout as #1" und "For input as 
#2" und comd.1 ...... comd.0..... .

Gruß Frank

von Frank J. (jaeko01)


Lesenswert?

Hallo Sebastian,
genau das, warum dann einmal Channel und einmal Pin ???.
Wäre ja das selbe, dann könnte man doch auch nur Pin oder
nur Channel sagen. Liege ich da richtig ?.

Gruß Frank

von Sebastian R. (Gast)


Lesenswert?

Frank Jakob schrieb:
> Hallo Sebastian,
> genau das, warum dann einmal Channel und einmal Pin ???.
> Wäre ja das selbe, dann könnte man doch auch nur Pin oder
> nur Channel sagen. Liege ich da richtig ?.
>
> Gruß Frank

Das selbe. Weil jeder Channel auf ein Pin geführt wird. In deinem 
Programm sprichst du aber nicht aktiv den Pin an (z.B: Out PortD.0 xyz), 
sondern mit dem Kanal "Input #2" . Das # steht für den Kanal (Channel) 
der mit dem Pin verknüpft ist.

Völlig unkompliziert.

von Frank J. (jaeko01)


Lesenswert?

Hallo Sebastian,
das ist nicht mein Prorgamm sonder das Beispielprogramm von Bascom.
Will mich ja nicht mit fremden Federn schmücken.
Also, heist das für mich, ich lege mit comd.1 ...... zB. den Pin, der 
das auch kann und dann mit #1 den Kanal fest, richtig.
Wenn das so ist habe ich das verstanden.

von Sebastian R. (Gast)


Lesenswert?

Frank Jakob schrieb:
> lso, heist das für mich, ich lege mit comd.1 ...... zB. den Pin, der
> das auch kann und dann mit #1 den Kanal fest, richtig.

Jain. Vielleicht etwas ungeschickt formuliert.

Frank Jakob schrieb:
> Open C As #1
> Print #1 , "serial output"

Heißt: die "Funktion" '"comd.1:19200,8,n,1" For Output' wird mit in 
Zukunft nur noch mit "#1" "aktiviert".

ZB  leitet der Aufruf 'Print #1 , "serial output"' den String "serial 
output" auf den Kanal "#1" um und gibt ihn seriell aus.

Praktisch wird auf "#1", was vorher mit '"comd.1:19200,8,n,1" For 
Output'  definiert wurde, der Text "serial output" ausgegeben.

Vorteil gegenüber der Hardware UART ist, dass du mehrere Kanäle "öffnen" 
kannst. Diese werden dann durch dich nummeriert. Also #1, #2, 
#3,..#??(weiß grad nicht wo da die Grenze ist).
Und jeder Kanal kann mit einer anderen Baudrate eingestellt werden und 
Eingang oder Ausgang sein.

von Sebastian R. (Gast)


Lesenswert?

Noch was.
Da es sich um Software UART handelt, kann jeder Pin dafür benutzt 
werden.
Kannst also 3 Ports voll mit Inputs oder Outputs machen.
Bedenke nur, dass die Ressourcen irgendwann mal knapp werden.

Beispiel:

Open "comA.0:19200,8,n,1" For Input As #1      'Rx1
Open "comA.1:19200,8,n,1" For Input As #2      'Rx2
Open "comA.2:19200,8,n,1" For Input As #3      'Rx3
Open "comA.3:19200,8,n,1" For Output As #4     'Tx1


Do
Input #1,A
Input #2,B
Input #3,C

Print #4, A
Print #4, B
Print #4, C

Loop

Damit kann z.B. ein µC Serielle Daten verschiedener Quellen einlesen und 
an einen zweiten µC übertragen, der sich dann um die Verarbeitung und 
Ausgabe kümmert.

von Frank J. (jaeko01)


Angehängte Dateien:

Lesenswert?

Hallo Forum,
habe weiter große Schwiriegkeiten das mit dem Openbefehl.
Grundeinstellen im/am uC:

$regfile = "m2560def.dat"
'$framesize = 32
'$swstack = 32
'$hwstack = 32
$crystal = 16000000

Mit dem Openbefehl, wie oben schon mal genannt, geht das mal und mal 
nicht.
Auf dem Terminalprogramm wird mal was ausgegeben und mal nicht.
Habe das mit der Verbinung über Soft-UART und MAX233 gemacht. Ich habe 
mich auch nach dem PIN-Mapping gerichtet. Poste dafür noch was.
Ich benutze einen Labtop der keine RS232 hat, habe mir dafür einen 
USB-RS232
Umsetzer gekauft. Im Gerätemanager wird der uC und der RS232 Umsetzer 
korrekt angezeigt. Was mich auch noch wundert ist, dass ich die uC 
Platine mit nur einer Leitung verbinde (an Rx2, PIN-17) und es wird mir 
dann mal was angezeigt, wenn ich die zweite Leitung verbinde (an Tx2, 
PIN-16 ) dann geht nichts.
Openbefehl dafür ist:

Open "comh.1:19200,8,n,1" For Output As #1
Print #1 , "serial output"

Open "comh.0:19200,8,n,1" For Input As #2
Print #1 , "Number"

Warum funktioniert das mal und mal nicht. Ich weiss nicht mehr weiter.
Vieleicht liegt das ja an den Einstellung für die uC-Platine.

Gruß Frank

von Frank J. (jaeko01)


Lesenswert?

Hallo Forum,
hat denn keiner von Euch eine Idee.
Gruß Frank

von Hannes L. (hannes)


Lesenswert?

Frank Jakob schrieb:
> hat denn keiner von Euch eine Idee.

Ich nutze Hardware-UART der AVRs nur per Direktzugriff auf die Register. 
Und das in Bascom genauso wie in Assembler. Wie das geht, steht im 
Datenblatt der AVRs.

Frank Jakob schrieb:
> $regfile = "m2560def.dat"

Mir reichen allerdings kleinere Controller ohne A...-Logo.

...

von Paul Baumann (Gast)


Lesenswert?

Mach mal den kleinen 1µF Elko zwischen 7 und 6 noch dran. Das muß es
nicht sein, aber möglich ist alles Mögliche.
;-)

Der Kontroller hat doch auch eine "reale" serielle Schnittstelle. Da
kannst Du doch mal probieren, ob es an dem "Open-Kram" liegt, oder
eine andere Ursache besteht, indem Du mit dem "Print"-Befehl drauf
zugreifst.

Zu guter Letzt: Ich hatte hier so ein Dreckding von USB/RS232_Adapter,
was mittendrin grundlos die Übertragung unterbrach. Das ist zwischen
den Schraubstockbacken gelandet und richtet keinen Ärger mehr an....

MfG Paul

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.