Hallo Leute,
Ich hab neulich angefangen, mit Mikrocontrollern zu experimentieren und hab mir nen Atmega 16 gekauft... Zusätzlich benutze ich das Buch von Elektor "AVR Hardware und C-Programmierung in der Praxis". Ich habe jetzt angefangen mit PWM zu arbeiten. Allerdings schaffe ich es nicht, dass sich der OCR0 Wert verändert. Ich habe folgendes Programm:
Code:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
uint8_t wert;
void delay_ms(uint16_t ms)
{
for(uint16_t t=0; t<=ms; t++)
_delay_ms(1);
}
// Timer/Counter0 Overflow
ISR (TIMER0_OVF_vect)
{
PORTD |= (1 << PD0); // PD0 ein
}
// Timer/Counter0 Compare Match
ISR (TIMER0_COMP_vect) // Wenn OCR0 Wert erreicht wird
{
PORTD &= ~(1 << PD0); // PD0 aus
}
void main(void)
{
DDRD |= (1 << DDD0) | (1 << DDD1) ; // PORTB als Ausgang
wert = 10;
TIMSK |= (1 << TOIE0) | (1 << OCIE0); // IRQ bei Überlauf + Compare Match
OCR0 = wert; // Vergleichswert 128 einstellen
sei(); // IRQs enable
PORTD |= (1 << PD0); // PB0
TCCR0 |= (1 << CS02); // Prescaler: 1/1024 (CS1=0 per default) (1 << CS00) |
while (1); // endlos
{
delay_ms(100);
if(wert >= 240)
wert = 10;
else
wert++;
OCR0 = wert;
}
return 0;
}
Der Sinn ist, eine LED zu faden... also von dunkel bis hell. Aber es klappt nicht. Der Wert von OCR0 verändert sich nicht.
Vielen Dank schonmal im voraus.
MfG
RP6fahrer
Lesezeichen