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

[ATTinny 25][c]nie startuje timer1

cikol 26 Mar 2009 10:20 987 3
REKLAMA
  • #1 6334226
    cikol
    Poziom 27  
    Witam. Mam problem. Chciałem sobie zrobić sterowanie diod rgb(takie prymitywne) przy pomocy tego proca(bo jest mały) i mam problem. nie startuje mi timer1. W symulatorze(avr studio) nie zwieksza mi się wartość tcnt1. tcnt0 działa elegancko. diody podpiete pod te wyjścia pwm dobrze działają. Sorki za pisowanie programu(szczegolnie za ustawienia rejestrów sterujących) ale to moj pierwszy projekt w c. wczesniej tylko asm. Domyslam się że wystarczy przestawić któryś bit. ale nie moge go znaleść:D
    #define F_CPU 1000000L
    #include <avr/io.h>
    #include <avr/pgmspace.h>  //funkcje do czytania danych z programu a także zawiera typy danych
    #include <stdio.h> 
    #include <stdlib.h>  //biblioteki standardowe 
    #include <util/delay.h>  
    
    int main(void)
    {
    DDRB = 0xFF; //jedyny port ustawiony jako wyjscie
    TCCR0A = 0xF3; // ustaiwaj jak porownanie wyjdzie, fast
    TCCR0B = 0x03;//preskaler na 64
    TCCR1=0x07; //jw.
    GTCCR=0x70;//ustaienie wyjscia 2B
    OCR1C=0xFF;
    OCR1B=0xF0;
    
    unsigned char red,green,blue,jasnosc=255,pomoc,opoznienie=30;
    
    while (1)
    {
    for (red=jasnosc;red>0;--red) 
    {
    OCR0A=jasnosc-red;
    _delay_ms(opoznienie);
    }
    
    for (green=jasnosc;green>0;--green) 
    {
    OCR1B=green;
    _delay_ms(opoznienie);
    }
    for (blue=jasnosc;blue>0;--blue) 
    {
    OCR0B=jasnosc-blue;
    _delay_ms(opoznienie);
    }
    for (red=jasnosc;red>0;--red) 
    {
    OCR0A=red;
    _delay_ms(opoznienie);
    }
    for (green=jasnosc;green>0;--green) 
    {
    OCR1B=jasnosc-green;
    _delay_ms(opoznienie);
    }
    for (blue=jasnosc;blue>0;--blue) 
    {
    OCR0B=blue;
    _delay_ms(opoznienie);
    }
    }
    
    return 0;
    }
    
  • REKLAMA
  • #2 6334299
    zumek
    Poziom 39  
    Radzę sprawdzić "na żywo", ponieważ AVRStudio ma niejakie problemy, z symulacją Timerów. Jest to zależne od rodzaju symulowanego uC, jak i od trybu pracy timera - nie ma reguły.
  • REKLAMA
  • #3 6334327
    cikol
    Poziom 27  
    no własnie na żywo też jest podobnie. Tzn. diodka na chwile błyśnie(domyślam się że kiedy OCR1B ma wartość FF i dalej nie działa. Dlatego na początku (przed petlą nieskonczoną )dałem OCR1B=0xF0; zeby na 100% sie upewnić ze nie działa... i nie dziala...

    Dodano po 24 [minuty]:

    haha poszło. nie wiem czemu ale zmieniłem GTCCR=0x70 na 0x50 i poszło na obu pinach(jeden odwrocony). wczeniej nie szło na żadnym. a w symulatorze dalej nie styka. Ważne że na żywo działa:)
  • #4 6335032
    crazy_phisic
    VIP Zasłużony dla elektroda
    cikol napisał:
    ...
    haha poszło. nie wiem czemu ale zmieniłem GTCCR=0x70 na 0x50 i poszło na obu pinach(jeden odwrocony). wczeniej nie szło na żadnym. a w symulatorze dalej nie styka. Ważne że na żywo działa:)


    Wyjaśnienie w tabeli "Compare Mode in PWM Mode" - bity COM1B1 i COM1B0
REKLAMA