logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[AVR][C] PWM, LCD i szalone zmienne

P-o-l 16 Paź 2010 11:09 1200 2
REKLAMA
  • #1 8625571
    P-o-l
    Poziom 18  
    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:
    
    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 1


    Głó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ć
  • REKLAMA
  • #2 8626343
    kubus_puchatek
    Poziom 18  
    Kolego. na dzień dobry zmniejsz częstotliwość timera. bo licząc 16MHz/256 to ponad 60KHz
    uwzględniając pojemności bramek i złącza w LED-ach już mogą być problemy. Starczy jak użyjesz koło 1KHz.
    Nie chce mi się sprawdzać w nocie katalogowej bo siedzę na GPRS-ie i limity duszą, ale zrób prosty test
    set Wy
    delay(x)
    clr Wy
    delay(y)
    i zmieniaj x i y

    (pamiętaj że regulacja nie jest liniowa co znaczy że jest ze 20..30 wartości wyraźnie regulujących a potem prawie wcale .... )
    nawet na piechotę.
    jak zmienia się jasność to znaczy że nie włączyłeś bezpośredniego sterowania wyprowadzeniem przez zegar.
  • #3 8626549
    gaskoin
    Poziom 38  
    od kiedy bit WGM12 jest w rejestrze TCCR1A ?
REKLAMA