Software PWM problem...
Postat: 4 juni 2006, 01:24:54
Hej all!
Jag har gjort en software PWM som inte vill fungera som jag vill...
Det är så att själva PWMen fungerar som den ska men inte styrningen.
Problemet är när jag försöker få ett ljus att lysa fullt sen bli svagare som går i en loop upp å ner så stannar den på första "steget" och ändrar sig inte ett dugg.
Vad kan felet vara?
Koden (OSCCAL_calibration() är inte med för att den är stor och onödig att ha med):
//Emil
Jag har gjort en software PWM som inte vill fungera som jag vill...
Det är så att själva PWMen fungerar som den ska men inte styrningen.
Problemet är när jag försöker få ett ljus att lysa fullt sen bli svagare som går i en loop upp å ner så stannar den på första "steget" och ändrar sig inte ett dugg.
Vad kan felet vara?
Koden (OSCCAL_calibration() är inte med för att den är stor och onödig att ha med):
Kod: Markera allt
#include <avr/interrupt.h>
#include <avr/delay.h>
#include <avr/signal.h>
#include <inttypes.h>
void OSCCAL_calibration(void);
typedef volatile unsigned char BYTE;
BYTE dutyCycle = 0;
BYTE tickCount = 0x00;
int main(void)
{
OSCCAL_calibration();
DDRD = 0xFF;
// Increase the oscillator to 2 Mhz for timer:
CLKPR = (1<<CLKPCE); // set Clock Prescaler Change Enable
// set prescaler = 4, Inter RC 8Mhz / 4 = 2Mhz
CLKPR = (1<<CLKPS1);
// Initialize Timer0.
// Enable timer0 compare interrupt
TIMSK0 = (1<<OCIE0A);
// Sets the compare value
OCR0A = 1;
// Set Clear on Timer Compare (CTC) mode, CLK/8 prescaler
TCCR0A = (1<<WGM01)|(0<<WGM00)|(1<<CS01);
while(1)
{
for(int i = 1; i <= 255; i++)
{
dutyCycle = i;
_delay_loop_2(10000);
}
for(int i = 254; i > 1; i--)
{
dutyCycle = i;
_delay_loop_2(10000);
}
}
return 0;
}
SIGNAL(SIG_OUTPUT_COMPARE0)
{
if (tickCount == 0) {
PORTD = 0xFF;
}
if (tickCount == dutyCycle) {
PORTD = 0x00;
}
tickCount++;
}