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

Atmega16 C - Regulacja obrotów wentylatora timerem w trybie CTC

Jeżyk-1 11 Kwi 2013 11:08 1659 9
  • #1 12184816
    Jeżyk-1
    Poziom 25  
    Witam. próbuję sterować obrotami wentylatora timerem w trybie CTC. Lecz mi nie wychodzi. W tej chwili mam regulację timera w trybie PWM i działa:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    A jak chcę zrobić to w trybie CTC to już to nie wychodzi:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #2 12185253
    stanleysts
    Poziom 27  
    cnt nie powinien też być volatile?
  • #3 12185309
    Jeżyk-1
    Poziom 25  
    Wydaje mi się że nie. Ale wstawiłem dla pewności :
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    I nie pomogło.
  • #4 12187689
    Konto nie istnieje
    Poziom 1  
  • #5 12187712
    Jeżyk-1
    Poziom 25  
    Przepraszam Ale to zostało po przeróbce kodu. Ten błąd już poprawiłem i nadal jest to sam.
  • #6 12187874
    BlueDraco
    Specjalista - Mikrokontrolery
    1. cnt NIE powinien być volatile.
    2. pwm1 MUSI być volatile.
    3. Jaki jest okres PWM?
    4. Pokaż więcej kodu.
  • #7 12187920
    stanleysts
    Poziom 27  
    Cytat:
    cnt NIE powinien być volatile.

    Raczej nie musi?
  • #8 12187925
    Jeżyk-1
    Poziom 25  
    To jest cały kod w tej chwili taki program wgrywam By sprawdzić czy będzie się
    kręcił z połową mocy 255/ 2 = 127

    Częstotliwość procesora mam 8MHz wewnętrzny oscylator i preskaler 1024, czyli częstotliwość będzie 39Hz
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #9 12188049
    BlueDraco
    Specjalista - Mikrokontrolery
    Wyrzuć return sprzed while(1) w main() !
    Usuń powody wszystkich ostrzeżeń kompilatora - przed tym return też zapewne ostrzega.

    8000000 / 1024 / 201 to ok. 39 Hz dla KROKU Twojego programowego PWM, ale u Ciebie okres PWM ma 256 kroków, czyli ponad 6 sekund - z takim okresem powinien zmieniać się stan wyjścia.

    stanleyst: Jedynym skutkiem deklaracji cnt jako volatile jest wydłużenie kodu procedury obsługi przerwania.
  • #10 12188060
    Jeżyk-1
    Poziom 25  
    Dlaczego 256 kroków ma mój okres?

    
    **** Build of configuration Release for project 05_PWM ****
    
    make all 
    Building file: ../main.c
    Invoking: AVR Compiler
    avr-gcc -Wall -Os -fpack-struct -fshort-enums -funsigned-char -funsigned-bitfields -mmcu=atmega32 -DF_CPU=11059200UL -MMD -MP -MF"main.d" -MT"main.d" -c -o"main.o" "../main.c"
    Finished building: ../main.c
     
    Building target: 05_PWM.elf
    Invoking: AVR C Linker
    avr-gcc -Wl,-Map,05_PWM.map -mmcu=atmega32 -o"05_PWM.elf"  ./main.o   
    Finished building target: 05_PWM.elf
     
    Invoking: AVR Create Extended Listing
    avr-objdump -h -S 05_PWM.elf  >"05_PWM.lss"
    Finished building: 05_PWM.lss
     
    Create Flash image (ihex format)
    avr-objcopy -R .eeprom -O ihex 05_PWM.elf  "05_PWM.hex"
    Finished building: 05_PWM.hex
     
    Create eeprom image (ihex format)
    avr-objcopy -j .eeprom --no-change-warnings --change-section-lma .eeprom=0 -O ihex 05_PWM.elf  "05_PWM.eep"
    Finished building: 05_PWM.eep
     
    Invoking: Print Size
    avr-size --format=avr --mcu=atmega32 05_PWM.elf
    AVR Memory Usage
    ----------------
    Device: atmega32
    
    Program:     224 bytes (0.7% Full)
    (.text + .data + .bootloader)
    
    Data:          2 bytes (0.1% Full)
    (.data + .bss + .noinit)
    
    
    Finished building: sizedummy


    To zwraca mi kompilator
REKLAMA