PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit Timer2 und ISR



stormracer
23.01.2008, 16:35
Moin,

ich lese mich schon seit drei Tagen hier durchs Forum, finde aber meinen Fehler nicht.

Ich versuche ein Soft-PWM mit dem Timer2 zu programmieren. Timer1 ist schon belegt. Ist für eine Servo Ansteuerung.
Der Quelltext ist kaum verändert aus dem RN-Wissen Servo (https://www.roboternetz.de/wissen/index.php/Servo) Beispiel, nur leider wird die ISR nie aufgerufen.
Habe mittlerweile keine Ahnung mehr, was ihm noch fehlt. Ist ein ATMega32 und ich programmiere unter Linux, deswegen kann ich dann Quelltext nicht simulieren.



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

#define F_CPU 16000000

#define SERVOPIN 3
#define SERVOPORT PORTB
#define DDRSERVO DDRB

volatile unsigned char servopos;
volatile unsigned int count=0;

void delay_ms(unsigned int ms);
void servo_init();


ISR(TIMER2_COMP_vect)
{
PORTC=~0x0f;
delay_ms(10);
PORTC=~0x00;
}

int main (void)
{
init_USART();
servo_init();
sendUSART("Hallo\r\n");

DDRC=0xff;

int n=0;
char buffer[5];

while(1)
{
PORTC=~0x01;
for(n=0; n<150; n++)
{
servopos=100;
// delay_ms(100);
sendUSART("run\r");
itoa(count,buffer,10);
sendUSART(buffer);
}
}
return 0;
}

void servo_init()
{
TIMSK |= (1<<TOIE2);
TCCR2 = (1<<WGM21) | (1<<CS20); //Prescale=1, CTC mode
OCR2 = F_CPU/1600000; //alle 10µS ein IRQ
DDRSERVO|=(1<<SERVOPIN);
sei();
}

void delay_ms(unsigned int ms)
{
unsigned int zaehler;

while (ms)
{
zaehler = F_CPU / 5000;

while (zaehler) {
asm volatile("nop");
zaehler--;
}
ms--;
}
}


Habe das RN-Control an Port C sind LEDs, testweise habe ich einfach das LED Blinken mit in die ISR gepackt. Die Text Ausgabe über UART fliegt auch wieder raus, wenn#s funktioniert.

Danke

McJenso
23.01.2008, 21:14
Hallo,

TOIE -> timer overflow interrupt enable [-X

Gruß

Jens

stormracer
23.01.2008, 21:44
Hallo Jens,
danke für den Hinweis, wäre ich ja nie drauf gekommen ](*,) !
Mit TIMSK |= (1<<OCIE2) funktioniert's jetzt!

Aber dann steht das im RN-Wissen Artikel auch falsch, kann man das irgendwie anmerken?

Großes THX Christian