Elektroda.pl
Elektroda.pl
X
Arrow Multisolution Day
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[PIC16F876] Chwilowy preskaler częstotliwości

mikmas 24 Lut 2012 09:49 1789 6
  • #1 24 Lut 2012 09:49
    mikmas
    Poziom 18  

    Na pewno był poruszany podobny temat, ale nie mogę coś znaleźć. Mam urządzenie zrobione na pic16f876 i pic16f84a (2 "części"), które pracuje przez 24h/dobę. Mimo że operacje, które wykonuje są dosyć skomplikowane, to może je robić powoli (mało jest zależne od niego, bo steruje mechaniką). Sam analizować danych praktycznie nie musi. Po co to mówię? Chcę maksymalnie obniżyć koszty pracy (czyt. pobór prądu) poprzez zmniejszenie taktowania. Jednak jak bardzo rzeczywiście przekłada się to na pobór? Pracuje już na najwolniejszym trybie (LP? Nie pamiętam) i dostaje taktowanie 1MHz. Czy dalsza optymalizacja ma sens? Chciałbym zrobić tak, aby pracował w trybie tak jakby hibernacji - wszystkie funkcje życiowe byłyby maksymalnie spowolnione (mogę się zgodzić nawet na 1kHz). Uśpienie go niestety nie jest zbyt możliwe, bo czynnik budzący może przyjść zarówno z czujników, klawiaturki, jak i komenda drugiego procka (prosty protokół szeregowy). Co wy o tym myślicie?

    0 6
  • Arrow Multisolution Day
  • #2 24 Lut 2012 10:27
    94075
    Użytkownik usunął konto  
  • Arrow Multisolution Day
  • #3 24 Lut 2012 11:16
    mikmas
    Poziom 18  

    Układ nic nie robi, dopóki nie rozkażą mu procesory (które w tym momencie aktywnie uczestniczą w kontroli) - w okresie, w którym procesory mogą się na chwilę kimnąć układ kompletnie nic nie robi.

    0
  • #5 24 Lut 2012 16:09
    mikmas
    Poziom 18  

    Zasilany jest zasilaczem transformatorowym dający 12v/2A (poboru prądu przez niego - nie znam, nie jest napisane) - taki "ot zwykły" :). Po drodze stabilizator 5v i prosto do 2 procesorów. Jakie oszczędności? Pobór już teraz jest bardzo mały, jednak jak to ma chodzić na okrągło non-stop to nawet m zamienia się w M (chodzi o jednostkę :P), więc skąd tylko się da wycisnąć.
    Pierwsze to właśnie zmniejszyć do minimum prąd pobierany na jałowym biegu, a drugie to sztuka dla sztuki - warto wiedzieć na przyszłość o jakiś mykach, które robią układ bardziej oszczędnym

    0
  • Pomocny post
    #6 24 Lut 2012 16:48
    dondu
    Moderator Mikrokontrolery Projektowanie

    OK, rozumie Twoje intencje i z chęcią pomogę, bo minimalizowanie poboru energii to mój "bzik" :)

    Jednakże zacząłbym od tego, że przy takim zasilaniu gdy ustawisz ten mikrokontroler na kwarcu 32kHz, to zużywać będzie zaledwie 20 μA przy 3V i niewiele więcej przy 5V. Czy to nie wystarczy? Większe straty masz na samym zasilaczu.

    Co do usypiania - piszesz, że już masz zrobione urządzenie, więc faktycznie może być problem z osiągnięciem maksymalnych oszczędności (trzeba to dobrze rozplanować). Pamiętaj, że wybudzanie ze snu można osiągać na wiele sposobów:

    Cytat:
    12.13.1 WAKE-UP FROM SLEEP
    The device can wake-up from SLEEP through one of
    the following events:
    1. External RESET input on MCLR pin.
    2. Watchdog Timer Wake-up (if WDT was
    enabled).
    3. Interrupt from INT pin, RB port change or
    peripheral interrupt.


    ...


    The following peripheral interrupts can wake the device
    from SLEEP:
    1. PSP read or write (PIC16F874/877 only).
    2. TMR1 interrupt. Timer1 must be operating as an
    asynchronous counter.
    3. CCP Capture mode interrupt.
    4. Special event trigger (Timer1 in Asynchronous
    mode using an external clock).
    5. SSP (START/STOP) bit detect interrupt.
    6. SSP transmit or receive in Slave mode
    (SPI/I2C).
    7. USART RX or TX (Synchronous Slave mode).
    8. A/D conversion (when A/D clock source

    Zawsze możesz ustawić timer by wybudzał okresowo uC np. 100x na sekundę.

    Polecam także zapoznać się z 3 częściowym artykułem: Bateria zasila mikrokontroler
    by poznać techniki oszczędzania energii przez mikrokontroler (nie tylko z baterii).

    0
  • #7 24 Lut 2012 17:23
    mikmas
    Poziom 18  

    Czyli najłatwiejszym sposobem jest ustawienie wybudzania przez timer. Łatwe, bo software-owe (hardware - jak już zauważyłeś - jest zrobiony). Dzięki za pomoc ;)

    0