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.

Atmega 8a [C] uruchomienie ADC

04 Paź 2017 13:51 477 6
  • Poziom 12  
    Witam wszystkich
    Dzisiaj zwracam się do Was po pomoc w uruchomieniu adc w atmedze 8a

    Tak więc bez zbytniego owijania w bawełnę
    Kod:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Po jego wgraniu na porcie dostaję krzaka. Konfiguracja uarta dobra, bo po zmianie "adc" na "odb" w funkcji wysyłania odsyła mi "0", gdy dostanie "0"
    Jak coś to port adc zwieram do 5V dla testu. Avcc i aref też do 5V
    Prrrroszę o pomoc :)
  • Pomocny post
    Poziom 35  
    Zamień na stringa to co otrzymujesz z ADC, albo przerób inaczej procedure wysyłania. W tej chwili w funkcję która wysyła stringa wrzucasz int'a
  • Poziom 12  
    Mój kod wygląda teraz tak:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Dostaję 2 warningi:
    ../adcuart.c:41:1: warning: implicit declaration of function 'getADC' [-Wimplicit-function-declaration]
    adc = getADC(0);



    ../adcuart.c:42:11: warning: pointer targets in passing argument 2 of 'itoa' differ in signedness [-Wpointer-sign]
    itoa(adc,adc1,4);


    W terminalu dostaję za każdym razem "3ff"
    Coś już działa ;) ale jeszcze coś musi być źle... Funkcję zamiany int na char mam dobrą? Dobrze adc skonfigurowany?
    Z góry dzięki za pomoc.
  • Pomocny post
    Moderator Mikrokontrolery Projektowanie
    W c przed użyciem funkcji musi ona być znana, a przynajmniej jej prototyp. Ty używasz funkcji getADC przed jej deklaracją/definicją i kompilator przyjmuje domyślny prototyp, stąd ostrzeżenie.
    Co do drugiego ostrzeżenia, zadeklaruj adc1 jako char, a nie unsigned char.
  • Poziom 12  
    Ok. w takiej postaci kod kompiluje się bez błędów i warningów. Ale dalej w terminalu dostaję 3ff. Gdy zmieniłem 3 argument funkcji itoa na 10 to zamiast 3ff dostaję 1023, ale nadal tylko i wyłącznie to, niezależnie od wartości na wejściu ADC.
    ADC mam dobrze skonfigurowany?

    Kod: c
    Zaloguj się, aby zobaczyć kod
  • Moderator Mikrokontrolery Projektowanie
    Sprawdź kilka rzeczy:
    - możesz używać ADIF, ale można też ADSC - ten bit się zeruje po zakończeniu konwersji i nie ma potrzeby dodatkowo go zerować.
    - czy masz podłączone AVcc i kondensator na VRef? Pamiętaj aby VRef nie łączyć z Vcc.
    - czy wybrałeś i podłączyłeś sygnał do właściwego pinu ADC? Sprawdź ustawienia multipleksera. Jeśli na pinie masz "1" to ADC odczyta to jako właśnie 0x3FF.
    - nie masz skonfigurowanego preskalera ADC, a dokładniej wynosi on 2 - jeśli procek jest taktowany np. 16 MHz, to ADC ma taktowanie 8 MHz, czyli 8x więcej niż dopuszczalne max.
  • Poziom 12  
    To z czym ja mam połączyć to Vref? bo już nie rozumiem
    Mam taktowanie 8mhz jak ustawić ten preskaler?

    Dodano po 2 [godziny] 39 [minuty]:

    Okej udało mi się to rozwiązać do końca.
    Dla potomnych działający program korzystający z AREF
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Dziękuje wszystkim za pomoc