Elektroda.pl
Elektroda.pl
X
Deimic One - Szkolenia
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[AVR][C][AVRLIB] Jak odpalić przetwornik ADC

multivac 26 Wrz 2011 11:12 1341 3
  • #1 26 Wrz 2011 11:12
    multivac
    Poziom 9  

    Witam
    Męczę się już kilka dni z uruchomieniem przetwornika ADC na Atmega32.
    Korzystam z bibliotek AVRlib.
    Plik main.c

    Kod: c
    Zaloguj się, aby zobaczyć kod


    a2d.c
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Wywala mi błąd 'FALSE' undeclared (first use in this function). Tyczy się to tego: a2dCompleteFlag = FALSE; Nie za bardzo wiem co z tym zrobić (jestem początkujący). Wiem, że FALSE jest nie zdeklarowane ale nie wiem jak to zrobić.
    Przeszukałem forum (nie tylko na elektrodzie) i nie znalazłem odpowiedzi.
    Może ktoś mógłby mnie naprowadzić na odpowiedni trop.
    Pozdrawiam
    Wojtek

    0 3
  • Deimic One - Szkolenia
  • #2 26 Wrz 2011 11:49
    tmf
    Moderator Mikrokontrolery Projektowanie

    False jest zdefiniowane w o ile mnie pamięć nie myli stdint.h.
    Z drugiej strony zastanów się co chcesz osiągnąć - po pierwsze używasz definicji cbi/sbi, które są depreciated, a więc jak sama nazwa wskazuje nie powinny być używane w nowych programach. Brniesz w ślepą uliczkę.
    Druga sprawa - zamiast używać podejrzanych bibliotek nie lepiej przeczytać notę procesora? Już dawno byś ten ADC uruchomił, a tak walczysz z błędami innych.

    0
  • Deimic One - Szkolenia
  • #3 15 Paź 2011 11:43
    multivac
    Poziom 9  

    Witam
    Dzięki za radę. Poszedłem za ciosem i (z pomocą jednego z kolegów) zrobiłem bibliotekę do odczytu ADC.

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Kolega poradził mi, abym zamienił wartość odczytaną z przetwornika zamienił na tablicę "chr" i w ten sposób wyświetlił ją na LCD (po przeliczeniu na % - zakres 0-100%).

    Teraz chciałbym móc wysterować port w zależności od wartości z przetwornika ADC (coś jak regulator), tzn po przekroczeniu pewnej wartości wysterowuje mi port, poniżej tej wartości zeruje port (lub odwrotnie).
    Stworzyłem coś takiego ale nie chce mi działać.


    Kod: c
    Zaloguj się, aby zobaczyć kod


    Stworzyłem zmienną "a" i zamieniłem ją na tablicę "c". Zrobiłem tak po to aby wartość z przetwornika (też zapisane w postaci tablicy) móc porównać do drugiej tablicy. Niestety nie działa mi to.
    Nie za bardzo wiem gdzie leży błąd.

    0
  • #4 15 Paź 2011 14:54
    tmf
    Moderator Mikrokontrolery Projektowanie

    Zastanów się - zamieniasz wartość z ADC (w dodatku potencjalnie źle odczytaną - wiesz, że możesz po prostu od razu odczytać ADC lub ADCW?) na char, po to, aby potem to zamieniać z powrotem na int? Trochę bez sensu. Kolejna sprawa - twoja konwersja z tymi dziesiątkami if'ów trochę obsysa.
    A to wszystko nie działa ci dlatego, że stringów NULLZ nie można porównywać przez zwykłe operatory (one porównają tylko jeden bajt) lecz trzeba użyć funkcji strcmp (i ew. innych ze string.h). Generalnie przejrzyj najpierw jakiś dobry kurs C, bo brniesz w ślepe uliczki i dalej będzie ci niepotrzebnie co raz trudniej.

    0