Servus,
Ich wollte testweise den Servo über die Erweiterungsplatine ansteuern.
Das gleiche Programm wie vorher nur wollte ich ADC2 nehmen.
In den Schaltplänen ist er auf PA2.
Es lässt sich auch nich compilieren.
Fehler: undefined reference to initRP6Control
Hab ich einen Denkfehler oder habt ihr eine andere Idee?
Code:
// Servoansteuerung mit Timer1 31.1.2010 mic
// Einfach und elegant, warum finde ich das erst jetzt? Timer1 (RP6-Motoransteuerung)
// läuft ja sowieso im Hintergrund. Deshalb kann man die "klassische" Servoansteuerung
// in die Overflow-ISR einbauen und mit ca. 19kHz aufrufen lassen. Timersetup der Lib:
// Mode 10, Phase Correct mit ICR1 als Top ergibt bei ICR1=210 ca. 8MHz/420=19047,6Hz ;)
// Drehbereich meiner RS-2-Servos ist von ca. 14 bis ca. 38
#include "RP6ControlLib.h"
volatile uint8_t servo1, servo2, servo3, p; // Servopositionen und Impulszähler
uint8_t c; // ein Char zur freien Verfügung
int main(void)
{
initRP6Control();
servo1=servo2=servo3=26; // Servomitte?
TIMSK |= (1 << TOIE1); // Die Timer1 Overflow-ISR zur Servoansteuerung
DDRA |= (ADC2); // Servopins auf Ausgang setzen
// DDRC |= (SCL); Herausgenommen
setLEDs(1); // und los!
startStopwatch1();
startStopwatch2();
startStopwatch3();
while(1)
{
{
servo1=servo2=servo3=26; // mitte
p=50; while(p); // warten bis 50 Impulse gesendet (ca. 1 Sek.)
servo1=servo2=servo3=14; // links
p=50; while(p);
servo1=servo2=servo3=38; // rechts
p=50; while(p);
}
}
return 0;
}
ISR (TIMER1_OVF_vect)
{
static uint16_t servocount=1;
if(servocount > servo1) PORTA &= ~ADC2; else PORTA |= ADC2; // PA2
// if(servocount > servo2) PORTC &= ~SCL; else PORTC |= SCL; // PC0 XBUS 10 Herausgenommen
// if(servocount > servo3) PORTC &= ~SDA; else PORTC |= SDA; // PC1 XBUS 12 Herausgenommen
if(servocount < 400) servocount++; else {servocount=1; if(p) p--;} // p = 1/50 Sek
}
gruß derpfälzer
Lesezeichen