Ansteuerung eines Servos mit dem Attiny2313
Verfasst: Fr 6. Mai 2011, 13:02
Zur Steuerung eines Servos wird hier der 16-Bit-Timer/Counter1 eingesetzt; der Timer/Counter0 ist mit seinem 8-Bit-Zähler zu ungenau. Über Pulsweitenmodualtion (PWM) werden die vom Servo benötigten Signale erzeugt. Im beigefügten Video erhält man einen ersten Eindruck von der Funktionsweise der Servoansteuerung.
Es folgt ein entsprechendes Programm: Über die serielle Schnittstelle nimmt es einen Stellwert zwischen 100 (für 1 ms Pulsweite) und 200 (für 2 ms Pulsweite) entgegen. Man sieht, dass nach der Initialisierung der Timer1-Komponente nur eine einzige(!) BASCOM-Befehlszeile zur Steuerung der Pulslänge erforderlich ist; hier wird der 16-Bit-Vergleichswert in das Doppelregister OCR1B geschrieben (Bei BASCOM erfolgt der Zugriff über den Bezeichner Compare1b.) Weitere Einzelheiten finden sich unter https://www.g-heinrichs.de/attiny/servo_folien.pdf.
Natürlich liefert BASCOM auch spezielle SERVO-Befehle. Allerdings benötigen diese mehr Speicherplatz.
Es folgt ein entsprechendes Programm: Über die serielle Schnittstelle nimmt es einen Stellwert zwischen 100 (für 1 ms Pulsweite) und 200 (für 2 ms Pulsweite) entgegen. Man sieht, dass nach der Initialisierung der Timer1-Komponente nur eine einzige(!) BASCOM-Befehlszeile zur Steuerung der Pulslänge erforderlich ist; hier wird der 16-Bit-Vergleichswert in das Doppelregister OCR1B geschrieben (Bei BASCOM erfolgt der Zugriff über den Bezeichner Compare1b.) Weitere Einzelheiten finden sich unter https://www.g-heinrichs.de/attiny/servo_folien.pdf.
Code: Alles auswählen
' Datei für Attiny-Platine von E. Eube, G. Heinrichs und U. Ihlefeldt
' Servo per Serieller Schnittstelle steuern
' Rechter Anschlag (1,0 ms): 100
' Linker Anschlag (2,0 ms): 200
' Waschstraßenplatine
'----------------------------------------------------------------------------
$regfile = "attiny2313.dat" 'Attiny2313
$crystal = 4000000
$baud = 9600 '4 MHz
'**********************************************************
'******************* Deklarationen ************************
Dim Eingabe As Byte
Dim Pulsweite As Word
'****************** Initialisierung ***********************
Ddrb = &B11111111 'Port B als Ausgangsport
Ddrd = &B01110000 'D4, D5, D6 als Ausgang; Rest als Eingang
Portd = &B10001111 'Eingänge auf high legen
Tccr1a = &B00100011
Tccr1b = &B00011010
Compare1a = 10000 'Maximalwert
Compare1b = 750 ' Vergleichswert -> Mittelstellung
'**********************************************************
'******************** Hauptprogramm ***********************
Do
Inputbin Eingabe
Pulsweite = Eingabe * 5
Compare1b = Pulsweite
Loop