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

[Atmega128] Podtrzymanie - trzeba czekać przed kolejnym włączeniem

motorolae365ok 22 Wrz 2011 00:57 3607 34
  • #1 9951287
    motorolae365ok
    Poziom 20  
    Witam,

    [Atmega128] Podtrzymanie - trzeba czekać przed kolejnym włączeniem

    zrobiłem sobie układ z Atmegą 128A, który zasilany jest napięciem 12V. (Jak na schemacie w załączniku). Przechodzi ono przez diodę na początku i trafia do pierwszego stabilizatora (5V), stamtąd poprzez diodę Schotkiego idzie do kolejnego stabilizatora (3,3V) i już do uC. Dodałem kondensator GoldCap 0,1F po diodzie schotkiego dla podtrzymania pracy układu, aby można było zapisać wyniki pomiarów. Wszystko działa dobrze, tylko gdy wyłączę zasilanie i włącze na nowo, to układ nie reaguje (tak jak by w ogóle nie był włączony). Dopiero gdy odczekam jakieś pół min to normalnie startuje. Bez GoldCapa tak sytuacja nie miała miejsca.

    Czemu się tak dzieje? I w jaki sposób można to naprawić?
  • Pomocny post
    #2 9951323
    wlodek91
    Poziom 13  
    Próbowałeś z układami resetu na DS? Napięcie spada około 2.7 i niżej i dzieją się jazdy.
  • Pomocny post
    #3 9951453
    arturt134
    Poziom 27  
    Włącz BOD w procesorze. Tak jak pisze wlodek91 to na pewno sprawa resetu.
  • Pomocny post
    #4 9951860
    dondu
    Moderator na urlopie...
    Po pierwsze mikrokontroler dobrze wie z jakiego powodu jest reset. Mówi o tym rejestr MCUCSR.

    Po drugie nie odpowiedziałeś na moje pytanie:
    dondu napisał:
    Coś w Twojej koncepcji mi nie pasuje:
    1. Co przemawia za tym, że układ ma się zresetować po zaniku zasilania, skoro było ono tak krótkie, że pracował na gold capacitor?


    Innymi słowy, jeżeli zasilanie zanikło na tak krótko, że mikrokontroler cały czas pracował prawidłowo, to po co go resetować?
  • Pomocny post
    #5 9952061
    tmf
    VIP Zasłużony dla elektroda
    Jak piszą koledzy:
    1. Włącz BOD
    2. Musisz jakoś zasygnalizować procesorowi, że jest na zasilaniu awaryjnym, jak to robisz?
    3. Podłączenie tego goldcapa jest bez sensu, dlaczego nie dasz go po prostu na zasilanie? A diodę między wyjściem stabilizatora a goldcapem?
  • #6 9952868
    motorolae365ok
    Poziom 20  
    Ok, dzięki za rady, włączenie BOD pomogło.

    Co do idei działania, to uC jest informowany o tym poprzez sygnał z zasilania przed stabilizatorami (12V) który przechodzi przez transoptor i wchodzi na wejście INT uC.
    Po wykryciu przerwania, wyłącza niepotrzebne układy, zapisuje zgromadzone dane do EEPROMu.

    @tmf zrobiłem tak bo myślałem że GoldCap się bardziej naładuje (w tym miejscu gdzie jest dostaje 5V, a tam miałby tylko 3.3V). Więc z racji tego uznałem że jeśli będzie bardziej naładowany to dałem go tam. Myślisz że gdy był za stabilizatorem 3,3V to wytrzymałby dłużej? Bo niestety trochę krótko trzyma i zapis na kartę SD nie działa.

    -----------------

    EDIT

    jednak nie do końca działa jak należy. Dane nie mają czasu zapisać się. Rozumiem że to przez to ustawienie od razu wyłącza się przy małym spadku napięcia. Jeśli bym wyłączył BOD to problem będzie z tym resetem tak?

    Układ resetu to opornik 10k do 3.3V i sygnał resetu przez kondensator 100n do GND. Więc ten 100n jest naładowany przez poł minuty i nie zewrze RESETU do masy, co powoduje, że układ w krótkim czasie po wyłączeniu i ponownym załączeniu się nie zresetuje?
  • #7 9953037
    dondu
    Moderator na urlopie...
    Jeszcze pytania uściślające dot. sygnału o braku zasilania. Na pinie INT brak zasilania jest sygnalizowany:
    1. zboczem?
    2. zerem?
    3. jedynką?

    Czy układ masz już zmontowany na PCB czy jeszcze to prototyp i można coś zmieniać?

    Dodano po 34 [minuty]:

    motorolae365ok napisał:
    boczem narastajacym.
    Niestety płytka już gotowa, wszystko polutowane itd.


    Ok to sposobem gościa trzeba załatwić :)
    Zaraz opiszę algorytm.
  • #8 9953208
    motorolae365ok
    Poziom 20  
    Przepraszam usunąłem posta, bo okazało się że nie działa, ale jednak reset jest dobry (zasilanie resetu z dzielnika z 5V tam gdzie nie ma podtrzymania).

    Czekam na pomysł przedłużenia podtrzymania. Większy GoldCap? Widziałem takie 1F, pomoże?
  • Pomocny post
    #9 9953218
    dondu
    Moderator na urlopie...
    Generalnie uC powinien być odcinany od napięcia zasilania możliwie jak najszybciej, ale może uda się nad tym zapanować tak:

    Napięcie zanika:
    1. uC dostaje przerwanie zboczem narastającym i:
    1.1 zapisuje dane
    1.2 wchodzi w tryb Power Down
    1.3 śpi aż do zaniku zasilania

    Niespodzianka (!) zasilanie wróciło zanim zanikło całkowicie, a uC śpi w Power Down:
    1.4 INT przyjmuje niski stan więc uC budzi się z Power Down i działa dalej lub wykonuje coś niestandardowego (Ty decydujesz bo wiesz o tym fakcie). Chodzi o to, że Ty będziesz dokładnie wiedział, że taka sytuacja nastąpiła.


    Niestety zasilanie nie wróciło, Gold Capacitor się rozładował:
    2. Ponowne włączenie napięcia resetuje uC, kondensator na RESET nie przeszkadza w niczym.


    Teraz pytanie o BOD, czy jest potrzebny przy takim algorytmie?
    Hmm, no warto by był, ale można spróbować bez.

    No chyba, że nie wziąłem czegoś pod uwagę, lub nie wszystko co niezbędne opisałeś. Zastanów się nad tym algorytmem.

    Dodano po 1 [minuty]:

    motorolae365ok napisał:
    Czekam na pomysł przedłużenia podtrzymania. Większy GoldCap? Widziałem takie 1F, pomoże?

    Oczywiście wydłuży czas, ale nadal nie załatwi problemu, że kiedyś się rozładuje, a Twój układ musi być na to przygotowany.
  • #10 9953236
    motorolae365ok
    Poziom 20  
    Nie no myślę, że ten mój sposób jest w miarę prosty, działa i najważniejsze zrobiony już.

    Pytanie czy przeniesienie goldcapa za stabilizator 3,3V pozwoli zapisać dane na karcie pamięci? Albo może ten większy goldcap by pomógł?

    Dodano po 1 [minuty]:

    Tak wiem że się rozładuje, byle by wytrzmał czas zapisu na SD. A rozładować to się może, później zasilanie nie jest potrzebne, a jak się na nowo włączy to będzie reset prawidłowy i znowu normalna praca, więc ok.
  • #11 9953254
    dondu
    Moderator na urlopie...
    motorolae365ok napisał:
    Pytanie czy przeniesienie goldcapa za stabilizator 3,3V pozwoli zapisać dane na karcie pamięci?

    Tak ponieważ nie będzie strat na stabilizatorze, ale jeżeli będzie zbyt duży, to może powstać problem powolnego narastania napięcia zasilania uC w momencie włączania zasilania. Na pewno da się to dobrać odpowiednio.

    motorolae365ok napisał:
    Albo może ten większy goldcap by pomógł?

    Ja bym raczej tak właśnie zrobił, większy

    Co do algorytmu który opisałem jest w nim chyba błąd, bo INT nie jest w logice ujemnej. Zostawiam, bo może ktoś coś na jego bazie wymyśli :)
  • #12 9953407
    motorolae365ok
    Poziom 20  
    Jednak znalazłem większy, właśnie 1F, ale problem wrócił, tzn. problem resetu.

    Nie wiem jakim cudem wcześniej to działało, ale teraz sobie myślę, po wyłączeniu zasilania mamy potrzymanie na uC, ale reset jest z innego źródła więc spada od razu do 0V, wiec uC się resetuje i nie zapisuje danych. Jeśli reset jest z podtrzymania to za to trzeba bardzo długo czekać żeby osiągnął poziom "0" logicznego.

    Macie jakieś lepsze pomysły? Najlepiej sprzetowe a nie programowe.
  • #14 9953648
    motorolae365ok
    Poziom 20  
    [Atmega128] Podtrzymanie - trzeba czekać przed kolejnym włączeniem

    Chodzi o zrobienie czegoś takiego, żeby reset był zasilany z podtrzymaniem, ale mimo to po włączeniu został na chwilkę wyzerowany, żeby wystartować atmegę i uruchomić ją.
  • #15 9953667
    dondu
    Moderator na urlopie...
    motorolae365ok napisał:
    Chodzi o zrobienie czegoś takiego, żeby reset był zasilany z podtrzymaniem, ale mimo to po włączeniu został na chwilkę wyzerowany, żeby wystartować atmegę i uruchomić ją.

    Ale to całkowicie zbędne, od tego są układy wewnętrzne uC oraz ewentualnie wewnętrznie ustawiane opóźnienie startu.
    Czytaj punkt RESET vs kondensator: http://mikrokontrolery.blogspot.com/2011/04/minimalne-podlaczanie-pinow.html
  • #16 9953724
    motorolae365ok
    Poziom 20  
    No dobrze, ale mikrokontroler sam nie wie, że zostało właśnie włączone zasilanie (co wywołuje wewnętrzny reset) bo przez kilka min od ostatniego wyłączenia zasilanie uC jest ciąglę na poziomie ok. 1.7-2.3V.

    Dlatego potrzebuje zrobić coś takiego, żeby po wyłączeniu ukłąd był zasilany i na RESET była "1" logiczna. Ponowne włączenie zasilania zaraz po wyłączeniu nie wywołuje resetu automatycznie, bo jakieś tam zasilanie ciągle jest. Ja musze sam zrobić taki impuls. Jak go wywołać?
  • #17 9953759
    dondu
    Moderator na urlopie...
    Po pierwsze mikrokontroler dobrze wie z jakiego powodu jest reset. Mówi o tym rejestr MCUCSR.

    Po drugie nie odpowiedziałeś na moje pytanie:
    dondu napisał:
    Coś w Twojej koncepcji mi nie pasuje:
    1. Co przemawia za tym, że układ ma się zresetować po zaniku zasilania, skoro było ono tak krótkie, że pracował na gold capacitor?


    Innymi słowy, jeżeli zasilanie zanikło na tak krótko, że mikrokontroler cały czas pracował prawidłowo, to po co go resetować?
  • #18 9953797
    motorolae365ok
    Poziom 20  
    Chyba się nie rozumiemy. Chodzi o to że nie chce wyeliminować jakiś drobnych zaników napięcia. Tylko jeśli wyłącze zasilanie i włącze je po 10 sekundach (!) to układ dalej myśli że jest włączony i nie wykona resetu typowego przy włączeniu zasilania.

    Ja w zasadzie potrzebuje kilka set ms po wyłączeniu żeby zapisać dane do EEPROMu czy na karte SD. Ale później nie mogę drugi raz uruchomić układu. Mam nadzieję, że teraz mnie zrozumiałeś:)

    Dodano po 50 [minuty]:

    Wykombinowałem coś takiego:
    [Atmega128] Podtrzymanie - trzeba czekać przed kolejnym włączeniem

    Po kolei. Na początku po włączeniu zasilania (5V i 3.3V) kondensator zwarty do masy, tranzystor T3 zatkany, T2 aktywny, RESET = 0. (układ się resetuje)
    Po chwili kondebsator jest przerwa, T3 aktywny, T2 nieaktywny, RESET = 1. (układ pracuje)
    Wyłączenie zasilania (5V teraz 0V, 3,3V się jeszcze utrzymuje) T3 nieaktywny, T2 nieaktywny RESET = 1 aż do zaniku. (układ pracuje)
    Przy kolejnym włączeniu kondensator powinien być rozładowany i powinien wygenerować się reset.

    Dobrze myślę, czy tylko mi się wydaje że tak będzie?
  • #19 9954262
    dondu
    Moderator na urlopie...
    Niestety nadal nie potrafię załapać co chcesz osiągnąć i dlaczego chcesz tak komplikować sobie układ :)

    motorolae365ok napisał:
    Tylko jeśli wyłącze zasilanie i włącze je po 10 sekundach (!) to układ dalej myśli że jest włączony i nie wykona resetu typowego przy włączeniu zasilania.

    Teraz Ty spróbuj się zastanowić, po co resetować układ, skoro zapisał już dane w momencie wyłączenia, ale wie, że napięcie wróciło więc może rozpocząć działanie od nowa, lub je kontynuować. Problem wynika z tego, że nie odpowiedziałeś wprost na to pytanie które Ci zadałem. Odpowiadając na nie, albo ja załapię, o co Ci chodzi, albo Ty, że źle kombinujesz.

    Bardzo chciałbym Ci pomóc, ale najpierw jasno odpowiedz na pytanie:

    dondu napisał:
    1. Co przemawia za tym, że układ ma się zresetować po zaniku zasilania, skoro było ono tak krótkie, że pracował na gold capacitor?

    Przy czym, krótkie to także, na przykład 10 sek o których piszesz, a przy większym kondensatorze może nawet parę minut.
  • #20 9954385
    motorolae365ok
    Poziom 20  
    Układ nie ma sie zresetowac po zaniku zasilania. Ale jak włącze go na nowo to się nie uruchamia. Rozumiem że to spowodowane brakiem resetu. Dlatego przy ponownym uruchomieniu chce zrobić własny reset
  • #21 9954403
    dondu
    Moderator na urlopie...
    Raz piszesz, że jest problem, bo się nie resetuje:

    motorolae365ok napisał:
    Tylko jeśli wyłącze zasilanie i włącze je po 10 sekundach (!) to układ dalej myśli że jest włączony i nie wykona resetu typowego przy włączeniu zasilania.

    a następnie piszesz, że nie ma się resetować:

    motorolae365ok napisał:
    Układ nie ma sie zresetowac po zaniku zasilania.

    Musisz się zdecydować, bo nie będę w stanie Ci pomóc :(
  • #22 9954441
    motorolae365ok
    Poziom 20  
    NIE ma sie resetowac po WYŁĄCZENIU, i MA się resetować po WŁĄCZENIU. Wszystko pisze w tych cytatach w twoim poście.
  • #23 9954471
    dondu
    Moderator na urlopie...
    motorolae365ok napisał:
    NIE ma sie resetowac po WYŁĄCZENIU, i MA się resetować po WŁĄCZENIU. Wszystko pisze w tych cytatach w twoim poście.


    OK, więc ponawiam pytanie:
    W jakim KONKRETNIE celu musi się zresetować, jeżeli przerwa w zasilaniu była tak krótka, że procesor cały czas miał zasilanie z Golda?
  • #24 9954479
    motorolae365ok
    Poziom 20  
    Bo układ w ogóle nie startuje po ponownym załączeniu

    Dodano po 1 [minuty]:

    Nie mam na mysli sytuacji takiego chwilowego zaniku napięcia, tylko celowe wylączenie i włączenie.
  • #25 9954512
    dondu
    Moderator na urlopie...
    motorolae365ok napisał:
    Bo układ w ogóle nie startuje po ponownym załączeniu

    To właśnie na początku koledzy napisali Ci, że od tego jest BOD :)
    Nie trzeba, żadnych dodatkowych zewnętrznych układów resetu.

    Dodano po 44 [sekundy]:

    motorolae365ok napisał:
    Nie mam na mysli sytuacji takiego chwilowego zaniku napięcia, tylko celowe wylączenie i włączenie.

    uC nie wie czy to celowe czy niecelowe załączenie - on wie że napięcie jest albo go nie ma.
  • #26 9954536
    motorolae365ok
    Poziom 20  
    Ale BOD powodował że po wyłączeniu zasilania od razu układ się wyłączał i nie pozwalał na zapis danych. Ok mój problem rozwiązany za sprawą tego układu małego którego schemat umieściłem wyżej. Dzięki;)

    Ale nadal nie wytrzymuje do zapisu na karcie SD. Przełożyć za stabilizator 3,3V?
  • #27 9954549
    dondu
    Moderator na urlopie...
    motorolae365ok napisał:
    Ale BOD powodował że po wyłączeniu zasilania od razu układ się wyłączał i nie pozwalał na zapis danych.

    To jest pochodna wielkości GOLDa, sposobu pisania programu oraz ustawienia poziomu, przy którym BOD ma zadziałać.
    A swoją drogą jaki poziom miałeś ustawiony?


    motorolae365ok napisał:
    Ok mój problem rozwiązany za sprawą tego układu małego którego schemat umieściłem wyżej. Dzięki;)

    Dorabiasz, układy które są zbędne. Ale jeżeli się upierasz, zamiast rozwiązać problem dzięki wewnętrznym układom ii nauczyć się czegoś konkretnego, to ja to akceptuję :)


    motorolae365ok napisał:
    Przełożyć za stabilizator 3,3V?

    Zrób tak jak radził kol. TMF.
  • #28 9954567
    motorolae365ok
    Poziom 20  
    dondu napisał:
    To jest pochodna wielkości GOLDa, sposobu pisania programu oraz ustawienia poziomu, przy którym BOD ma zadziałać.


    Hmm gola dobrałem maksymalnego, program chyba nie ma za dużo w przypadku gdy zaraz po zaniku zasilania jest przerwanie ktore obsługuje zapis w programie, a ustawienia to jedynie 2,7V miałem (4V nie bo zasilanie na 3,3V).
  • #29 9954584
    dondu
    Moderator na urlopie...
    2,7V czyli OK,

    Pisząc o programie, miałem na myśli, że w momencie stwierdzenia zaniku zasilania, przerwanie wszystkiego co można i wyłączenie wszystkich zbędnych wewnętrznych układów, by zaoszczędzić ładunek w Goldzie, potrzebny do zapisu karty.

    Gdy już zrobisz z Goldem to co radził TMF, i jeżeli masz dobry oscyloskop, to spróbuj zobaczyć co się dzieje z napięciem na Goldzie w momencie zaniku zasilania.

    Dodano po 4 [minuty]:

    Może karta SD pobiera na tyle duży prąd, że spadek jest znaczny i uruchamia się BOD, ale to możesz także stwierdzić programowo za pomocą rejestru podanego wcześniej.
  • #30 9954644
    motorolae365ok
    Poziom 20  
    Teraz golodcap ładuje sie 5 min i jest dopiero 2.2V na nim... wcześniej naładował się w kilkadziesiat sekund.
REKLAMA