Hallo Leute ich hab mal wieder eine Frage, bin lausiger Programmier-Anfänger:
Ich will einen Schrittmotor steuern, der 48 S/U hat und per A3967 getrieben wird, also mit Enable, Dir und Step. Die Hardware steht und funktioniert, hab ein kl. Testprogramm damit laufen.
Code:' Stepper_test1.bas - Testprogramm für A3967 Platine mit Dir Step und Enable $regfile = "attiny2313.dat" $framesize = 32 $swstack = 32 $hwstack = 32 $crystal = 8000000 'Quarzfrequenz $baud = 9600 Declare Sub Key_pressed Dim I As Long Config Timer1 = Timer , Prescale = 1 Enable Timer1 Timsk.toie1 = 1 Dim Timer1_reload As Word Portd.4 = 1 ' Pullup Widerstand ein für Enable - ****Enable =0 bedeutet Motor On!!!! **** Enable Interrupts Config Pind.2 = Output Stepper_takt Alias Portd.2 Config Pind.4 = Output Stepper_enable Alias Portd.4 Portd.4 = 0 'sprich Motor ON On Timer1 Isr_timer1 ' Step/Takt auf PD.2 / Taster auf PD.3 / Enable auf PD4 / Richtung auf PD5 / '***********Hauptschleife:********** Do Loop End Isr_timer1: Timer1_reload = 45536 ' Vorgabe für 400 / sec Timer1 = Timer1_reload Toggle Stepper_takt Return
Der Schrittmotor soll nun aber mittels eines Drehencoders langsamer und schneller gemacht werden, die Routine hab ich aus dem Hoffmann-Buch.
Ich schnall einfach nicht, wie ich diese Routine mit einer Timer-Takterzeugung verheiraten kann. Der Takt ist doch konstant, und die Encoder-Routine braucht das doch als Variable, oder?Code:'-----Deklarationen fuer Drehimpulsgeber: Config Portd.0 = Input : Encoder_a Alias Pind.0 'Encoder Signal B an Pin 2 Config Portd.1 = Input : Encoder_b Alias Pind.1 'Encoder Signal A an Pin 3 Config Pind.3 = Input : Taster1 Alias Pind.3 Pind.0 = 1 'Pullups für den Drehencoder Pind.1 = 1 Pind.3 = 1 'LED-Outputs: Config Portd.2 = Output : Portd.2 = 0 'das ist Pin 6 alles mit Pulldown Config Portd.5 = Output : Portd.5 = 0 ' Pin 9 Config Portb.4 = Output : Portb.4 = 0 ' Pin 16 Led_gelb Alias Portd.2 Led_gruen Alias Portd.5 Led_rot Alias Portb.4 ' BASCOM-Programm ' Stefan Hoffmann 2009 ' Drehimpulsgeber/Encoder mit ENCODER-Befehl ' ' In: Drehimpulsgeber an d.0 und d.1 sowie Taster Dim Wert As Word Wert = 100 Dim Zustand As Byte Do Zustand = Encoder(pind.0 , Pind.1 , Linksroutine , Rechtsroutine , 1) If Wert > 100 Then Led_rot = 1 If Wert < 100 Then Led_gruen = 1 If Taster1 = 0 Then Led_gelb = 1 'Zu Testzwecken Loop End Linksroutine: Decr Wert Return Rechtsroutine: Incr Wert Return
Habt ihr eine Idee, wie man so was lösen kann?
Vielen Dank für Anregungen!
MM08
(PS: - ich hatte schon einen anderen Code in Arbeit - s. Link und wieder verworfen, weil ich da schließlich vor dem gleichen Problem stand und kein Takt rauskam. Jetzt will ich das Ganze mal abspecken und klein und möglichst einfach wieder anfangen.)







Zitieren

Lesezeichen