Hallo,
Ich möchte einen Drehencoder auslesen, um klein anzufangen möchte ich ersteinmal alle die High/low zustände zählen.

ich hab ein Programm geschrieben, mit dem das auch theoretisch möglich ist. Aber leider nur wenn man der Encoder sehr langsam dreht... wenn man zu schnell dreht ändert sich der wert nicht mehr.

ich denke mein Programm ist villeicht etwas komisch aufgebaut, aber mir ist keine andere Lösung eingefallen (bin absoluter anfänger)

kann es daran leigen das der AVR mit dem zählen nicht mehr hinterher kommt?
Oder kann es auch am Schalttransistor liegen? BC337-40

Mfg Hübi


Code:
                                         'Encoder test
'--------------------------------------------------------------
$regfile = "attiny2313.dat"                                 'ATTINY 2313
$crystal = 8000000                                          'TACKT 8Mhz


'******** Deklarationen ********


 Dim Zaehlwert As Word

'******** Initialisierung ********                                                 '

 Ddrd = &B11100000
Portd = &B00000000

Zaehlwert = 1

'******** Hauptprogramm ********

Config Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.0 , Rs = Portb.2       'LCD configurieren (datenleitung)

Dim A As Byte
Config Lcd = 16 * 2                                         ' 16*2 Zeilen


Main:                                                       'hauptprogramm
Cls                                                         'display löschen
  Do

    Locate 1 , 1                                            'cursor in Zeile 1, Reihe 1
    Lcd Zaehlwert                                           'schreibe "Zählwert"
    Cursor Off                                              'cursor off


    If Pind.2 = 1 Then                                      'wenn taster gedrückt, dann
    Zaehlwert = Zaehlwert + 1                               'addiere 1 zu Zähltwert
   Goto Unterprogramm                                       'gehe zu Unterprogramm

    End If                                                  'end if


  Loop




 '---------------------------------------------------------------------------------





 Unterprogramm:                                             'Unterprogramm

  Do

   If Pind.2 = 0 Then                                       'wenn Taster losgelasse wird
   Goto Main                                                'springe zurück ins Hauptprogramm
   End If                                                   'end if



  Loop