PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Software PWM



wenckstar
25.06.2012, 18:04
Hallo hab mal eine Frage an euch!
Bei dieser Fehlermeldung verweist er mich immer in die BaseLib.h
ISR (TIMER0_COMP_vect) wird dort ja schon verwendet, deshalb die Fehlermeldung, oder?
Timer 1 würde gehen, aber da funktioniert das Progr. nicht mehr richtig. Da dreht der servo nur in eine Richtung, wenn ich die Werte verändere.
Auf dem Breadboard mit einen Controller hat es vorher funktioniert.
Kann mir jemand helfen, das wäre echt super.



Fehlermeldung:

../../RP6Lib/RP6base/RP6RobotBaseLib.o: In function `__vector_10':
C:\Users\Patrice\Documents\RP6Examples_20080915\RP 6Programme\pwm25.06.2012/../../RP6Lib/RP6base/RP6RobotBaseLib.c:1463: multiple definition of `__vector_10'
PWM1.o:C:\Users\Patrice\Documents\RP6Examples_2008 0915\RP6Programme\pwm25.06.2012/PWM1.c:27: first defined here

Ausschnitt aus der "RP6RobotBaseLib.h"*


ISR (TIMER0_COMP_vect)
{
#ifdef POWER_ON_WARNING
static uint16_t leds_on_timer = 0;
#endif

// 16bit timer (100µs resolution)
timer++;

// Blocking delay (100µs):
delay_timer++;

// All 1ms based timing stuff
if(ms_timer++ >= 10) { // 10 * 100µs = 1ms
// 16bit Stopwatches:
if(stopwatches.watches & STOPWATCH1)
stopwatches.watch1++;
if(stopwatches.watches & STOPWATCH2)
stopwatches.watch2++;
if(stopwatches.watches & STOPWATCH3)


Programm:

#include "RP6RobotBaseLib.h"
#include <avr/io.h>
#include <avr/interrupt.h>






// Timer/Counter0 Overflow
ISR (TIMER0_OVF_vect)
{
PORTA |= (1 << PA1); // PA1 ein
}

// Timer/Counter0 Compare Match
ISR (TIMER0_COMP_vect)
{
PORTA &= ~(1 << PA1); // PA1 aus
}

int main(void)
{
initRobotBase();
powerON();

DDRA = (1 << DDA0); // PORTA als Ausgang

TIMSK |= (1 << TOIE0) | (1 << OCIE0); // IRQ bei Überlauf + Compare Match
OCR0 = 23; // Vergleichswert XXX einstellen
sei(); // IRQs enable
PORTA |= (1 << PA1); // PB1 ein
TCCR0 |= (1 << CS00) | (1 << CS01); // Prescaler: 1/64 (CS1=0 per default)

while (1); // endlos
return 0;
}