logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[atmega8][C] - (obsługa ADC) prośba o sprawdzenie/poprawienie kodu

kolo1500 29 Lis 2013 21:45 1509 9
REKLAMA
  • #1 13007226
    kolo1500
    Poziom 10  
    Witam
    mam ogromną prośbę czy mógł by mi ktoś pomóc poprawić ten kod
    dodam , że:
    -pisałem go sam
    -jestem powiedzmy początkującym (pisałem już proste programy tworząc je od początku samemu)
    -próbowałem go zmieniać i poprawiać ale to nic nie dało
    -szukałem rozwiązania w internecie..... nie pomogło
    -nie chce "gotowca" bo chce się nauczyć
    -na pinie Aref brak napięcia (chyba nie powinno tak być)
    -proszę o wstawianie części poprawionych linijek kodu wraz z wyjaśnieniem
    -po kompilacji nie wyskakują żadne błędy

    OPIS JAK MA DZIAŁAĆ:
    Podpinam potencjometr(regulowany od 0V do 2,5V) do PC2 . Na wyświetlaczu ma wyświetlać się 0 jeśli na potencjometrze jest mniej niż ~1,28V a 1 jeśli jest więcej niż ~1,28V . Po wgraniu poniższego kodu ciągle na wyświetlaczu widnieje 0 (zmieniając położenie potencjometru od min do max)


    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • Pomocny post
    #2 13007479
    2rs232
    Poziom 18  
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    W tej linijce "zamazujesz" wcześniejsze ustawienia ADCSRA
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Gdy chcesz ustawić tylko bit ADFR, bez zmiany pozostałych bitów stosuj taki zapis
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Więcej o operacjach na bitach w artykule problemy-c-ustawianie-i-zerowanie-bitow
    F_CPU definiuj w opcjach projektu fcpu-gcc-gdzie-definiowac
  • REKLAMA
  • #3 13008540
    kolo1500
    Poziom 10  
    ok rozumiem jaki popełniłem błąd i poprawiłem
    kod teraz wygląda tak:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    ale dalej nie działa jak powinien....
    na pinie Aref jest już napięcie (2,58V)

    F_CPU wole definiować w kodzie (to chyba nie jest błąd?)
  • Pomocny post
    #4 13009506
    dondu
    Moderator na urlopie...
    Witaj.

    kolo1500 napisał:
    F_CPU wole definiować w kodzie (to chyba nie jest błąd?)

    Nie, jest to jedna z możliwości, ale ma wady i dlatego kol. 2rs232 podał Ci link, ale ponieważ go nie czytałeś, to zadajesz pytanie.

    Czy wiesz co to jest pętla główna i co się dzieje gdy jej brak?

    Czy wiesz, że nie wystartowałeś pomiaru? Słowo klucz: ADSC
    Cytat:
    In Free Running mode, the ADC is constantly sampling and updating the ADC Data Register. Free Running mode is selected by writing the ADFR bit in ADCSRA to one. The first conversion must be started by writing a logical one to the ADSC bit in ADCSRA.
  • #5 13010425
    kolo1500
    Poziom 10  
    Jeśli się nie mylę pętla główna w moim poprawionym programie to for(;;) a gdyby jej nie było wynik ADC zostanie sprawdzony tylko raz

    Przeczytałem to wcześniej ale tak znalazłem takie coś:
    Spoiler:
    Każdy plik źródłowy kompilowany jest oddzielnie – stanowi odrębną jednostkę kompilacji. W sytuacji, w której zmieniamy zawartość tylko jednego pliku wchodzącego w skład złożonego projektu - tylko ten jeden plik jest rekompilowany, do linkowania całego programu zostaną wykorzystane pliki obiektowe otrzymane w wyniku wcześniejszych kompilacji (w naszym przykładzie plik test111.o).

    jeśli dobrze to rozumiem u mnie to nie jest błąd ponieważ mam tylko jeden plik w projekcie

    Dzięki za podpowiedź z tym ADSC przeoczyłem to przy czytaniu noty/wpisaniu do programu



    Poprawiony program wygląda tak :
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod



    i niby działa ale po pewnym czasie ~3min przestaje reagować na zmiany potencjometrem
  • REKLAMA
  • #7 13010852
    kolo1500
    Poziom 10  
    PB0->a
    PB1->b
    itd.

    wiem, że AVCC powinno być troszkę inaczej podpięte tzn z cewką ale to jest projekt do nauki na płytce stykowej.

    schemat rysowany na szybko ...
  • #8 13010886
    dondu
    Moderator na urlopie...
    AVcc - ok, ważne, że jesteś świadomy wpływu na stabilność pomiarów.

    UWAGA dla ewentualnych początkujących czytających w przyszłości ten temat - na schemacie powyżej w rzeczywistości piny potu B nie są zwarte :)
  • #9 13010897
    Wojtek75
    Poziom 24  
    Kolego z tego schematu wynika że Aref masz zwarte z Avcc. Spory błąd. Jeżeli masz włączone wewnętrzne źródło referencyjne to mogło ulec uszkodzeniu.
  • REKLAMA
  • #10 13011017
    kolo1500
    Poziom 10  
    Z Aref pomyliłem sie tylko na schemacie w układzie mam podpięte przez kondensator do GND

    Bardzo sporadycznie rysuje schematy w komputerze więc schemat wygląda jak wygląda

    tu zamieszczam poprawiony schemat tylko jeśli chodzi o pin Aref
REKLAMA