BASCOM-Quellcode
- ' BASCOM-Programm
- '
- ' Servo-Ansteuerung mit einem Timer
- ' Status 27.04.2019 Eingang und Ausgang ok.(Print ausgeschaltet)
- ' linkeranschlag wert abgesenkt
- ' S1 (messwert des Empfängers verdoppelt)
- '
- '
- $regfile = "m8def.dat"
- $crystal = 1000000
- $hwstack = 32 ' default use 32 for the hardware stack
- $swstack = 10 ' default use 10 for the SW stack
- $framesize = 40 ' default use 40 for the frame space
- $baud = 9600
- ' Bei Timer1 (65536) mit 1 MHz und Prescaler=8
- ' 1 Tick: 1/1000000 *8 =8us
- ' 65536 - 63036 = 2500 * 8us = 20ms
- ' 65536 - 65411 = 125 * 8us = 1ms
- ' 65536 - 65286 = 250 * 8us = 2ms
- Ddrb = &B00001110 'B0 ist Eingang B1 Servo Ausgang'
- Servo1 Alias Portb.1
- Dim S1 As Word
- Const 20ms = 63036
- Const Rechteranschlag = 65411 '1ms
- Const Linkeranschlag = 65166 '-120 '2ms Differenz=125
- Config Timer1 = Timer , Prescale = 8
- Timer1 = 20ms
- On Timer1 Timer1_isr
- Enable Timer1
- Enable Interrupts
- Dim Servo As Word
- Dim Analogwandler As Integer 'Variable zur Aufnahme des Wertes vom Analogwandler
- Config Adc = Single , Prescaler = Auto , Reference = Avcc 'Analogwandler definieren
- Start Adc 'AD-Wandler starten (nach Config automatisch)
- Do
- Pulsein S1 , Pinb , 0 , 1 'Pulsbreite wird gemessen
- 'Print S1 'nur zum Auslesen nutzen !!!
- ' Analogwandler = Getadc(0) für Poti steurung '0..1023
- Servo = S1 * 2 'Analogwandler / 8
- Loop
- End
- Timer1_isr:
- If Pinb.1 = 1 Then 'wenn 1 war
- Portb.1 = 0 'dann aus und
- Timer1 = 20ms ' Pause ca. 20 ms
- Else 'sonst
- Portb.1 = 1 'Impuls
- Timer1 = Linkeranschlag + Servo ' für 1ms bis 2ms
- End If
- Return
Danke für die Hilfe !!