-         

Ergebnis 1 bis 7 von 7

Thema: Problem mit Encoder

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.11.2005
    Ort
    QTH: JO43BC
    Alter
    49
    Beiträge
    112

    Problem mit Encoder

    Anzeige

    Hallo,

    ich hab da ein merkwuerdiges Problem. Vielleicht ist es auch keins und ich bin einfach nur zu doof. :)
    An einem ATMega8 habe ich einen Drehimpulsgeber angeschlossen. Je nach Drehrichtung wird dann die eine oder andere LED kurz eingeschaltet. Das funktioniert auch soweit bestens.
    Durch den Druck auf die Achse des Impulsgebers kann ich noch eine zusaetzliche Schaltfunktion ausloesen (Enter). Und genau da ist mein Problem: Ich schaffe es einfach nicht diese daemliche Taste abzufragen und damit eine LED kurz einzuschalten:

    -------------------------------------------------------------------------------
    $regfile = "m8def.dat"
    $crystal = 16000000
    Config Portc = Output
    Config Portd = Input

    Dim B As Byte
    Portd = 255

    Do
    Portc = &B11111111
    B = Encoder(pind.1 , Pind.0 , Links , Rechts , 1)

    If Pind.2 = 0 Then 'Abfrage der Enter-Taste
    Gosub Enter
    End If

    Waitms 5
    Loop

    End

    Links:
    Portc = &B11110111 'LED an Pind.3
    Waitms 5
    Return

    Rechts:
    Portc = &B11101111 'LED an Pind.4
    Waitms 5
    Return

    Enter:
    Portc = &B11011111 'LED an Pind.5
    Waitms 5
    Return
    -------------------------------------------------------------------------------

    Sobald ich die Zeile "B = Encoder(pind.1 , Pind.0 , Links , Rechts , 1)" rausnehme, kann ich komischerweise die Schaltfunktion wunderbar ausloesen. Ist sie wieder aktiv, wird die darunterliegende if-then Schleife nicht mehr abgearbeitet.
    Ehrlich gesagt bin ich einwenig ratlos. Hat da jemand ne Idee?

    Mit freundlichen Gruessen
    Digitali

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    15.01.2006
    Beiträge
    80
    Bin mir da jetzt nicht ganz sicher(habe gerade erst abgefangen mit Bascom)
    Aber das problem wird sein das du immer das komplette Ausgangsbyte setzt.
    Versuch mal in der Anweisung
    links
    Portc.3=1 anstatt Portc = &B11110111
    rechts
    Portc.4=1 anstatt Portc = &B11101111
    Enter
    Portc.5=1 anstatt Portc = &B11011111

    ich denke das dadurch die anderen Werte nicht mehr überschreiben werden. Ich hoffe du verstehst was ich meine.

    Da du immer das ganze Ausgangsbyte setzt, werde immer die anderen Werte überschrieben.
    Und da wenn diese eineZeile nicht aktiv ist die anderen Werte nicht gesetzt werden, klappt das wenn die Zeile nicht aktiv ist.

    Ciao Marco

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.11.2005
    Ort
    QTH: JO43BC
    Alter
    49
    Beiträge
    112
    Hm, ich hab's mal schnell entsprechend geaendert. Leider kein Erfolg. :(
    Irgendwie blockiert die Abfrage des Encoders die nachfolgende if-then Schleife.

    -------------------------------------------------------------
    $regfile = "m8def.dat"
    $crystal = 16000000
    Config Portc = Output
    Config Portd = Input

    Dim B As Byte
    Portd = 255
    Portc = 255

    Do
    B = Encoder(pind.1 , Pind.0 , Links , Rechts , 1)

    If Pind.2 = 0 Then
    Gosub Enter
    End If

    Waitms 5
    Loop

    End

    Links:
    Portc.3 = 0
    Waitms 5
    Portc.3 = 1
    Return

    Rechts:
    Portc.4 = 0
    Waitms 5
    Portc.4 = 1
    Return

    Enter:
    Portc.5 = 0
    Waitms 5
    Portc.5 = 1
    Return

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    15.01.2006
    Beiträge
    80
    Mach mal den letzten Befehl beim encode auf 0.

    und warum setzt du den jeweligen port erst auf 0 und dann auf 1.
    Dann würden die LEds ja die ganze zeit an sein und ausgehen wenn das signal anliegt?
    Und sieht man die 5ms überhaupt?

    EDIT: Wenn ich das richtig verstanden habe hält das programm solange sich den encoder nicht dreht wenn der letzte Wert auf 1 ist.

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.11.2005
    Ort
    QTH: JO43BC
    Alter
    49
    Beiträge
    112
    < Mach mal den letzten Befehl beim encode auf 0.

    Danke! Das funktioniert! Da muss man erstmal drauf kommen.
    Die LED’s haben in meinem Falle eine gemeinsame Anode. Ich ziehe mit Portc.x = 0 die Leitung gegen Masse. Und die LED leuchtet. Die 5ms kann man noch einigermassen sehen. Aber darum geht’s mir eigentlich auch nicht. Spaeter werde ich die Richtungsimpulse mit einem anderen ATMega128 auswerten. Den Drehimpulsgeber brauche ich hier zur Eingabe von Ziffern. Ein kleines GPS mit Eingabe von Koordinaten und Pfeilnavigation soll hieraus entstehen. Ein Tastenfeld wollte ich mir sparen. Nimmt zuviel Platz ein. Daher die Idee mit dem Drehimpulsgeber.

    Danke nochmals!

    Mit freundlichen Gruessen
    Digitali

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    15.01.2006
    Beiträge
    80
    Kein Problem, wenn ich helfen kann mache ich das natürlich. HAbe ja auch schon mehr als einen guten Tip hier erhalten.
    Was hast du genau vor? Gibts da schon was vorzeugbares. Mit dem GPS Modul meine ich.
    Und welchen Drehgeber hast du benutzt?

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.11.2005
    Ort
    QTH: JO43BC
    Alter
    49
    Beiträge
    112
    "Digiswitch 427" heisst der Geber. Den gibt’s fuer teures Geld momentan bei Conrad. :)

    Was Vorzeigbares gibt's noch nicht. Ich bin momentan dabei die einzelnen Programmteile zu erstellen. Mit nem ATMega128 werde ich eine GPS-Mouse auswerten. Durch Eingabe einer zweiten Zielkoordinate berechnet der AVR dann laufend den Winkel und die Distanz zwischen den Koordinaten. Das ganze wird natuerlich auch auf einem 128x128 GLCD dargestellt.
    Distanz und Winkelberechnung:
    http://www.speckmann.de/atmel/koordinatenberechnung.htm
    Anzeige einer einfachen Pfeilnavigation mit Vorgabe des Winkels:
    http://www.speckmann.de/atmel/gps_test.htm

    Ich bin aktiver Geocacher ( http://www.geocaching.de ) und das soll vielleicht mal als Festeinbau ins Auto. Zu sehen soll nur das GLCD und dezent der Drehimpulsgeber zur Eingabe der Koordinaten sein. Klar, ich habe auch ein Hand-GPS von Garmin, aber als AVR-Freak kam mir die Idee mit dem Selbstbau. :)

    Mit freundlichen Gruessen
    Digitali

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •