Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[ATmega16] Badanie stanu wejścia 12V

wicy 13 Kwi 2010 11:51 3029 15
  • #1 13 Kwi 2010 11:51
    wicy
    Poziom 22  

    W jaki sposób przy pomocy ATMega16L zbadać wystapienie napięcia 12V-14V?
    Pierwszy do głowy przychodzi mi rezystor i tranzystor
    [ATmega16] Badanie stanu wejścia 12V
    ale czy to dobre i poprawne rozwiązanie?
    (przepraszam za jakość ale nie mam narzędzia graficznego - lewa 12-14V, prawa PORT)

    I czy jest może jakiś driver, który zastąpi mi 4 takie układy?

  • #2 13 Kwi 2010 12:10
    sim_
    Poziom 17  

    Witam, najprościej zrobić dzielnik napięcia na rezystorach, a najbezpieczniej wstawić transoptor, możesz wstawić dwa podwójne transoptory np. LTV827. Pozdrawiam Janek

  • #3 13 Kwi 2010 12:20
    erif
    Poziom 10  

    Poziom napięć sugeruje zastosowanie w samochodzie?
    Dzielnik napięcia 220kOhm/100kOhm.

  • #4 13 Kwi 2010 12:38
    tmf
    Moderator Mikrokontrolery Projektowanie

    Interesuje cie zbadanie czy jest dokładnie 12-14V, czy satysfakcjonuje cię sprawdzenie czy jest >2V lub 0? Jeśli to drugie to wystarczy szeregowy rezystor. Jeśli interesuje cię sprawdzenie czy jest dokładnie 12-14V to rezystor polaryzujący i szeregowo zenerka na napięcie ok. 2V niższe niż badane. Jeśli punkt odcięcia musi być bardzo precyzyjny to wykorzystać wbudowany komparator lub ADC (wolne rozwiązanie). Dzielnik rezystorowy się nie sprawdzi ze względu na to, że próg przełączenia pinu IO jest niemożliwy do precyzyjnego określenia, występuje histereza, obszar niedozwolony i asymetria przełączenia.

  • #5 13 Kwi 2010 12:39
    wicy
    Poziom 22  

    Tak, instalacja samochodowa. Myślałem o dzielniku, ale czy dla układu procesora zasilanego 3,3V dzielnik dobrany dla max napięcia ładowania (14,5V?) przy wyłączonym silniku i napięciu 12V da jeszcze logiczną jednynkę? Czy Uwy nie spanie poniżej poziomu logicznej 1?

    Układ procesora podłączony jest zamiast układu który posiadał:
    - zasilanie +aku
    - masę -aku
    - linię od stacyjki +aku
    - linię od włącznika świateł +aku
    Zależy mi na zbadaniu stanu 2 ostatnich linii, czyli pojawieniu się tam napięcia, przy czym zapewne będzie to 12-14,5V.

  • Pomocny post
    #6 13 Kwi 2010 12:53
    tmf
    Moderator Mikrokontrolery Projektowanie

    Więc jeśli tylko chcesz sprawdzić czy pojawiło się napięcie to daj szeregowy rezystor i po sprawie. Rezystor rzędu 20kOm będzie ok. Jeśli zdecydujesz się na dzielnik (IMHO niepotrzebny) to musisz dobrać wartości rezystorów tak, żeby w najgorszym wypadku dawał logiczną jedynkę, czyli dla 12V na wyjściu ok. 4-5V. Nie musisz przejmować się wyższym napięciem - zostanie obcięte przez diody zabezpieczające procesora. Oczywiście napięcie wejściowe przy którym odczytasz 0 będzie trudne do przewidzenia - zależne m.in. od temperatury.

  • #7 20 Kwi 2010 12:48
    wicy
    Poziom 22  

    Tak się złożyło, że do badania stanu 12V wypadło mi użyć dwóch wejść ADC procesora. Jednocześnie korzystam z pomiaru napięcia na kanale ADC0. Czy podanie na ADC6 i ADC7 12V w jakikolwiek sposób nie zakłóci działania ADC i pomiaru tego samego napięcia na ADC0?

  • #8 20 Kwi 2010 13:56
    tmf
    Moderator Mikrokontrolery Projektowanie

    Z przyczyn oczywistych 12V na wejście ADC podać nie możesz. Możesz zrobić dzielnik i przez dzielnik podać na ADC, pamiętając, żeby napięcie z dzielnika nie było wyższe niż AVcc+0,6V.

  • #9 20 Kwi 2010 18:40
    rpal
    Poziom 27  

    koledze jest potrzebny konwerter poziomów bo tak to zrozumiałem. Dzielnik będzię podążał za zmianą napięcia jak spojżysz w notę od np. bufora 74LVHC08 i porównasz z tym co wyjdzie ci z obliczeń będziesz wiedział czy kares napięć pokrywa się z dopuszczalnym dla logiki 3,3V. Bufor może być w tym przypadku bardzo wygodny choć układ z tranzystorem także ale pamiętac należy o odwróceniu stanów logicznych. Dzielniki nigdy mi jakoś nie leżały.

  • #10 25 Kwi 2010 22:08
    wicy
    Poziom 22  

    Jeszcze raz poproszę o pomoc w temacie badania występowania 12V tym razem w zestawieniu z pomiarem tego napięcia.
    Oba problemy z osobna rozwiązałem, ale zestawione razem powodują komplikacje.

    Mam 3 wejścia 12V. Jedno to zasilanie układu i tu mierzone jest napięcie (zastosowany dzielnik i pomiar ADC na kanale 0). Na drugim i trzecim wejściu pojawia się odpowiednio napięcie 12V, po pojawieniu się którego układ powinien odpowiednio zareagować. Badanie stanu 12V wypadło, jak pisałem wyżej, na piny ADC6 i ADC7. Zastosowałem również dzielnik (na schemacie brak drugiego rezystora W1-W2 i B1-B2) i układ reaguje, ale po pojawieniu się sygnału na wejściach SW i ZA następuje spadek napięcia wejściowego i pomiar ADC0 pokazuje zupełnie inną, mniejszą wartość.
    [ATmega16] Badanie stanu wejścia 12V

    Jak sobie poradzić z badaniem stanu i pomiarem tego samego napięcia wejściowego?
    Stan linii SW i ZA badam nie przez badanie stanu portu, ale przez odczyt ADC i porównanie z ustaloną wartością progową, powyżej której program wykrywa "logiczną 1".
    Czy linie SW i ZA wpiąć bezpośrednio w ADC6 i ADC7 i badać stan portu przez PINA?

  • #11 27 Kwi 2010 23:46
    rpal
    Poziom 27  

    Tak do końca nie wiem o jaki rodzaj badania chodzi ale jeśli ma być tylko stwierdzony brak lub pojawienie się napięcia 12V to może lepiej użyć np. transoptorów które z odpowiednim opornikiem w zasilaniau LED-a i po uwzględnieniu histerezy samego transoptora będą dośc "stromo" sygnalizowały tak zanik jak i obecność 12V. Wystarzy tylko wpiąć obwody kolektorów na wejścia INT a są ich akurat wolne 3 i sprawa załatwiona?

  • #12 28 Kwi 2010 08:19
    wicy
    Poziom 22  

    rpal napisał:
    Tak do końca nie wiem o jaki rodzaj badania chodzi ale jeśli ma być tylko stwierdzony brak lub pojawienie się napięcia 12V

    Dokładnie tak. Ma być sprawdzony stan wejść SW i ZA, przy czym napięcie na tych wejściach wyności 12V i jest z tego samego źródła co zasilanie mojego układu.
    Chyba zadziałało podpięcie tych linii, przez dzielnik, do ADC6 i ADC7 oraz badanie stanu nie przez pomiar napięcia GETADC(6) ale badaniem stanu pinu
    Code:

    if PINA.6 = 1 Then

    Nie rozumiem tylko dlaczego pomiar napięcia powoduje spadek napięcia zasilania a badanie stanu portu nie. Ważne, że póki co układ działa i jest w fazie testów.

  • #13 28 Kwi 2010 16:26
    rpal
    Poziom 27  

    Powtórzę jeszcze raz jeśli nie chcesz sprawdzać napięcia np. z dokładnością do 0,1 V a tylko jego obecność albo też nie. To albo poprzez transoptor albo klucz tranzystorowy wepnij się na INT0,INT1,INT2 ustawione jako wejścia i badaj stan wejść w przerwaniach, czyli pojawienie się zbocza wyzwalania przerwania (może być opadające, narastające, albo każda zmiana) i w ten sposób ustalaj stan zasilania niapięciem 12V. Możesz też badac ten stan w jakiejkolwiek chwili niekoniecznie przerwaniem. Piny jako wejście i nie zawracaj sobie głowy zadnymi wejściami przetwornika ACD. Ważne tylko abyś odpowiednio wysterował bazy tranzystorów albo LED, transoptora(osobiście radzę bardziej transoptor). Odczytując stan PIN.x będziesz miał informację o aktualnym poziomie swoich 12V weź tylko pod uwagę odwracanie fazy na tranzystorze a także na transoptorze.

  • #14 28 Kwi 2010 16:52
    utak3r
    Poziom 25  

    wicy napisał:
    Nie rozumiem tylko dlaczego pomiar napięcia powoduje spadek napięcia zasilania a badanie stanu portu nie.


    Może dlatego, że ów pin jest w stanie wysokiej impedancji?

  • #15 28 Kwi 2010 19:53
    rpal
    Poziom 27  

    autor nic nie wspomina w jaki sposób bada owe napięcie.

  • #16 28 Kwi 2010 20:28
    wicy
    Poziom 22  

    W części pomiaru i wykrywania napięcia, autor sklecił taką konfigurację układu:
    [ATmega16] Badanie stanu wejścia 12V
    Pomiar napięcia na A.0 odbywa się przez

    Code:

    Config Adc = Single , Prescaler = Auto , Reference = Avcc

    Start Adc
    Pomiar = Getadc(0)
    Stop Adc
    Pomiar2 = Pomiar / 72


    Badanie stanu odbywa się poprzez ustalenie niskiej wartości progowej i wykrywanie logicznej 1 po przekroczeniu tej wartości (port A w ogóle nie skonfigurowany)
    Code:

       Start Adc
       Pomiar = Getadc(7)
       Pomiar1 = Getadc(6)
       Stop Adc

       If Pomiar > 200 Then
          Pwm1a = 200
          If Pomiar1 > 200 Then
             Pwm1a = 100
          Else
             Pwm1a = 200
          End If
       Else
          Pwm1a = 100
       End If

    lub poprzez zwykły odczyt portu przy konfiguracji portu A
    Code:

    Config Porta = &B00111000
    Porta = &B00111000

    Za Alias Pina.6
    Sw Alias Pina.7

    If Za = 1 Then
          If Sw = 1 Then
             Pwm1a = 5
          Else
             Pwm1a = 200
          End If
       Else
          Pwm1a = 2
       End If

    Obie metody zaczęły mi działać. Widać wcześniej musiałem mieć jakieś zwarcie na płytce... nie mam pojęcia. W każdym razie układ działa.
    Dziękuję za podpowiedzi.

TME logo Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME
TME Logo