Guten Tag,
Also ich hab bei mir einige LED-Leisten die dimme ich zu zeit mit einem ATMega8
der meine 0-5v in PWM umwandelt.
Mein Problem ist jetzt das die Dimmstufen ziemlich ruckelig sind besonders im unteren Bereich.
Ich selber kenn mich fast gar nicht mit der Programmierung von µC aus.
Den jetzigen Code hat mir ein freundliches Mitglied von http://www.mikrocontroller.net geschrieben
ist aber schon über ein Jahr her.
Hab natürlich wieder nachgefragt, ob jemand mein Code editieren kann, hat sich aber keiner gemeldet.
Nur wurde mir geraten mich paar Monate damit zu beschäftigen, bis ich es selber kann. Leider habe ich nich die Zeit dafür.
Deswegen wollte ich hier mal nachfragen, ob jemand hier so freundlich ist und mein Code editieren kann.
Die LED,s sollen jetzt logarithmisch gedimmt werden. Wie hier beschrieben http://www.mikrocontroller.net/articles/LED-Fading.
Sollte mein Problem beheben oder ?
Hier der aktuelle code:
#define PC1 1
#define PC0 0
#include <avr/io.h>
#include <stdio.h>
unsigned char adc_read8(char channel);
int main(void)
{
//PC4,5 output
DDRB = (1<<DDB1) | (1<<DDB2);
//TIMER 1
ICR1 = 255;
TCCR1A = (1<<COM1A1) | (1<<COM1B1) | (1<<COM1A0) | (1<<COM1B1) | (1<< WGM11); //Fast PWM, TOP = ICR1, Clear on Compare Match
TCCR1B = (1<<WGM13) | (1<<WGM12) | (1<<CS11) | (1<<CS10); //Prescaler 64 //Fast PWM, Prescaler 256
//ADC
ADMUX = (1<<REFS0) | (1<<ADLAR); //VRef = AVCC
ADCSRA = (1<<ADPS2) | (1<<ADPS1) | (1<<ADEN); // 125 kHz @ 8 Mhz, ADC enabled
ADCSRA |= (1<<ADSC);
while (ADCSRA & (1<<ADSC));
unsigned int i = 0;
while(1)
{
if (~i)
{
OCR1A = 255-adc_read8(PC0);
OCR1B = 255-adc_read8(PC1);;
}
i++;
}
}
unsigned char adc_read8(char channel)
{
ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F);
ADCSRA |= (1<<ADSC);
while (ADCSRA & (1<<ADSC));
return ADCH;
}
Alles anzeigen
Vielen Dank im Voraus