Hallo Searcher,

ich hab jetzt wie Du vorschlägst den hwstack erhöht, dann den Langdrück-Kram mal kpl. auskommentiert und die beiden Waits bei Kurz und Doppel rausgenommen, der Schritti verhält sich immer noch so komisch mit den Zuckungen. Das ist doch äußerst suspekt, oder?
Es muss in der Tastenabfrage stecken, denn ohne diese ist der Motor einwandfrei gelaufen.
Ich hab diese erste Version noch extra gesichert um die Änderungen gegenzuprüfen.

So läuft er einwandfrei:
Code:
                                               
$regfile = "attiny2313.dat"
$crystal = 8000000
$hwstack = 34
$swstack = 32
$framesize = 40
$baud = 9600
' BASCOM-Programm
' Stefan Hoffmann 2009
' Drehimpulsgeber/Encoder     mit ENCODER-Befehl
'
' In: Drehimpulsgeber an d.0 und d.1 sowie Taster

' Testprogramm  für A3967 Platine mit Dir Step und Enable

$regfile = "attiny2313.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 8000000                                          'Interner Osz. 8 MHz
$baud = 9600


Config Timer0 = Timer , Prescale = 1024                     'Timer0 Deklarationen für den Takt des Steppers
Enable Timer0
Dim Timer0_reload As Word
Portd.4 = 1                                                 'Pullup Widerstand ein   für Enable - ****Enable =0 bedeutet Motor On!!!!  ****
Enable Interrupts
On Timer0 Isr_timer0                                        'Deklaration der Timerroutine

         ' Inputs: Drehimpulsgeber an d.0 und d.1 sowie Taster an d.3
         '-----Deklarationen fuer Drehimpulsgeber:
Config Pind.0 = Input
    Encoder_a Alias Pind.0                                  'Encoder Signal B  an Pin 2
Config Pind.1 = Input
    Encoder_b Alias Pind.1                                  'Encoder Signal A  an Pin 3
Config Pind.3 = Input
    Taster1 Alias Pind.3                                    'Taster

Portd.0 = 1                                                  'Pullups für den Drehencoder
Portd.1 = 1
Portd.3 = 1
                                                   'LED-Outputs stellvertretend für Step, Dir, Enable
                                                  ' In der endgültigen Hardware liegen: Step/Takt auf PD.2 / Taster auf PD.3 / Enable auf PD4 / Richtung auf PD5 /
Config Portd.2 = Output
    Portd.2 = 0                                             'das ist Step/Takt - Pin 6   - alles mit Pulldown + LEd_gelb
Config Portd.5 = Output
    Portd.5 = 0                                             ' Pin 9  -  Dir - Richtungssignal
Config Portd.4 = Output
    Portd.4 = 0                                             ' Pin 16   -  Enable - generelles Ein-Ausschaltsignal
Config Portb.0 = Output
    Portb.0 = 0                                             'Pin 9 - LED_DE - am Drehencoder Anzeige

Motor_step Alias Portd.2
Chip_dir Alias Portd.5
Chip_enable Alias Portd.4

Dim Wert As Word
Wert = 2                                                    'experimentell ermittelter Startwert für den Drehencoder
Dim Zustand As Byte
       '*****************Deklarationen für den Taster - am DE - für die Lang-kurz- und Doppelklickroutine


       '***********Hauptschleife:**********
Do

Chip_enable = 0                                             'Enable ein
Chip_dir = 1                                                'Dir


Zustand = Encoder(pind.0 , Pind.1 , Linksroutine , Rechtsroutine , 0)




Loop

End


'*****************Subroutine Tasterauswertung *****************************


'**********************Interrupt-Routine Timer0 ************************************
Isr_timer0:
  Timer0_reload = 4                                         'Vorgabe für 38 / sec
  Timer0 = Timer0_reload + Wert
  Toggle Motor_step                                         '= Stepper_takt
Return


'***********************Sub-Routinen Drehencoder  ***********************************
Linksroutine:
Decr Wert
   If Wert < 1 Then
   Wert = 1
   End If
Return

Rechtsroutine:
Incr Wert
   If Wert > 230 Then
   Wert = 230
   End If
Return

Und so, mit Deinen Änderungen, läuft er mit Zuckungen:
Code:
$regfile = "attiny2313.dat"
$crystal = 8000000
$hwstack = 32
$swstack = 10
$framesize = 40
$baud = 9600
' BASCOM-Programm
' Stefan Hoffmann 2009
' Drehimpulsgeber/Encoder     mit ENCODER-Befehl
'
' In: Drehimpulsgeber an d.0 und d.1 sowie Taster

' Testprogramm  für A3967 Platine mit Dir Step und Enable

$regfile = "attiny2313.dat"
$framesize = 32
$swstack = 32
$hwstack = 34
$crystal = 8000000                                          'Interner Osz. 8 MHz
$baud = 9600


Config Timer0 = Timer , Prescale = 1024                     'Timer1 Deklarationen für den Takt des Steppers
Enable Timer0
Dim Timer0_reload As Word
Portd.4 = 1                                                 'Pullup Widerstand ein   für Enable - ****Enable =0 bedeutet Motor On!!!!  ****
Enable Interrupts
On Timer0 Isr_timer0                                        'Deklaration der Timerroutine

         ' Inputs: Drehimpulsgeber an d.0 und d.1 sowie Taster an d.3
         '-----Deklarationen fuer Drehimpulsgeber:
Config Pind.0 = Input
    Encoder_a Alias Pind.0                                  'Encoder Signal B  an Pin 2
Config Pind.1 = Input
    Encoder_b Alias Pind.1                                  'Encoder Signal A  an Pin 3
Config Pind.3 = Input
    Taster1 Alias Pind.3                                    'Taster

Portd.0 = 1                                                 'Pullups für den Drehencoder
Portd.1 = 1
Portd.3 = 1
                                                   'LED-Outputs stellvertretend für Step, Dir, Enable
                                                  ' In der endgültigen Hardware liegen: Step/Takt auf PD.2 / Taster auf PD.3 / Enable auf PD4 / Richtung auf PD5 /
Config Portd.2 = Output
    Portd.2 = 0                                             'das ist Step/Takt - Pin 6   - alles mit Pulldown + LEd_gelb
Config Portd.5 = Output
    Portd.5 = 0                                             ' Pin 9  -  Dir - Richtungssignal
Config Portd.4 = Output
    Portd.4 = 0                                             ' Pin 16   -  Enable - generelles Ein-Ausschaltsignal
Config Portb.0 = Output
    Portb.0 = 0                                             'Pin 9 - LED_DE - am Drehencoder Anzeige

Motor_step Alias Portd.2
Chip_dir Alias Portd.5
Chip_enable Alias Portd.4

Dim Wert As Word
Wert = 2                                                    'experimentell ermittelter Startwert für den Drehencoder
Dim Zustand As Byte
              '*****************Deklarationen für den Taster - am DE - für die Lang-kurz- und Doppelklickroutine
Dim Zaehler As Byte
Const Langzaehler = 100                                     'Danach gilt die Taste als lange gedrueckt
Const Doppelzaehler = 20                                    'Innerhalb dessen muss zweiter Klick erfolgen
Dim Gedrueckt As Byte                                       'Art des Drueckens (Kurz/Lang/Doppel)
Const Kurz = 1
Const Lang = 2
Const Doppel = 3
Dim I As Byte


       '***********Hauptschleife:**********
Do

Chip_enable = 0                                             'Enable ein
Chip_dir = 1                                                'Dir


Zustand = Encoder(pind.0 , Pind.1 , Linksroutine , Rechtsroutine , 0)


Debounce Taster1 , 0 , Tastenauswertung , Sub

  Select Case Gedrueckt                                     'Hier koennen beliebige Anweisungen erfolgen
  Case Kurz:                                                'Es wurde einmal kurz gedrueckt
      Chip_enable = 1                                       'Motor stoppen

  Case Lang:                                                'Die Taste wurde lange gedrueckt
     ' For I = 1 To 6
      '   Toggle Chip_dir
      'Next I
      'Wait 1

  Case Doppel:                                              'Die Taste wurde doppelt gedrueckt
      Chip_enable = 0                                       'Motor wieder an

  End Select

  Portd.2 = 0
  Portd.5 = 0
  Portb.4 = 0


Loop

End

'**********************Interrupt-Routine Timer0 ************************************
Isr_timer0:
  Timer0_reload = 4                                         'Vorgabe für 38 / sec
  Timer0 = Timer0_reload + Wert
  Toggle Motor_step                                         '= Stepper_takt
Return

'***********************Sub-Routinen Drehencoder  ***********************************
Linksroutine:
Decr Wert
   If Wert < 1 Then
   Wert = 1
   End If
Return

Rechtsroutine:
Incr Wert
   If Wert > 230 Then
   Wert = 230
   End If
Return

'*****************Subroutine Tasterauswertung *****************************
Tastenauswertung:
  Zaehler = 0
  Do
    Incr Zaehler
    Waitms 10
  Loop Until Taster1 = 1 Or Zaehler = Langzaehler

  If Zaehler = Langzaehler Then                             'lange gedrueckt
    Gedrueckt = Lang
  Else                                                      'einmal kurz gedrueckt
    Zaehler = 0
    Do
      Incr Zaehler
      Waitms 10
    Loop Until Taster1 = 0 Or Zaehler = Doppelzaehler

    If Zaehler = Doppelzaehler Then                         'bleibt bei einmal kurz
      Gedrueckt = Kurz
    Else
      Gedrueckt = Doppel                                    'zweites Mal kurz gedrueckt
    End If
  End If
Return
(Die Schleife bei "Lang" soll übrigens dazu dienen den Motor 6 sec. lang in die eine und dann in die andere Richtung laufen zu lassen. Geht das überhaupt so?)

Aber zuerst zum Problem des Zuckens. Das tritt auch auf wenn die Taste gar nicht gedrückt wurde, also die Sub selbst kann es wohl nicht sein, aber wo klemmt es denn dann? Sehr merkwürdig.

Danke für Deine Hilfe!

LG MM