>> [AVR Peripherie] >> [Servo] >> Beispiel in BASCOM mit myAVR Zuerst müssen wir den Servo mal anschliessen. Dazu habe ich das myAVR Board wie auf dem Bild Verdrahted. Die beiden Taster für Links und Rechts habe ich mit den Pin 0 und 1 von Port B verbunden. (blaues und schwarzes Patchkabel) Die Betriebsspannung für den Servo hole ich mir direkt vom myAVR Board mit dem roten und schwarzen Patchkabel, und das gelbe Patchkabel verbindet die Signalleitung (Impulsleitung) mit dem Pin 0 von Port C. Für die Programmierung ist es nun am Einfachsten die fertigen Befehle (Unterprogramme) von BASCOM zu verwenden. Servo Steuerung myAVR mit BASCOM Servo-BefehlDownload' Taktfrequenz des Quarzes einstellen (3,686411 MHz -> 1 Takt=0,00000027127s=0,27127us) $crystal = 3686411 ' Verwendete CPU festlegen (ATmega8) $regfile = "m8def.dat" ' Pin 0 an Port C als Ausgang für Modellservo Config Portc.0 = Output ' alle Pin's an Port B als Eingang festlegen Config Portb = Input ' Interne Pullup Widerstände setzten für Taster Portb = &H03 Config Servos = 1 , Servo1 = Portc.0 , Reload = 10 Enable Interrupts Dim Winkel As Byte ' Etwa auf Mittelstellung setzen Winkel = 70 Servo(1) = Winkel ' Hauptprogrammschleife Do If Pinb.1 = 0 Then ' ist Schalter an Pin 2 Port D gedrückt If Winkel > 30 Then Decr Winkel Elseif Pinb.0 = 0 Then ' ist Schalter an Pin 3 Port D gedrückt If Winkel < 110 Then Incr Winkel End If Servo(1) = Winkel Waitms 10 Loop End Servo Steuerung myAVR mit BASCOM über TimerDownload' Taktfrequenz des Quarzes einstellen (3,686411 MHz -> 1 Takt=0,00000027127s=0,27127ys) $crystal = 3686411 ' Verwendete CPU festlegen (ATmega8) $regfile = "m8def.dat" ' alle Pin's an Port C als Ausgang festlegen Config Portc = Output ' alle Pin's an Port B als Eingang festlegen Config Portb = Input ' Interne Pullup Widerstände setzten für Taster Pin 0 & 1 Portb = &H03 ' 65536-56320 = 9216*0.27127us = 2,5ms * 8(Vorteiler) = 20ms Const Reload = 56320 ' 1 Timertakt = 2,17us Config Timer1 = Timer , Prescale = 8 Timer1 = Reload On Timer1 Timer1_isr Enable Timer1 Enable Interrupts Dim Winkel As Word Winkel = 700 ' Hauptprogrammschleife Do If Pinb.1 = 0 Then ' ist Schalter an Pin 2 Port D gedrückt If Winkel > 300 Then Winkel = Winkel - 1 ' 0,65 ms Elseif Pinb.0 = 0 Then ' ist Schalter an Pin 3 Port D gedrückt If Winkel < 1100 Then Winkel = Winkel + 1 ' 2,38 ms End If Waitms 2 Loop End Timer1_isr: If Pinc.0 = 1 Then ' Pause ca. 20 ms Portc.0 = 0 Timer1 = Reload Else ' Impuls 0ms bis 2ms Portc.0 = 1 Timer1 = 65536 - Winkel End If Return
© 05.12.2007 Hans-Jürgen Jacob (Pirna)
|
|