Gast
#1580411
hallo,
ich wende mich noch an alle an, und hoff könnt ihr mir noch helfen. ich
will an atemga88 mittel taster die pulsbreite meiner pwm ansteuer d.h
durch z.b drück des taster s1 die puslbreite schmaller ist bwz. s2
umgekehrt; diepulsbreite sollte sich zwischen 4ms und 20ms verändern .
ich habe das ganze mit dem timer1, um meine frequenz gleich zu halten
hab ich den top-wert an icr1 gemacht. jetzt weiss ich sollt einfach den
ocr1b in der whileschleife durch die passende befehle um mittel taster
zu steuern,anspielen lassen. aber das funktioniert nicht, und ich
verstehe net wo der fehler sein könnte.
so sieht das code aus.
// Funktion Tastenentprellen
// ----------------------------------
inline uint8_t debounce(volatile uint8_t *port, uint8_t pin)
{
if(!(*port & (1<<pin)))
{
_delay_ms(100);
if((*port &(1<<pin)))
{
_delay_ms(100);
return (true);
}
}
return 0;
}
int main (void)
//Hauptprogramm
{
DDRB |= (1 << PB2);
TCCR1A |= (1<<COM1B0)|(1<<COM1B1) ;
TCCR1B |= (1<<WGM13)|(1<<CS10)|(1<<CS12);
ICR1 = 450;
while(1)
{
OCR1B=340;
ButtonControl();
if(S1)
{ OCR1B=OCR1B+10;
S1=false;
}
if(S2)
{OCR1B=OCR1B-10;
S2=false;
}
return 0;
}
}
void ButtonControl()
{
char SavePORTC = PORTC;
char SaveDDRC = DDRC;
PORTC |= (1<<PC0) | (1<<PC1) ;
DDRC &= ~((1<<DDC0) | (1<<DDC1));
if (debounce(&PINC, PC0)) //Taste S1
{S1=true;
}
if (debounce(&PINC, PC1)) //Taste S2
{S2=true;
}
PORTC = SavePORTC;
DDRC = SaveDDRC; // Laden des alten Portzustandes
}
danke