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
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?
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.
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
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
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.
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.
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.
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.
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
Hallo Forum, hat denn keiner von Euch eine Idee. Gruß Frank
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. ...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.