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

PIC18f4550 sleep asembler

andrzej_11 20 Wrz 2009 15:16 1562 11
  • #1 20 Wrz 2009 15:16
    andrzej_11
    Poziom 11  

    Po instrukcji sleep procesor, PIC18F4550, zatrzymuje się ale prąd pobierany przez procesor jest wielokrotnie wyższy niż powinien być (jest ok 0.2-1.3mA zamiast ok 1-15uA, dla 5V), ponadto nie wyłączją się peryferia - porty. Jest też dodatkowy efekt zmian prądu jeśli zbliżam rękę, szczególnie w okolice 21-25pin na odległość ok 5 cm.
    Bit 7 (IDLEN) OSCCON ustawiałem i kasowałem - bez zmian.
    Bit 6 SBOREN j.w.
    Zmieniałem procesor - też nic.
    Myślałem, że może cała seria procesorów, ale na PIC18F4580 jest to samo.
    W procesorach serii 12 i 16 jest ok.
    Prąd 200uA czy 500uA jest za duży nawet w trybie IDLE.

    Proszę o pomoc andrzej_11.

    0 11
  • #2 20 Wrz 2009 17:36
    CDMaster
    Poziom 14  

    Hmmm... Wydaje mi się, że sleep mode nie musi wyłączać portów... Ma za zadanie tylko wyłączyć wewnętrzne peryferia... Jeśli chodzi o dane które przeczytałeś w dokumentacji odnośnie pobierania prądu w sleep mode... Tam masz na dole ładnie napisane:

    Cytat:
    The power-down current in Sleep mode does not depend on the oscillator type. Power-down current is measured
    with the part in Sleep mode, with all I/O pins in high-impedance state and tied to VDD or VSS and all features that
    add delta current disabled (such as WDT, Timer1 Oscillator, BOR, etc.).
    Co oznacza, że jest to szacowanie przy wszystkich portach ustawionych wysoką impedancję (Wszystkie TRIS'y na 0xff). Nigdzie nie znalazłem informacji odnośnie samoistnego wyłączania portów... Spróbuj:D Podaj wyniki obserwacji:D A co do dodatkowego poboru prądu przy zbliżaniu dłoni do 21-25 pinu... W jakiej obudowie??:P Bo nie będę zgadywał:P

    0
  • #3 20 Wrz 2009 19:18
    andrzej_11
    Poziom 11  

    Dziękuję za już, ...
    Fakt, sleep nie powinien wyłączać portów. Szukając przyczyny dużego prądu, trochę już zgłupiałem. :)
    Układy, które robiłem na 12 i 16 wchodziły w sleep prawidłowo nawet przy zasilaniu bezpośrednio z 220V przez rezystor.
    Teraz 18F4550, zrobiłem wszystko co mi przyszło do głowy, łącznie z TRIS'y na 0xff, reset H/L, podłączenim tylko zasilania do nóżek zas., podłączaniem nóżek przez rezystory do "-", ...
    Coś mi umknęło. Układ bierze nawet 1000 razy więcej prądu niż powinien.
    Odpowiadam: obudowa DIP40, wspomniane piny to RD2,RD3,RC4,RC5,RC6 (RC4,5 - USB), ale to tylko te okolice są bardziej wrażliwe, reakcja na zbliżenie jest w innych miejscach tylko nieco mniejsza. Sprawdziłem też zasilenie z baterii a nie z zasilacza-przetwornicy.
    Zakłócenia i wachania prądu (200uA - 500uA --- czasem nawet 50uA - 1.5mA) nie powodują wyjścia ze SLEEP.

    0
  • #4 25 Wrz 2009 12:05
    andrzej_11
    Poziom 11  

    Ponieważ problem nadal jest dla mnie otwarty i ważny, zadam pytanie inaczej:
    w DS39632D podają: "Sleep mode currents down to 0.1uA typical". Co należy zrobić aby uzyskać taki lub podobny pobór prądu?

    0
  • #5 25 Wrz 2009 18:31
    CDMaster
    Poziom 14  

    Możesz podać link do tego dokumentu, bo nie mogę go odnaleźć?? A poza tym... jesteś pewien, że układ wchodzi w sleep mode?? może jest od razu wybudzany przez jakieś przerwanie??

    0
  • #6 26 Wrz 2009 11:14
    andrzej_11
    Poziom 11  

    http://ww1.microchip.com/downloads/en/DeviceDoc/39632D.pdf
    jest to chyba najaktualniejszy pdf do PIC18F2455/2550/4455/4550
    DS39632D-page 1:
    "Power-Managed Modes:
    • Run: CPU on, peripherals on
    • Idle: CPU off, peripherals on
    • Sleep: CPU off, peripherals off
    • Idle mode currents down to 5.8 μA typical
    Sleep mode currents down to 0.1 μA typical
    • Timer1 Oscillator: 1.1 μA typical, 32 kHz, 2V
    • Watchdog Timer: 2.1 μA typical
    • Two-Speed Oscillator Start-up"

    Wczoraj znalazłem na innym forum, podobny problem dotyczący F2550
    też brak wskazówek a autor decyduje się (ja mam podobny zamiar) na zewnętrzny RTC.
    W przeszłości spotkałem się z wieloma błędami w dokumentacjach Microchip'a a także w samych strukturach (np. wpis stanu portu). Coraz bardziej obawiam się, że 0.1uA to tylko chwyt reklamowy. Ale z mojej strony też coś jest nie tak.

    2. Po sleep jest nop i zmiana stanu portu, która się nie dokonuje, program zatrzymuje się.

    Andrzej

    0
  • #7 26 Wrz 2009 16:16
    CDMaster
    Poziom 14  

    Ja bym jeszcze w akcie desperacji sam ręcznie wyłączył wszystkie moduły... Ale to trochę bez sensu:D Sam się tymi układzikami zajmuję, ale zazwyczaj nie interesowałem się poborem prądu. Z ciekawości jutro sam zobaczę jak to u mnie wygląda. Pozdrawiam

    0
  • #8 26 Wrz 2009 20:15
    andrzej_11
    Poziom 11  

    Będę wdzięczny, jeśli osobiście przetestujesz. :please:
    Na wspomnianym wyżej innym forum podano:
    "Przy uruchamianiu RTC na 18LF8722 udało mi się zejść do ok. 60uA."
    Ja przez chwilę na 18LF4550 miałem ok.50uA.

    Zrobiłem układzik, który przydatny byłby mi również w przyszłości do różnych celów,
    obecnie potrafi już skutecznie obsłużyć kilkadziesiąt czujników, kilkadziesiąt ledów.
    lcd graf 128x64 lub alfanum. oraz kilka innych per., Poza zegarem w sleep i USB, wszystko już chodzi i niezawodność jest ok., testuje się już w maszynie.
    Potrzebuję jednak rejestrować włączenia/wyłączenia.
    Próbowałem wyłączać ręcznie ale pewnie coś przeoczyłem. Wydaje mi się, że sleep powinno samo załatwić wyłączenia, jeśli tak nie jest, to w pdf-ie powinno być to dokładnie opisane.

    Pozdrawiam Andrzej

    0
  • #9 27 Wrz 2009 15:20
    CDMaster
    Poziom 14  

    Mam goły układ, znaczy jest tylko podłączone zasilanie, kondensator i nic więcej. Udało mi się na razie zejść do ok. 100uA. Znaczy ta wartość przez chwilę ukazała mi się na moim mierniku, bo jak pisałeś wcześniej przyłożenie ręki już zmienia pomiar. Żeby uzyskać taki wynik powyłączałem co się dało, a przynajmniej o czym miałem pojęcie po przejrzeniu dokumentacji, czyli:

    Code:
       INTCON = 0;
    
       TRISB = 255;
       TRISA = 255;
       TRISC = 255;
       TRISD = 255;
       TRISE = 255;
       ADCON1 = 0xf;
       CMCON = 7;
       CVRCON = 0;
       CloseTimer0();
       CloseTimer1();
       CloseTimer2();
       CloseTimer3();
       CloseADC();
       ClosePWM1();
       ClosePWM2();
       CloseSPI();
       CloseCapture1();
       CloseCapture2();
       CloseI2C();
       CloseUSART();
       SPPCON = 0;
       UCON = 0;
       HLVDCON = 0;

    Nie wiem co jeszcze można zrobić, by ten wynik zmniejszyć... Jak coś jeszcze znajdę, co można wyłączyć, to sprawdzę i podzielę się dalej wynikami:D W ogóle, z tego co rozumiem testujesz pobór prądu na działającym urządzeniu, które co jakiś czas się rozbudza, więc stąd mogą być błędy pomiarów. Poza tym, skoro zaimplementowałeś sobie RTC, to pewnie masz włączony moduł Timer1. Zatem już jakiś dodatkowy pobór prądu. A te dane są podane dla wyłączonych wszystkich modułów. Poza tym, sleep mode wyłącza tylko te moduły, co potrzebują zegara do działania, znaczy comparatory, timery i sam już nie wiem co jeszcze, są nadal zasilane.

    0
  • #10 27 Wrz 2009 22:08
    andrzej_11
    Poziom 11  

    Wspomniany "chodzący" i testujący się układ to inna płytka.
    Testuję goły układ. Też wyłączyłem wszystko co mi przyszło do głowy,
    mimo, że jeśli:
    bcf OSCCON,IDLEN ;przełączenie z idlen na sleep,
    to polecenie sleep powinno już wszystko wyłączyć.
    Poza dużym prądem 100uA/60uA/50uA, dziwi mnie wpływ zewnętrznych zakłóceń.
    Na PIC12C508/509 i PIC12F629 układ pracował (i nadal pracuje wiele szt) ok. 4cm od lampy wyładowawczej (ponad 4kV i kilka amperów w impulsach) bez jakiegokolwiek ekranowania i zasilany przez zwykły rezystor z tegoż napięcia, bezbłędnie kontroluje pracę lampy (ponad 99.9% czasu w stanie sleep, ponad 12h/dobę), zero informacji o błędach.

    Pozdrawiam Andrzej

    0
  • Pomocny post
    #11 28 Wrz 2009 18:47
    xelus
    Poziom 11  

    Dla 18LF4520 bez RTC przy 3V zasilania bez problemu można zejść poniżej 1uA, z RTC prąd jest około 10-15uA.

    Może jakieś wejście procesora wisi w powietrzu i gdy zbliżasz rękę powoduje zwiększenie poboru prądu? Spróbuj ustawić wszystkie niewykorzystane PINy jako wyjścia do masy albo zasilania.

    0
  • #12 29 Wrz 2009 11:57
    andrzej_11
    Poziom 11  

    Wielkie dzięki dla xelus!
    Po włączeniu wyjść na "0", mam poniżej 1uA - stabilne.
    Zasugerowałem się wcześniej wyłączaniem wyjść, ...
    Jeszcze raz dzięki.
    Pozdrawiam Andrzej

    0