Hier ein Besipiel zu Thema Programmieren in C, nur zur Anregung.
So sieht es aus, wenn man einen Servo testen will
Mit Impulszeit verkürzen oder verlängern wird der Servo nach links oder rechts gesteuert (Also Schranke auf oder zu, Signal auf oder ab oder
Weiche rechts links)
Ich habe das Programm zum Testen des Servo verwendet.
Wer sich also damit plagen will, das script könnte als Kern für eine Servoansteuerung dienen, aber das muss noch eine Reihe verbessert werden. (Alle anderen schnell überfliegen)
#define F_CPU 1000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
ISR( TIMER1_COMPA_vect ) // Interruptbehandlungsroutine
{
OCR1A = 2500-OCR1A; // Das Servosignal wird aus der Differenz von
// Periodenlänge (2500*0,008ms=20ms) und letztem
// Vergleichswert (OCR1A) gebildet
}
int main (void)
{
DDRD = 0b00000000;
DDRC = 0b11111111;
DDRB = 0b10111110;
PORTB = (1<<PB6) | (1<<PB0); // Pullup für PB0 und PB1
// aussschließen von Stösignalen beim Einschalten
TCCR1A = (1<<COM1A0); // Togglen bei Compare Match
TCCR1B = (1<<WGM12) | (1<<CS11); // CTC-Mode; Prescaler 8
TIMSK = (1<<OCIE1A); // Timer-Compare Interrupt an
OCR1A = 2312; // Neutralposition ((2500-2312)*0.008ms)=1,5ms)
sei(); // Interrupts global an
while( 1 ) {
if ( !(PINB & (1<<PINB0)) ) { // Impuls-Zeit verlängern
cli();
OCR1A = OCR1A + 1;
sei();
// _delay_ms(50);
}
if ( !(PINB & (1<<PINB6)) ) { // Impuls-Zeit verkürzen
cli();
OCR1A = OCR1A -1;
sei();
// _delay_ms(50);
if ( !(PIND & (1<<PIND0)) ) PC0=OCR1A;
}
_delay_ms(18); // an das Ende, wegen der Vibrationen
}
return 0;
}