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