Bascom serielle Configuration/ Serialin Inkey() Waitkey() Ischarwaiting() - Verständnisfrage

spelli

Neues Mitglied
12. Nov. 2011
68
0
0
Sprachen
Hallo,

ich versuche mich jetzt schon sehr stark mit dem UART.

Dazu habe ich eine Frage hinsichtlich der Befehle:

Config Serialin / Open

- der (erste) Hardware-UART benötigt beim Ansprechen keinen Channel (#NR)!?
- ab dem (zweiten) Software-UART wird mittels #1 durchnummeriert

- benötige ich das Config Serialin immer? - kann mir jmd. die sich anschliessenden Parameter erläutern?

Kann mir vielleicht auch jmd. mit einfachen Sätzen folgende Dinge erläutern: :confused:

- Serial0CharMatch
- Serial0ByteReceived
- Ischarwaiting()
- Inkey() [wenn ein Zeichen anliegt, wird es ausgelesen?]
- Waitkey() [macht das gleiche, aber es geht erst weiter, wenn ein Zeichen anliegt?]

- "Close" Da kommt das Programm doch nie hin (wenns hinter end steht)!? - wird Close immer benötigt?

Ich habe die BASCOM AVR Hilfe durchgelesen, aber ich verstehe es nicht so ganz. Eine deutsche Umschreibung, oder ein Tutorial, das ich noch nicht gefunden habe, wäre hilfreich!

Input ist ja schlecht, da hier das Programm wartet, richtig?

Vielen Dank für Hilfe,
Christoph
 
ischarwaiting() geht auf 1 wenn ein zeichen im empfangspuffer liegt, kann man abfragen, und dann die empfangenen zeichen weiterverarbeiten,.
inkey() gibt dann das anliegende zeichen aus,.
hier mal wie ichs letztens gemacht hab ,. (sehr einfach),..
Code:
  If Ischarwaiting() = 1 Then                                                  'zeichen wurde empfangen
      Serialchar = Inkey()                                                      'zeichen abholen
      Incr Stringi                                                              'zaehler hochsetzen
         
      Serialstring = Serialstring + Chr(serialchar)                             'buchstaben zu Wort anfügen
         If Serialchar = 66 Or Serialchar = 98 Or Serialchar = 13 Then             'auf ende des string warten (cr oder LF oder ENTER)
               Goto Befehlsauswertung
               Print "serialstring " ; Serialstring
         End If
   Else
      Stringi = 0                                                               'buchstabenzaehler zureucksetzen
   End If
 
....... kann mir jmd. die sich anschliessenden Parameter erläutern?


Hallo Christoph!

Sorry, aber dafür gibt es nun wirklich die BASCOM-Hilfe!!!

Solltest du das in englischer Sprache nicht genau verstehen, dann geh doch mal in den Buchladen deines Vertrauens. :wink:
Es gibt z.B. die BASCOM-Hilfe auch in deutscher Sprache und teilweise mit Beispielen!
Das wäre dann:
BASCOM-AVR Sprachbefehle, von Marius Meisner

Einen guten Abschnitt über UART und alle Befehle, sogar mit Beispielen, gibt es auch bei Claus Kühnel im Buch: Programmieren mit BASCOM-AVR

Diese beiden Bücher kann ich dir jedenfalls ans Herz legen und nach dem ersten Schmökern werden sich bestimmt schon diverse Fragezeichen in Luft auflösen...
oder in ein AHA verwandeln. :)

Grüße,
Cassio
 
Hallo,

ich hänge nun schon seit längerem vor folgendem Problem:

- per HW-Uart wird der Print-Befehl per XBee erfolgreich übertragen

- nun soll per SW-UART ein GPS Signal (nur die Höhe) eingelesen werden, dazu verwende ich die Methode von Stefan Hoffmann:


Code:
Config Serialin = Buffered , Size = 128
Open "COMB.7:9600,8,N,1" For Input As #1

[...]

Gps_zeichen = Inkey(#1)                                  ' Zeichen einlesen

   If Gps_zeichen > 0 Then


   End If

   If Gps_zeichen = 36 Then Input #1 , Gpsdaten Noecho      ' ist "$"  vorhanden, dann Daten/SoftUART #1 einlesen >> Gpsdaten

      Gps_header = Mid(gpsdaten , 1 , 5)                    'ersten 5 Zeichen nach Gps_header einlesen
      If Gps_header = "GPGGA" Then                          'wenn GPGGA Befehlssatz, dann


         Gps_anzahl = Split(gpsdaten , Gps_teilstring(1) , ",")       'aus Gpsdaten in 14 Teilstrings/Arrays, getrennt durch ",", aufteilen
         Gps_anzahl = Split(gps_teilstring(10) , Gps_hoehenteilstring(1) , ".")       'Teilstring 10, Höhe xxx.xx, aufteilen in Wert vor dem "."
         Gpsdaten = ""                                      'gpsdaten leeren
         Gpshoehe = Gps_hoehenteilstring(1)                 'gpshoehe = Höhe in Metern vor dem Komma über Meeresspiegel

      End If

Der vollständige Code anbei (Anhang anzeigen kap-rig-ctrl_v017-GPS-LCD-1wire-servo_rx-drachen.bas). Ich kann definitv sagen, dass das GPS Modul (Navilock 504 TTL) Daten liefert (getestet, indem ich Tx des GPS Moduls per XBee einlese und auf meinem Laptop das NMEA Protokoll sehe). Weiterhin erhält der GPS Empfänbger einen Fix, also Empfang ist da.

Irgendwie scheint es am Einlesen der Daten zu liegen! Ich bekomme über Inkey nichts rein bzw. ist Gps_zeichen immer "0" dass erhalte ich auch bei durch den Print-Befehl:

GROUND##7.7##20.6# < das hier wird korrekter Weise ausgegeben
0 < das hier ist der Print "GPS_zeichen"


Danke für Eure Hilfe
 

Ü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)