Problem mit BASCOM Befehl Encoder

uwe-ftechnik

Mitglied
31. Jan. 2009
71
1
8
Bekum
Sprachen
Warum ist es bei meinem Beispiel nicht möglich noch eine Taste abzufragen
Code:
'-------------------------------------------------------------------------------
' Filename : Drehencoder 0.1 bas
' Purpose  : Quadrature Decoder/Counter and Display
' Author   : Uwe
' Date     : 10.03.2009
' Compiler : BASCOM-AVR   Rev. 1.11.8.7
'
$regfile = "m164Pdef.dat"                                   ' specify the used micro
$crystal = 8000000                                          ' used crystal frequency
'$baud = 19200                                               ' use baud rate
$hwstack = 60                                               ' default use 32 for the hardware stack
$swstack = 30                                               ' default use 10 for the SW stack
$framesize = 60                                             ' default use 40 for the frame space
'$sim
Dim A As Byte                                               'Byte von 0 bis 255
Dim B As Byte

A = 0
B = 0
Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Portc.7 , Rs = Portc.6
Config Lcd = 24 * 2
Initlcd
Cls
Cursor Off

Config Pind.5 = Input
Config Pind.6 = Input
Config Pind.7 = Input
Config Debounce = 5
Portd = 224
Cls

Main:
'Do
B = Encoder(pind.5 , Pind.6 , Rechts , Links , 1)
Debounce Pind.7 , 0 , Ausg
'If Pind.7 = 0 Then
'Goto Ausg
'End If
Locate 1 , 3
Lcd "        "
Lcd A
Goto Main
'Loop



Links:
Decr A
Locate 2 , 1
Lcd "Links "
Return

Rechts:
Incr A
Locate 2 , 1
Lcd "Rechts"
Return

Ausg:
Locate 2 , 1
Lcd "Taste "
Return
End
'------------------------------------------------------------------------

es Funktioniert einfach nicht bei mir habe seit 4 Tagen schon das Problem und komme einfach nicht weiter !!!:banghead:
Kann mal jemand so nett sein und da mal drüberschauen wo da der Fehler liegt oder gibt es da keine möglichkeit? Bascom-Hielfe schweigt sich darüber leider aus.:stoned:
:banghead: :banghead:
Ich weiss nicht mehr was ich noch machen soll habe glaube ich alles mögliche schon Versucht!!!!:confused:
 
Hallo.

Code:
Do
Debounce Pind.5 , 0 , Links , Sub
Debounce Pind.6 , 0 , Rechts , Sub
Debounce Pind.7 , 0 , Ausg , Sub
Locate 1 , 3 Lcd " "
Lcd A
Wait 1
Loop

Dein Config Debounce mit 5ms ist seeehr kurz. Nimm mal 50ms oder gar 100.

Besser lesbar ist es auch, wenn Du statt Portd = 224 -> Portd = &11100000 schreibst.

Thomas
 
Hallo Uwe!

Ich habe eben nur mal schnell einen Blick drauf geworfen...

Dein "Main:" und "Goto Main" kannst du durch das "Do" und "Loop" wieder ersetzen.

Vielleicht solltest du vor dem Loop dein Programm mal ein wenig ausbremsen... so mit "Waitms 5".

Wie erkennst du denn, dass es nicht funktioniert?
Das LCD zeigt dir zwar "rechts" und "links" an, aber nicht die Variable A.
OK, du lässt dir zwar A im Main anzeigen..... aber der Durchlauf wird zu schnell sein und dein Zeile---> LCD " " <----an der selben Stelle des Displays wird die Variable A wieder "unsichtbar" machen. ;)


Sonst habe ich auf die Schnelle keinen Fehler finden können. :hmmmm:

Gruß,
Cassio
 
Knickohr vielen dank für die Antwort!;)
Config Debounce habe ich auch schon rauf und runtergeschraubt hat garnicht geholfen.
Mit Debounce auch mal Pin 5+6 abzufragen werde ich mal versuchen!

Cassio ebenfals vielen dank:D
Der Wert von A wird in der Main angezeigt und Funktioniert sehr gut sowie auch die Anzeige Links Rechts, nur das Programm bleibt bei der Abfrage
" B = Encoder(pind.5 , Pind.6 , Rechts , Links , 1) " gängen und da kann man versuchen was mann wiell witere Abfragen siend aus welchen Gründen auch immer nicht möglich.:banghead:

Das Programm solte ja ausser der richtung auch den Tastendruck anzeigen was aber leider nicht Funktioniert.:stoned:
Wenn ich drehe und Taste gleichzeitig drücke dann kommt ja auch die Ausgabe " Taste " siehe Programm ende.
Hatte schon ein Programm zusammen was mir einzelne Unterprogramme anwählt aber die übernahme der Punkte scheiterte an nichterkennen der Taste ist ein Drehenkoder mit Optischer abfrage und Tastenfunktion, wobei ja nicht mit Prellen zu rechnen ist!!!:rolleyes:
Habe das Progi dann soweit wider abgespeckt das man den Fehler leichter aufspüren kann, nur leider mit Null Erfolg.:confused: :confused:
 
Hallo Uwe!

Klingt aber seltsam!

Ich kenne diese optischen Drehencoder nur von den Datenblättern her.....
Irgendetwas war mir damals zu Aufwändig mit denen zu arbeiten (weiß aber jetzt nicht mehr was) und habe deswegen die Normalen mit Kontakte genommen.

Hast du ein Datenblatt von dem Drehencoder?
Vielleicht gibt er die Signale anders heraus als BASCOM es möchte?

Hast du schon mal ein 2-Kanal Oszilloskop rangehalten und gedreht?

Dein Programm sollte eigentlich soweit funktionieren. :hmmmm:


Gruß,
Cassio
 
Danke Cassio

Der Drehencoder arbeitet sehr gut mit Bascom Demo für Drehencoder zusammen dort Funktioniert auch alles bestens nur kann man mit dem Befehl "Encoder" keine wieteren Tastenabfragen !!!!!!!!!!!!! :confused:
Das einzige was jetzt nach meiner meinung noch etwas sein dürfte ist Interuptabfrage der Taste die ich eigentlich vermeiden wollte da ich noch nicht weiss welche Interupts ich noch brauche. Laut BASCOM Simulation ist es auch so das der Befehl nur in seiner eigenen Schleife läuft und keine weitere Abfrage erlaubt!!:(
Habe hier mal das Datenblatt des Encoders kannst ja mal schauen ob du etwas feststellen kannst, ich glaube aber Intrsanter währe wenn mal jemand der sich auskennt sich mal den übersetzten ASM-Code ansehen würde.
Da ich noch anfänger bin werde ich das wahrscheinlich nicht hienbekommen. Wenn du Interesse hast kann ich dir ja mal 1 o. 2 von den Endcodern zukommen lassen habe noch einige hier wo ich auch welche von abgeben könnte.Schiecke mir mal dann eine PS dann können wier mal weiterschauen.
Oscar habe ich noch nicht drangehängt aber Drehencoder Pulse siend ja nicht das Problem die Demo und mein eigentlicher Programmteil für die Dinger finktioniert ja auch nur wenn ich jetzt ein Unterprogramm ausgewählt habe und mit der Taste bestätigen möcht dann Funktioniert die Tastenabfrage ja leider nicht, alles andere schon!!!! Tastaturabfrageproblem mit ENCODER Befehl BASCOM
 

Anhänge

  • Grayhill 62 A.pdf
    60,3 KB · Aufrufe: 52
Hallo Uwe!

Da muss ich morgen noch mal in Ruhe schauen, was da sein könnte.

Ich habe auch irgendwann schon mal eine Testroutine für Drehencoder geschrieben...
Muss ich morgen mal suchen..... Wenn sonst keiner schneller ist und eine spontane Eingebung hat, oder einen Rat weiß.

Gruß,
Cassio
 
Cassio danke vielmals!!!!!!!!!!!!!!

:date: Bin ja mal gespannt was dabei rauskommt, irgendetwas hat sich MCS ja auch dabei gedacht nur was ????? Eigentlich müsste sich der Befehl Encoder doch auch sienvoll einsetzen lassen.:confused:
 
Hallo Uwe,

auch in diesem Fall bringt uns ein Blick in die Bascom-Hilfe weiter:

Du gibst als letzten Parameter beim Befehl Encoder "1" ein. Du sagst somit deinem Programm, es soll an dieser Stelle anhalten und warten, bis der Encoder gedreht wird.
Sobald du den Wert auf "0" setzt, wird nur geschaut, ob der Encoder gedreht wird und das Programm wird fortgesetzt. Damit kannst du im Hauptprogramm dann auch andere Tastenabfragen einbauen.
 
Danke StevieL

:flowers: :flowers:

Habe leider noch nicht versuchen können ob das daran liegt, aber wenn währe das SUPER komme auch leider Heute nicht mehr dazu !!!:p
Aber trotzdem vielen DANK!!!!! :pleasantry:
 
Hallo Uwe,

mit der "0" als Parameter funktioniert es. Ich habe auch mehrfach Dreh-Encoder im Einsatz, bei denen der Druckschalter der Achse zusätzlich ausgewertet wird. Bei deinem bisherigen Programm kannst du einen Taster auch abfragen. Dazu ist es aber zwingend erforderlich, dass der Encoder vorher gedreht wird und du dann schnell genug den Taster drückst, bevor dein Programm den Debounce-Befehl erreicht hat. Und das wird schwierig :D
 
Warum ist es bei meinem Beispiel nicht möglich noch eine Taste abzufragen
Code:
'-------------------------------------------------------------------------------
' Filename : Drehencoder 0.1 bas
' Purpose  : Quadrature Decoder/Counter and Display
' Author   : Uwe
' Date     : 10.03.2009
' Compiler : BASCOM-AVR   Rev. 1.11.8.7
'
$regfile = "m164Pdef.dat"                                   ' specify the used micro
$crystal = 8000000                                          ' used crystal frequency
'$baud = 19200                                               ' use baud rate
$hwstack = 60                                               ' default use 32 for the hardware stack
$swstack = 30                                               ' default use 10 for the SW stack
$framesize = 60                                             ' default use 40 for the frame space
'$sim
Dim A As Byte                                               'Byte von 0 bis 255
Dim B As Byte

A = 0
B = 0
Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Portc.7 , Rs = Portc.6
Config Lcd = 24 * 2
Initlcd
Cls
Cursor Off

Config Pind.5 = Input
Config Pind.6 = Input
Config Pind.7 = Input
Config Debounce = 5
Portd = 224
Cls

Main:
'Do
B = Encoder(pind.5 , Pind.6 , Rechts , Links , 1)
Debounce Pind.7 , 0 , Ausg
'If Pind.7 = 0 Then
'Goto Ausg
'End If
Locate 1 , 3
Lcd "        "
Lcd A
Goto Main
'Loop



Links:
Decr A
Locate 2 , 1
Lcd "Links "
Return

Rechts:
Incr A
Locate 2 , 1
Lcd "Rechts"
Return

Ausg:
Locate 2 , 1
Lcd "Taste "
Return
End
'------------------------------------------------------------------------

es Funktioniert einfach nicht bei mir habe seit 4 Tagen schon das Problem und komme einfach nicht weiter !!!:banghead:
Kann mal jemand so nett sein und da mal drüberschauen wo da der Fehler liegt oder gibt es da keine möglichkeit? Bascom-Hielfe schweigt sich darüber leider aus.:stoned:
:banghead: :banghead:
Ich weiss nicht mehr was ich noch machen soll habe glaube ich alles mögliche schon Versucht!!!!:confused:

Die Variable "B" berücksichtigst Du gar nicht?? Die tut nämlich auch etwas wenn du am Drehgeber drehst...
 

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