Hallo RN,
ich hab radbruchs videos gesehen, in denen er seinen RP6 ferngesteuert hat. ich hab seine programme ausprobiert aber bei mir funktionieren die iwie nicht (empfänger ist richtig angeschlossen).. also hab ich mir gedacht, versuche ich selbst ein programm zu schreiben. erst mal eins zum auslesen der "Servopostitionen"
Hier das Programm:
Code:
#include "RP6ControlLib.h"
uint16_t speed=0;
uint16_t dir=0;
uint16_t speedcount=0;
uint16_t dircount=0;
ISR(TIMER1_COMPA_vect)
{
if (PINA & ADC5)
{
speedcount++;
}
else
{
if (speedcount > 0)
{
speed=speedcount;
}
speedcount=0;
}
if (PINA & ADC3)
{
dircount++;
}
else
{
if (dircount > 0)
{
dir=dircount;
}
dircount=0;
}
}
void initRC(void)
{
TCCR1A = (0 << WGM00) | (1 << WGM01); // CTC-Mode
TCCR1A |= (0 << COM00) | (0 << COM01); // ohne OCR-Pin
TCCR1A |= (0 << CS02) | (1 << CS01) | (0 << CS00); // prescaler /8
TIMSK |= (1 << OCIE1A); // Interrupt ein
OCR1A = 9; // 100kHz?
}
int main(void)
{
initRP6Control();
initLCD();
initRC();
while(1)
{
writeInteger(speed, DEC);
writeString("\t\t");
writeInteger(dir, DEC);
writeString("\n");
}
return 0;
}
Es soll nur messen wie lange die Ports high sind und das dann ausgeben, aber irgendwie bekomm ich immer nur 0en raus...
mein empfänger bekommt strom, denn wenn ich testweise eine servo dranhänge bewegt er sich einwandfrei.
ich hoffe ihr könnt mir helfen den Fehler zu finden, denn ich hab keine lust mich morgen auch nochmal den ganzen Tag hinzusetzen..
könnte es sein dass es an der Timerinitaliesierung liegt ?? die hab ich nämlich nicht selbst geschrieben (kenn mich mit dem Bitschubsen nicht aus), die ist noch von Radbruchs Programm...
Lesezeichen