Nu behöver jag lite hjälp med min C-kod. Jag programmerar en ATmega328P (AVR). Tanken är att med timer0 generera en PWM-signal på pin D5. uC clockfrekvens är 1MHz och jag sätter PWM-signalens frekvens till 488Hz (prescaler = 8 ).
Kod: Markera allt
TCCR0A = ((1<<WGM01)|(1<<WGM00)); // Fast PWM mode
TCCR0A |= (1<<COM0B1); // PIND5 sätts som ut-pin
TCCR0B = (1<<CS01); // Prescaler=8 => PWM-freq = 488Hz. (Fclk = 1MHz)
Med följande anrop ser utsignalen hur fin ut som helst på osciloskopet:
Kod: Markera allt
OCR0B = 128; // Anger duty cycle
Kod: Markera allt
OCR0B = calcPower(LANE_1,128);
uint8_t calcPower(eLane lane,uint16_t value)
{
double res=0;
uint32_t ret = 0;
if(lane == LANE_1)
{
res = ((double)(1023*value)/(double)maxPower1) + ((double)(maxTrim1*value)/(double)maxPower1) - ((double)(minTrim1*value)/(double)maxPower1) + (double)minTrim1;
ret = res;
}
if(ret>1023)
ret = 1023;
ret = (double)ret*(double)256/(double)1024; // PWM-signalens duty cycle måste ges ett värde på 0-255 (8 bitar).
return (uint8_t)ret;
}
Vad är det i min funktion som kvaddar PWM-utsignalen?
Tacksam för hjälp.