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

[Rozwiązano] Wykrywanie zaniku zasilania na INT0 i podtrzymanie mikrokontrolera

Jakub17 27 Paź 2018 17:03 1425 52
  • #31
    Krzysztof Kamienski
    Poziom 43  
    Jakub17 napisał:
    1. Dałem nawet 2x680 uF + 4 * 100 uF równolegle wszystko i problem występuje nadal.
    Kiedyś w celu takiego podtrzymania stosowało sie akumulatory. Obecnie zaś superkondensatory np. 10 F / 5 V
  • #32
    Jakub17
    Poziom 6  
    [b]Strumien swiadomosci swia[\b]
    Rozumiem że liczba postów w temacie zniechęciła Cie do czytania. Powtarzam poraz milionowy: gdy ręcznie symuluje zanik zasilania zwierając INT0 do.gnd to.działa. natomiast w rzeczywistym zaniku zasilania uC nawet nie wchodzi w przerwanie
  • #33
    dasej
    Poziom 31  
    Jakub17 napisał:

    dasej
    W main ustawiasz przerwanie od zbocza narastającego ustawiajac bity ICS00 I 01. Podtrzymabie zasilania jest na bateriach czy kondensatorach?


    Widać połączenia na foto 40mF. Utrzymałem działanie procesora dość długo.
  • #34
    Strumien swiadomosci swia
    Poziom 43  
    Jakub17 napisał:
    natomiast w rzeczywistym zaniku zasilania uC nawet nie wchodzi w przerwanie

    To wejście INT przyduś do masy opornikiem .

    Po drugie zrób mechaniczne wykrywanie chęci wyłączenia urządzenia.

    Moderowany przez Marek_Skalski:

    Porada dotycząca stosowania wyłącznika mechanicznego w niczym nie pomaga Autorowi tematu, nie rozwiązuje problemu i nie wnosi nic wartościowego do tematu.
    3.1.11. Nie wysyłaj wiadomości, które nic nie wnoszą do dyskusji. Wprowadzają w błąd, są niebezpieczne czy nie rozwiązują problemu użytkownika.

  • Pomocny post
    #35
    Użytkownik usunął konto
    Poziom 1  
  • #36
    Jakub17
    Poziom 6  
    Marek_Skalski napisał:
    Patrząc na uproszczony schemat zaprezentowany na początku tego tematu chciałbym zauważyć, że zasilanie pasożytnicze wyświetlacza oznacza również zasilanie wejścia wykrywającego zanik napięcia. W takiej sytuacji zanik napięcia nie zostanie wykryty prawidłowo.

    Chodzi Ci o to, że wyświetlacz może również pobierać prąd z INT0 przy zaniku zasilania?


    Marek_Skalski napisał:

    Jeżeli można zwiększyć pojemność bufora, to uC i wyświetlacz mogą być połączone razem. Odpada wtedy problem zasilania przez linie sterujące.

    W jaki sposób połączone razem? Nie bardzo rozumiem. Tak czy siak.muszę po SPI sterować wyświetlaczem.
    Marek_Skalski napisał:

    Wykrywanie napięcia oparte na podłączeniu linii zasilania wprost do wejścia, to również nie jest dobre rozwiązanie. Można się ratować dzielnikiem, ale dzielniki napięcia mają wadę. Aby działać szybko, muszą mieć wartości na poziomie kOhm'ów, ale wtedy niepotrzebnie zużywają dużo energii. Jeżeli rezystory będą miały wartości rzędu MOhm'ów, prąd jałowy będzie niewielki, ale czas reakcji znacznie się wydłuży ze względu na pojemności obwodów wejściowych oraz płytki. Do tego dochodzi dodatkowe miejsce na płytce.
    Znacznie lepiej użyć do tego taniego, ale specjalizowanego układu, który wygeneruje impuls przy określonym napięciu wejściowym, tutaj zasilania. Tutaj można coś wybrać:
    Proponujesz zatem by na drodze połączenia INT0 z linią VCC wmontowany był ten układ, tak? Czy w przypadku podtrzymania powinienem wyłączyć układ BOD? Nadal nie do końca rozumiem co jest istotą tego problemu: bez względu na pojemność kondensatorów problem nadal występuje. Czy układ dodatkowo wykrywający zmiane zasilania będzie działał poprawnie przy zasnikająym vcc, skoro uC nie potrafi działać poprawnie?
  • #37
    Użytkownik usunął konto
    Poziom 1  
  • #38
    Użytkownik usunął konto
    Poziom 1  
  • #39
    Jakub17
    Poziom 6  
    Marek_Skalski

    To co napisałeś wydaje się sensowne, ale niestety problem występuje nadal gdy nawet wyświetlacza nie ma w obwodzie. Wlaczylem uklad bez wyświetlacza, przerwałem zasilanie, a nastepnie wpiąłem wyświetlacz I ponownie uruchomiłem układ. Wyświetlacz niestety nie pokazał znianę pamięci eeprom.

    Już brakuje mi pomysłów. Spróbowałem na innym procesorze (Atmega8) w maksymalnie okrojonej wersji czyli bez wyświetllacza, watchdoga I usypiania I problem występuje nadal.

    Dodano po 5 [minuty]:

    Inspirowałem się literaturą "Język C dla mikrokontrolerów AVR" Tomasza Francuza, gdzie autor pokazuje przykład z podtrzymaniem zasilania na bazie komparatora. W tym przypadku to działa, ale niestety nie współpracuje z usypianiem procesora (watchdog przestaje wybudzać procesor po pierwszym uśpieniu; pisałem o tym wcześniej). Komparator jest w stanie wykryć zmianę a układ INT0 nie? To troche dziwne.
  • #40
    dasej
    Poziom 31  
    Kiedyś wałczyłem z usypianie procesora watchdog-iem i doszedłem do wniosku że to porażka.
    Obecnie zawsze stosuje Timer2 z 32Khz, i to działa perfekcyjnie.

    Co do sleep. Porty są blokowane. Nie wiem czy wszystkie? Ale tak wynika z dokumentacji.

    Wykrywanie zaniku zasilania na INT0 i podtrzymanie mikrokontrolera

    Daj większą pojemność na podtrzymanie. Ustaw tak Timer2 by procesor budziła się np. 4 razy na sekundę i sprawdzał stan zasilania.
    Jak dobrze uśpisz wyświetlacz i ograniczysz prąd całego układu poniżej 5 uA to możesz budzić procesor nawet co 5 sekund i sprawdzać stan zasilania.

    Pomiar napięcia dokonuj przez ADC np. tak by ograniczyć zużycie prądu.

    Wykrywanie zaniku zasilania na INT0 i podtrzymanie mikrokontrolera

    Ja używam takiej metody i na baterii 3.6v (LS14250) układ z nadajnikiem RFM69 spokojnie działa już 3 rok, radio nadaje co 5 minut dane a zbiera co sekundę, a dodatkowo układ raportuje stan baterii.
  • #41
    excray
    Poziom 39  
    dasej napisał:
    Kiedyś wałczyłem z usypianie procesora watchdog-iem i doszedłem do wniosku że to porażka.

    A co w tym jest "porażkowego"? Działa tak samo jak z kwarcem zegarkowym z tą różnicą, że pobór prądu jest nieznacznie większy, ale za to nie potrzebujesz kwarcu.
  • #43
    excray
    Poziom 39  
    Coś chyba źle skonfigurowałeś. WDT pobiera ok. 2uA więcej jak T2 Async.
  • #44
    dasej
    Poziom 31  
    Z jakim zegarem?
    8Mhz wewnętrznym czy 16Mhz zewnętrznym.
    Jakoś mi wychodziło inaczej.

    A jeżeli WDT jest taki ok, to dlaczego podzielniki ciepła i urządzenia do odczytu wodomierzy
    korzystają za kwarcu 32kHz.
  • Pomocny post
    #45
    tmf
    Moderator Mikrokontrolery Projektowanie
    Jakub17 napisał:
    Komparator jest w stanie wykryć zmianę a układ INT0 nie? To troche dziwne.

    Niespecjalnie dziwne. Zwykły pin przełączy się, gdy napięcie opadnie poniżej poziomu niskiego sygnału logicznego, który jest definiowany jako procent Vcc - problem w tym, że Vcc obniża się po zaniku i proporcjonalnie obniża się próg przełączenia pinu. W efekcie, gdy nawet w końcu zostanie on osiągnięty, to procesor jest już zasilany tak niskim napięciem, że nic sensownego nie zrobi. Jedyna możliwość, to zapewnienie, aby po zaniku zasilania napięcie na pinie spadało bardzo szybko, o wiele szybciej niż napięcie podtrzymywane dla procesora. Z kolei komparator nie ma tego problemu, bo jak to komparator, porównuje on tylko napięcia na dwóch wejściach, w efekcie jeśli napięcie spadnie nawet tylko odrobinę (kilka mV) to już masz sygnał, że siadło zasilanie i procesor rozpoczyna zapis do EEPROM.
    Usypiając procesor musisz sprawdzić jakie peryferia pracują w danym trybie uśpienia - ot cała tajemnica. Pamiętaj też, że w zwykłych AVRach aby możliwa była detekcja zmiany stanu pinu musi być doprowadzony zegar, czyli głębokie uśpienia odpadają. Dopiero w XMEGA wprowadzono na szerszą skalę asynchroniczne wybudzanie, a i to tylko na niektórych pinach IO.
  • #46
    excray
    Poziom 39  
    dasej napisał:
    Z jakim zegarem?
    8Mhz wewnętrznym czy 16Mhz zewnętrznym.
    Jakoś mi wychodziło inaczej.

    A jeżeli WDT jest taki ok, to dlaczego podzielniki ciepła i urządzenia do odczytu wodomierzy
    korzystają za kwarcu 32kHz.

    Jakie znaczenie dla prądu w głębokim uśpieniu ma wybór taktowania procesora? Pierwszy raz słyszę o takim uwarunkowaniu - opisz je proszę bo jestem bardzo ciekaw tej zależności. Co do poboru mocy to według noty układu Atmega168PB to są wartości: 1,62uA dla kwarcu i 2,62uA dla WDT, ale też nie wspominają jak taktowane było CPU przed/po uśpieniu ;> Po drugie ja nie neguję, że kwarc jest bardziej precyzyjnym źródłem czasu. Więc nie rozumiem jak ten argument ma się do dyskusji o poborze prądu w trybie uśpienia. Chyba, że coś gdzieś przeoczyłem. Jeśli tak to zacytuj mnie proszę, gdzie piszę, że WDT ma super precyzyjny pomiar czasu czy coś w tym stylu bo nie wiem jak ten argument ma się do moich poprzednich wypowiedzi.

    Dodano po 8 [minuty]:

    tmf napisał:
    Pamiętaj też, że w zwykłych AVRach aby możliwa była detekcja zmiany stanu pinu musi być doprowadzony zegar, czyli głębokie uśpienia odpadają.

    PCINT oraz INT0 i INT1 w trybie low level, są w stanie wybudzić procesor z najgłębszego uśpienia.
  • #47
    Jakub17
    Poziom 6  
    tmf napisał:
    Jakub17 napisał:
    Komparator jest w stanie wykryć zmianę a układ INT0 nie? To troche dziwne.

    Niespecjalnie dziwne. Zwykły pin przełączy się, gdy napięcie opadnie poniżej poziomu niskiego sygnału logicznego, który jest definiowany jako procent Vcc - problem w tym, że Vcc obniża się po zaniku i proporcjonalnie obniża się próg przełączenia pinu. W efekcie, gdy nawet w końcu zostanie on osiągnięty, to procesor jest już zasilany tak niskim napięciem, że nic sensownego nie zrobi. Jedyna możliwość, to zapewnienie, aby po zaniku zasilania napięcie na pinie spadało bardzo szybko, o wiele szybciej niż napięcie podtrzymywane dla procesora.


    A w jaki sposób mogę poprawić ten czas opadania napięcia na pinie?
  • #48
    tmf
    Moderator Mikrokontrolery Projektowanie
    Jakub17 napisał:
    A w jaki sposób mogę poprawić ten czas opadania napięcia na pinie?

    Kol. @Marek_Skalski pokazał chyba jedyne sensowne rozwiązanie, jeśli upierasz się na wykorzystanie pinu. Można też spróbować ominąć problem stosując dodatkowy dzielnik rezystorowy, przed podaniem sygnału na pin, tak, aby już przy nieznacznym spadku na pinie panował stan niski.
  • #49
    BlueDraco
    Specjalista - Mikrokontrolery
    Na moje oko problem albo w oprogramowaniu albo w wykrywaniu zaniku zasilania, ne w kondensatorach. Do podtrzymania na czas zapisu EEPROM wystarczy kondensator 10..47u, a nie jakieś tysiące uF.
  • Pomocny post
    #51
    Użytkownik usunął konto
    Poziom 1