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.

[Atmega 8][C] Przykład wykorzystania ADC

matiu6565 07 Mar 2015 10:05 1266 20
  • #1 07 Mar 2015 10:05
    matiu6565
    Poziom 10  

    Witam, potrzebuje program w języku C na atmege 8 z obsługą ADC. Atmega musi z czytywać bardzo małe napięcia i w zależności od niego wystawiać zero lub jedynkę na którymś z wyjść. Prosiłbym o jakiś przykładowy program który pozwolił by zapoznać mi się z tematem bo nigdzie nie mogę znaleźć programu do którego mógłbym się odnieść.

    0 20
  • #3 07 Mar 2015 13:33
    matiu6565
    Poziom 10  

    Chodzi mi o naprawdę bardzo prosty program który nie obsługuje wyświetlacza tylko zmienia stan jednego z pinów. Po prostu wole sam sobie narzucać poziom trudności, a przy moim marnym doświadczeniu w pisaniu programów w C te większe programy to już robi się "mentlik". Na internecie jest pełno ale według mnie nie są jasno tłumaczone. Potrzebuje tylko informacji na temat jak z czytać wartość panującego napięcia na pinie i użyć go w programie.

    0
  • #4 07 Mar 2015 13:48
    szczywronek
    Poziom 27  

    Skoro szukasz gotowców, to może jednak ten poziom trudności narzuciłeś sobie zbyt wysoki. Obawiam się, że nikt Ci "na szybko - na forum" nie wytłumaczy tego dokładniej i w bardziej zrozumiały sposób, niż jest to opisane w dedykowanych poradnikach ;) Sposób obsługi ADC zależy od konkretnego programu - nie ma jednej jedynej słusznej drogi.

    Spróbuj coś napisać samemu i wrzuć na forum (w razie problemów) - wtedy na pewno znajdzie się ktoś kto zechce pomóc.

    0
  • #5 07 Mar 2015 14:15
    namok
    Poziom 24  

    matiu6565 napisał:
    Chodzi mi o naprawdę bardzo prosty program który nie obsługuje wyświetlacza tylko zmienia stan jednego z pinów. Po prostu wole sam sobie narzucać poziom trudności, a przy moim marnym doświadczeniu w pisaniu programów w C te większe programy to już robi się "mentlik". Na internecie jest pełno ale według mnie nie są jasno tłumaczone. Potrzebuje tylko informacji na temat jak z czytać wartość panującego napięcia na pinie i użyć go w programie.

    A gdzie tu: http://mikrokontrolery.blogspot.com/2011/03/adc-wstep-i-uruchomienie.html jest wyświetlacz?

    0
  • #6 07 Mar 2015 19:07
    emarcus
    Poziom 34  

    matiu6565 napisał:
    Chodzi mi o naprawdę bardzo prosty program który nie obsługuje wyświetlacza tylko zmienia stan jednego z pinów. Po prostu wole sam sobie narzucać poziom trudności, a przy moim marnym doświadczeniu w pisaniu programów w C te większe programy to już robi się "mentlik". Na internecie jest pełno ale według mnie nie są jasno tłumaczone. Potrzebuje tylko informacji na temat jak z czytać wartość panującego napięcia na pinie i użyć go w programie.

    Do tego wystarczy ci zapaznac się z sekcją ADC w datasheet, oraz trochę wiedzy jak konfigurowac wyjścia processora i jak mrugac diodą.
    Uwarunkujesz zapalenie diody od wiekości odczytanej wartości z ADC.

    Pełniejszy tutorial z twoim przykładem znajdziesz tu:
    http://www.avrfreaks.net/forum/tut-c-newbies-guide-avr-adc?page=all

    Jeżeli język ang. jest twoją słabą stroną, to zacznij od jego nauki; będzie przydatny przy studiowaniu datasheets.. i nie tylko.

    e marcus

    0
  • #7 10 Mar 2015 19:39
    pimpuk
    Poziom 21  

    Ale chodzi ci kolego o porównanie tego napięcia z jakimś napięciem odniesienia? I w zależności czy przekracza, czy nie, ustawić jakiś bit?
    Bo twoją prośbę tak właśnie zrozumiałem.
    Jeśli tak, to trzeba wykorzystać komparator analogowy, wbudowany w twój mikroprocesor.
    Kod jest tak prosty, aż dziwne że

    matiu6565 napisał:
    nigdzie nie mogę znaleźć programu do którego mógłbym się odnieść.

    Proszę o sprecyzowanie pytania, czy chcesz coś mierzyć, czy porównywać.

    0
  • #8 19 Mar 2015 17:55
    matiu6565
    Poziom 10  

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Atmega 8, RC 1MHZ. Nie działa ADC.

    0
  • #10 19 Mar 2015 18:03
    matiu6565
    Poziom 10  

    Po prostu zmieniając napięcie na wejściu ADC nic się nie dzieje. I co oznacza ta wartość 500 jak ją obliczyć?

    0
  • #12 19 Mar 2015 18:10
    matiu6565
    Poziom 10  

    A co z tą tajemniczą wartością 500?

    0
  • #13 19 Mar 2015 18:14
    szczywronek
    Poziom 27  

    W jednym z początkowych postów dostałeś link do blog'a o mikrokontrolerach - poczytaj troszkę. Będziesz miał satysfakcję jak zrozumiesz i coś Ci zacznie działać, jeśli pojawią się konkretne problemy to zawsze możesz zapytać. W tym momencie problem nie tkwi w ADC tylko... we wszystkim - brakuje Ci podstaw :)

    Wartość 500 jest porównywana z wynikiem konwersji ADC. Nie wiem jakiej odpowiedzi oczekujesz. Wylicza się ją np. na podstawie założeń projektu, o których nie piszesz ani słowa.

    0
  • #14 19 Mar 2015 18:25
    matiu6565
    Poziom 10  

    Z pewnością ta wartość zależy od napięcia podawanego na ADC, ale jak to obliczyć? Mierzone prze ze mnie wartości wahają się między 2mV - 10mV i nie wiem jak tą wartość sobie obliczyć.

    0
  • #15 19 Mar 2015 18:39
    szczywronek
    Poziom 27  

    Upraszczając: jak wejście ADC zewrzesz do masy to w wyniku konwersji otrzymasz ~0, jak na wejście ADC podasz napięcie równe napięciu odniesienia to otrzymasz maksymalną wartość (która wynika z rozdzielczości przetwornika); "pomiędzy" jest w miarę liniowo. Naprawdę powinieneś poczytać o ADC ;) to nie jest trudne do ogarnięcia.

    Podajesz to 2-10mV bezpośrednio na wejście ADC? Nie zmierzysz tak niskich napięć bez jakiegoś wzmacniacza.

    0
  • #16 19 Mar 2015 19:16
    gaskoin
    Poziom 38  

    A musi to być na Atmedze? Przecież to co chcesz zrobić nie wymaga mikrokontrolera w ogóle.

    0
  • #17 19 Mar 2015 19:28
    Wirnick
    Poziom 26  

    matiu6565 napisał:
    Z pewnością ta wartość zależy od napięcia podawanego na ADC, ale jak to obliczyć? Mierzone prze ze mnie wartości wahają się między 2mV - 10mV i nie wiem jak tą wartość sobie obliczyć.

    To zależy od programisty(Ciebie) ustawiając AREF, który dzielony jest przez 1023.
    Minimalna wartość jaka może być mierzona to np. 2,56V/1023= 0,0025V.
    Uwzględniając tętnienia zasilania - pomysł nie do realizacji.

    0
  • #18 19 Mar 2015 19:41
    gaskoin
    Poziom 38  

    Mierzone napięcie zawsze można wzmocnić 200 razy

    0
  • #19 19 Mar 2015 20:32
    Wirnick
    Poziom 26  

    gaskoin napisał:
    Mierzone napięcie zawsze można wzmocnić 200 razy

    Mógłbyś to upublicznić?

    0
  • #20 11 Kwi 2015 20:23
    Sławek-K
    Poziom 15  

    Jak jeden z kolegów powyżej wyliczył, mierzone napięcie jest rzędu jedności z przetwornika. Nie będzie to miało większego sensu. Przedstaw schemat jak to ma wyglądać , będzie łatwiej coś podpowiedzieć. Tak czy inaczej napięcie , które chcesz podać na wej ADC ATmegi musi być dużo większe aby coś z tych pomiarów miało sens.Może zaadoptować jakiś wzmacniacz operacyjny ?

    0
  • #21 11 Kwi 2015 21:22
    gaskoin
    Poziom 38  

    Sławek-K napisał:
    Może zaadoptować jakiś wzmacniacz operacyjny ?


    Wtedy użycie mikrokontrolera nie ma sensu. To co autor chce za jego pomocą zrobić można zrobić używając komparator. Przy okazji uniknie się skomplikowanego obliczenia liczby 500.

    0