Ich habe bei einem Attiny 45 auch Probleme (ist der gleiche nur mit mehr Flash). Wollte nur einen Analogwert einlesen und damit den PWM Kanal ansteuern. hat nicht funktioniert bis ich beim Analogkanal den Prescaler geändert habe. Zuerst habe ich den Prescaler so belassen (der Prescaler sollte laut DB 2 betragen). Jetzt habe ich den Prescaler auf 16. Das Komische daran war, dass er immer in die Interruptroutine eingestiegen ist, aber die PWM hat sich nicht geändert. Hier habe ich das Programm. Funktioniert auf einem Attiny 45.
Code:
#include <avr/interrupt.h>
#include <util/delay.h>
volatile unsigned int adc_value, adc_min, i;
ISR(ADC_vect)
{
adc_value = ADCH;
PORTB ^= (1<<PB1);
}
int main(void)
{
PORTB |= (1<<PB3)|(1<<PB4);
DDRB |= (1<<PB0)|(1<<PB1);
ADMUX = (1<<REFS1)|(1<<ADLAR)|(1<<MUX0);
ADCSRA = (1<<ADEN)|(1<<ADSC)|(1<<ADIE)|(1<<ADPS2);
TCCR0A |= (1<<WGM00)|(1<<WGM01)|(1<<COM0A1)|(1<<COM0A0);
TCCR0B |= (1<<CS02);
sei();
while(1)
{
ADCSRA |= (1<<ADSC);
adc_value = 255 - adc_value;
OCR0A = adc_value;
_delay_ms(100);
}
}
MfG Hannes
Lesezeichen