Ist ja genial,

Ich glaube, es liegt an den "If then" Abfragen. Besonders den Codeschnipsel "If Signalbit =1 then Signalbit = 0 habe ich nicht verstanden. Werden die weiteren Abfragen nur ausgeführt, wenn die bedingung erfüllt ist? (also If PIND.1 =0 usw. nur wenn die erste Bedingung erfüllt ist?

Hier der Code


Code:
'CNC Stepper.bas
'Stepperdriver
'____________________________________________
'Der Atmega wird zwischen Centronics und L 297 geschaltet, um je Richtung
' Enable (H aktiv) aus dem Takt zu generieren.
'Taklt wird bei Ansteigender Flanke aktiv
$regfile = "m8def.dat"
$crystal = 10000000                                         'Quarz 10 MHz
'


Dim Signalbit As Bit
Dim Zeitx As Byte

Config Timer1 = Timer , Prescale = 8


Timer1_isr:
Signalbit = 1
Timer1 = 55535
Return

Ddrd = &B11000000                                           'Port D-Pins 0-5 Eingang
Ddrb = &B11111111                                           'Port B Ausgang
Ddrc = &B11111111                                           'Port C Ausgang


Portc.3 = Pind.0                                            'Richtung X
Portc.0 = Pind.2                                            'Richtung Y
Portd.6 = Pind.4                                            'Richtung Z

Portd.7 = Pind.1                                            'Takt X
Portc.1 = Pind.3                                            'Takt Y
Portc.4 = Pind.5                                            'Takt Z

Main:

If Pind.1 = 0 And Portd.7 = 1 Then                          'Wenn seit dem letzten Loop Ausgang noch auf 0 und Eingang auf 1 dann Steigende Flanke
Portb.0 = 1
ZeitX=0
End If

If Signalbit = 1 Then
Signalbit = 0

If Pind.1 = 1 And Portb.0 = 1 Then                          'Takt vorbei, aber enable noch H
Zeitx = Zeitx + 1
End If
End If



Portd.7 = Pind.1


If Zeitx = 20 Then
Portb.0 = 0
Zeitx = 0
End If


Goto Main

Gruß und danke

Kalle