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.

[Atmega8][Assembler] Wykrywacz braku napięcia

Asmodat 23 Maj 2012 00:09 1227 10
  • #1 23 Maj 2012 00:09
    Asmodat
    Poziom 10  

    Czy można w jakiś sposób zrobić coś takiego, żeby po przyłożeniu np.: 3,3V do nóżki Atmegi można było sprawdzić, czy jest tam to 3,3V czy np 1V ?

    Można to jakoś programowo rozwiązać ?

    Na razie zrobiłem przerwanie timer'a, w którym można by było sprawdzać stan nóżki, tylko jak to zrobić ? W przypadku zwierania tej nogi do masy jest prosto (tak jak z przyciskiem), ale jak to rozwiązać przykładając napięcie ?


    Kod: asm
    Zaloguj się, aby zobaczyć kod

    0 10
  • Pomocny post
    #2 23 Maj 2012 00:14
    jaglarz
    Poziom 23  

    Masz przecież przetwornik A/C.

    0
  • #3 23 Maj 2012 00:16
    Asmodat
    Poziom 10  

    Jakieś źródło jak to można najprościej zrobić ?
    I czy nie dało by się tego zrobić jak z przyciskiem ?

    0
  • Pomocny post
    #4 23 Maj 2012 11:30
    alagner
    Poziom 25  

    Komparator analogowy wyzwalający pomiar ADC.

    0
  • #5 23 Maj 2012 12:00
    Asmodat
    Poziom 10  

    Zrobiłem tak jak poradziliście ale coś nie pyka : /

    Do sekcji Timera dałem wyświetlanie bitów ADCH:


    Kod: asm
    Zaloguj się, aby zobaczyć kod


    A do sekcji Inicjalizacji wymyśliłem z pomocą datasheetu taki kod:
    Kod: asm
    Zaloguj się, aby zobaczyć kod



    Niestety, co bym nie podawał na nogę PC3, to i tak ADCL i ADCH są równe 0
    Mógłby mnie ktoś poinstruować co zrobiłem źle ?

    0
  • #7 23 Maj 2012 13:48
    Asmodat
    Poziom 10  

    Zwykły zl2avr, nic nigdzie nie jest podpięte, poza PC3

    Schemat: Link

    (Trochę mnie ten AREF podpięty do masy przez kondensator martwi, czy to nie ma czasem wpływu... może zamiast tych 2.56V wewnętrznych wlutować zewnętrznie kabelek z 5V w miejsce nogi AREF?)

    0
  • Pomocny post
    #8 23 Maj 2012 14:21
    dondu
    Moderator Mikrokontrolery Projektowanie

    Asmodat napisał:
    (Trochę mnie ten AREF podpięty do masy przez kondensator martwi, czy to nie ma czasem wpływu... może zamiast tych 2.56V wewnętrznych wlutować zewnętrznie kabelek z 5V w miejsce nogi AREF?)

    Wręcz przeciwnie tak włączony kondensator poprawia stabilność napięcia odniesienia dla przetwornika ADC.
    Sprawdź co pisze o tym w datasheet tego mikrokontrolera lub tutaj: ADC - Dokładność vs podłączanie

    Zobacz czy prawidłowo inicjujesz ADC - wprawdzie przykłady w C, ale zasada jest ta sama.

    0
  • #9 23 Maj 2012 15:01
    Asmodat
    Poziom 10  

    Wydaje mi się to wszystko poprawne (Do tego timer zawsze przebija się przez pętle waitForConversion więc coś tam musi liczyć) ale zmieniłem jeszcze referencje na napięcie odniesienia = nap. zasilania

    ldi R16, (1<<REFS0)|(1<<ADLAR)|(1<<MUX2)
    out ADMUX, R16

    efekt ten sam ADCH = 0 na do dowolne napięcie 0 - 5v na nogę PC3

    ;--------------------------------------------------------------------------

    Zadziałało w końcu ale nie mam bladego pojęcia dlaczego, zmieniłem tylko nogę na PC5 i ustawiłem inaczej MUX2.


    ;--------------------------------------------------------------------------

    Miałbym jednak pytanie dodatkowe, czy da się mierzyć również napięcie zasilania samego procka, czy tylko da się mierzyć zewnętrzne napięcie ?

    0
  • Pomocny post
    #10 23 Maj 2012 16:39
    dondu
    Moderator Mikrokontrolery Projektowanie

    Asmodat napisał:
    Miałbym jednak pytanie dodatkowe, czy da się mierzyć również napięcie zasilania samego procka, czy tylko da się mierzyć zewnętrzne napięcie ?

    Wewnętrzny multiplekser nie ma możliwości pomiaru napięcia zasilania mikrokontrolera. Ale do tego celu wystarczy dzielnik rezystorowy i odpowiedni algorytm przeliczenia pomiaru.

    0
  • #11 23 Maj 2012 16:57
    Asmodat
    Poziom 10  

    Świetnie ! tak też zrobiłem, jednak wiem już dlaczego nie chciało działać -> ten kod co napisałem działa ale tylko za pierwszym razem, jak się potem przenosi kabelek na inne napięcie to to stare się nie usuwa z rejestrów (przez co miałem cały czas 0, a potem cały czas 1)

    Nie wie ktoś czym można by ten pierwszy wynik zresetować, żeby pojawił się nowy na ADCH ?

    Przecież ustawiłem ADLAR, więc wynik powinien się resetować już po odczytaniu ADCH (czyli in R16, ADCH), jednak tak się nie dzieje i wynik pozostaje, tylko dlaczego ?

    ;------------------------
    Co jest sprzeczne z dokumentacją, po ustawieniu tzw "left adjust" i tak trzeba odczytywać najpierw ADCL a potem ADCH inaczej wynik pojawiać będzie się tylko raz.


    Dzięki wszystkim za pomoc !
    Rozwiązano.

    0