Mikrocontroller Startseite >> [AVR Peripherie] >> [Servo] >> Beispiel in BASCOM mit myAVR


Bild zum Anschluß eines Servos an das myAVR Board

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-Befehl

DownloadDownload

' 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 Timer

DownloadDownload

' 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


[Impressum] [Kontakt] [Links] [Home]
© 05.12.2007 Hans-Jürgen Jacob (Pirna)