Gast
#1037905
Hallo liebe Leute,
ich bin noch neu in der Mikrokontroller geschichte aber ich gebe mein
bestes. ich brauche eine kleine erklärung was in den folgenden zeilen
passiert. es handelt sich um eine PWM (bzw PDM) modulation das programm
funktoniert bei mir ich möchte nur verstehen wie es funktioniert.
Vielen Dank für eure Hilfe
ISR (TIMER0_OVF_vect)
{
uint8_t PdmState= 0;
uint8_t PdmBuf= PdmCompare;
if (PdmField[0] >= PdmBuf) PdmState|= (1<<CH1); //compare channels
if (PdmField[1] >= PdmBuf) PdmState|= (1<<CH2);
if (PdmField[2] >= PdmBuf) PdmState|= (1<<CH3);
if (PdmField[3] >= PdmBuf) PdmState|= (1<<CH4);
if (PdmField[4] >= PdmBuf) PdmState|= (1<<CH5);
if (PdmField[5] >= PdmBuf) PdmState|= (1<<CH6);
if (PdmField[6] >= PdmBuf) PdmState|= (1<<CH7);
if (PdmField[7] >= PdmBuf) PdmState|= (1<<CH8);
OUTPORT= PdmState;
if (PdmBuf &(1<<7))
{
PdmBuf++; //increment compare register
PdmBuf &= ~(1<<7); //clear MSB
if (PdmBuf == 0) PdmBuf= 0x80;
}
else PdmBuf |= (1<<7); //set MSB
PdmCompare= PdmBuf;
############################
CH1 ist PB0 usw.
TCCR0 = (1<<CS00); //set T0 @sys clk
TIMSK |= (1<<TOIE0); //enable overflow irq
Vielen Dank für eure Hilfe