Witam,
Mam problem ze sterowaniem podświetlenia przez PWM w Attiny2313. Steruję masą poprzez tranzystor BS170 (źródło - masa, brama - do OC1A poprzez rezystor 100R, dren do masy podświetlenia).
Konfiguracja PWM:
Główna funkcja:
Wszystko zmienia dobrze gdy nie jest podłączony rezystor do uC(czyli podświetlenie odłączone), zmienna się zwiększa i zmniejsza dobrze. Problemy występują gdy wszystko jest podłączone, podczas zwiększania lub zmniejszania zmiennej czasami przeskakuje o 2 zamiast o 1 również podświetlenie szaleje. Czyżby było potrzeba wyłączyć
Mam problem ze sterowaniem podświetlenia przez PWM w Attiny2313. Steruję masą poprzez tranzystor BS170 (źródło - masa, brama - do OC1A poprzez rezystor 100R, dren do masy podświetlenia).
Konfiguracja PWM:
PORTB &= ~_BV(PB3);
DDRB |= _BV(PB3); // konfiguracja wyjścia
TCCR1A = _BV(COM1A1)|_BV(COM1A0)|_BV(WGM10)|_BV(WGM12); //fast pwm 8 bit
TCCR1B = (1 << CS10); // preskaler 1Główna funkcja:
int main(void)
{
int volatile i = 5; // podświetlenie od 0 do 10
unsigned char* str;
PWMint();
DDRD &= ~_BV(PD3)|~_BV(PD4);
PORTD |= _BV(PD3)|_BV(PD4); // dwa przyciski
LCD_Initalize(); // inicjacja wyświetalcza
while(1) //główna pętla
{
OCR1 = i*25+5;
if(bit_is_clear(PIND,PD3)) // zmniejsz podświetlenie
{
_delay_ms(80);
if(i>0){
i--;
itoa(i, str, 10);
LCD_Clear();
LCD_WriteText(str); // wyświetla stan podświetlenia
}
while(bit_is_clear(PIND,PD3)) {}
_delay_ms(80);
}
if(bit_is_clear(PIND,PD4)) // zwiększ podświetlenie
{
_delay_ms(80);
if(i<10)
{
i++;
itoa(i, str, 10);
LCD_Clear();
LCD_WriteText(str); // wyświetla stan podświetlenia
}
while(bit_is_clear(PIND,PD4)) {}
_delay_ms(80);
}
}
}Wszystko zmienia dobrze gdy nie jest podłączony rezystor do uC(czyli podświetlenie odłączone), zmienna się zwiększa i zmniejsza dobrze. Problemy występują gdy wszystko jest podłączone, podczas zwiększania lub zmniejszania zmiennej czasami przeskakuje o 2 zamiast o 1 również podświetlenie szaleje. Czyżby było potrzeba wyłączyć