PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie kann ich einen 10bit Wert zur PWM verwenden



sloti
05.01.2008, 12: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

sloti
05.01.2008, 17:16
Ich hab jetzt eine Lösung gefunden, ich rechne den 10bit wert einfach in einen 8bit wert um (also durch 4), das funktioniert wunderbar, aber geht das nicht auch direkt? Das muss ja gehen sonst würden sie ja gar kein 10 bit modus "anbieten". Aber wie übergibt man da die Parameter?

mfg
Erik