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







Zitieren

Lesezeichen