sloti
05.01.2008, 13:41
Hallo ich bins nochmal,
Ich hab mich jetzt mal an die Programierung eines AVR gemacht und komm auch ganz gut voran. Bisher hab ich Ports an und ausgeschaltet sowie eingelese usw. Dann habe ich mich an den ADC gemacht und hatte damit auch keine Probleme. Nun wollte ich ein LED über mit PWM dimmen das hat mit einem 8bit wert auch wunderbar geklapt. Nun wollte ich aber den 10bit Wert des ADC wandlers als PWM vergleichswert nehmen. Da stoß ich irgendwie an meine Grenzen eigentlich müsste ich doch im TCCR1A register die bits 0 und 1, also wgm10 und wgm11 setzten um den PWM in den 10 bit modus zu setzten und dann im register TCCR1B 1024 als vorteiler konfigurieren, dazu muss ich dann bit 0 und 2 setzten (cs10 und cs12). So wenn das so richtig ist was ich erzählt habe dann kommt mein Problem. Jetzt weiß ich nicht wie ich jetzt den 10bit wert aufteile um ihn in die vergleichswertregister (OCR1AH und OCR1AL) zu schreiben. Hier mal meine Codes:
#define F_CPU 3686400
#include <avr\io.h>
void init(void)
{
DDRB |= 0xFF ; //Port B Ausgang
DDRD = 0x00; //Port D Eingang
PORTD = 0xFF; //Pull Up widerstand an PD
DDRC = 0x00;
ADCSRA = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1);
TCCR1A= 0x83;
TCCR1B =0x05;
}
void Dimmer (void)
{
ADMUX = 0x00;
ADCSRA |= (1 << ADSC);
while (!(ADCSRA & (1 << ADIF)));
ADCSRA |= (1 << ADIF);
ADCH=OCR1AH;
ADCL=OCR1AL;
}
int main (void)
{
unsigned int x;
init();
while (1)
{
Dimmer();
}
return 0;
}
ich hab jetzt nur die Ausschnitte genommen die von Bedeutung sind. In dem Versuch hab ich versucht die beiden ADC ausgabe register (high und low) in die vergleichswert register von der PWM zu Laden das klappt aber ncicht. Wär nett wenn mir jemand helfen könnte.
mfg
Erik
Ich hab mich jetzt mal an die Programierung eines AVR gemacht und komm auch ganz gut voran. Bisher hab ich Ports an und ausgeschaltet sowie eingelese usw. Dann habe ich mich an den ADC gemacht und hatte damit auch keine Probleme. Nun wollte ich ein LED über mit PWM dimmen das hat mit einem 8bit wert auch wunderbar geklapt. Nun wollte ich aber den 10bit Wert des ADC wandlers als PWM vergleichswert nehmen. Da stoß ich irgendwie an meine Grenzen eigentlich müsste ich doch im TCCR1A register die bits 0 und 1, also wgm10 und wgm11 setzten um den PWM in den 10 bit modus zu setzten und dann im register TCCR1B 1024 als vorteiler konfigurieren, dazu muss ich dann bit 0 und 2 setzten (cs10 und cs12). So wenn das so richtig ist was ich erzählt habe dann kommt mein Problem. Jetzt weiß ich nicht wie ich jetzt den 10bit wert aufteile um ihn in die vergleichswertregister (OCR1AH und OCR1AL) zu schreiben. Hier mal meine Codes:
#define F_CPU 3686400
#include <avr\io.h>
void init(void)
{
DDRB |= 0xFF ; //Port B Ausgang
DDRD = 0x00; //Port D Eingang
PORTD = 0xFF; //Pull Up widerstand an PD
DDRC = 0x00;
ADCSRA = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1);
TCCR1A= 0x83;
TCCR1B =0x05;
}
void Dimmer (void)
{
ADMUX = 0x00;
ADCSRA |= (1 << ADSC);
while (!(ADCSRA & (1 << ADIF)));
ADCSRA |= (1 << ADIF);
ADCH=OCR1AH;
ADCL=OCR1AL;
}
int main (void)
{
unsigned int x;
init();
while (1)
{
Dimmer();
}
return 0;
}
ich hab jetzt nur die Ausschnitte genommen die von Bedeutung sind. In dem Versuch hab ich versucht die beiden ADC ausgabe register (high und low) in die vergleichswert register von der PWM zu Laden das klappt aber ncicht. Wär nett wenn mir jemand helfen könnte.
mfg
Erik