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

Jak zaimplementować wskaźnik naładowania 6 kanałów na Atmega8A?

mikolajdeejay 07 Cze 2015 09:38 1470 17
  • #1 14750898
    mikolajdeejay
    Poziom 15  
    Cześć!

    Jest to moja pierwsza przygoda z Atmegą8, więc proszę o wyrozumiałość. Potrzebny okazał się wskaźnik naładowania baterii 6 kanałowy. Postanowiłem wykorzystać 6 portów ADC z Atmegi8A, kod pomógł pisać kolega. Program działa, lecz wskaźnik działa tylko na jednym "kanale". Jak zrobić ,żeby działał na wszystkich 6-ciu ?

    Wymagania stawiane programowi to : każdy port przypisany jednej diodzie LED, w przypadku pojawienia się napięcia powyżej ustawionego ( np. 1,4V ) odpowiadająca dioda powinna się zaświecić. Po wyjęciu baterii ( spadek napięcia do 0 ) , dioda znowu gaśnie. I tak każdy kanał niezależnie od siebie.

    Wrzucam kod tego co mam:

    Kod: C#
    Zaloguj się, aby zobaczyć kod
  • #3 14751123
    excray
    Poziom 41  
    Do zerowania użyj: ADMUX &= ~(1<<MUX0); - zeruje bit MUX0
  • #4 14751153
    mikolajdeejay
    Poziom 15  
    Cześć, poprawiłem wszystkie "0<<"

    zasilam jednak PC0 z dzielnika ( potencjometr 10K ) i dioda podłączona do PB0 ( masa do atmegi, + do 5V przez rezystor 1K ) i zero reakcji na zmianę napięcia . :/



    obecny kod
    Kod: C#
    Zaloguj się, aby zobaczyć kod
  • #6 14751248
    mikolajdeejay
    Poziom 15  
    Niestety nie działa :/
  • #7 14751279
    kamyczek
    Poziom 38  
    Mam tylko nadzieję że nie masz baterii połączonych szeregowo bo jeśli tak to przetwornik już raczej nic nie zmierzy ;( . Napięcie które mierzy przetwornik musi się mieścić w zakresie od 0 do AVCC . 6 baterii to 9V więc albo odpowiedni dzielnik napięcia albo układ na wzmacniaczach operacyjnych dla zachowania tej samej rozdzielczości .
  • #8 14751294
    mikolajdeejay
    Poziom 15  
    Kolego kamyczek, zostawmy temat baterii na dalszy plan. Po podaniu odpowiedniej wartości napięcia ( w granicy 0-5V ) na port PC0 , powinna się zaświecić dioda LED podłączona PB0 i tak po kolei każdy z 6 portów ADC , załącza po pojawieniu się określonej wartości napięcia na nim ,odpowiednią diodę ( również 6 diod LED )

    Wszystko takie proste, a nie działa :( Jak zaimplementować wskaźnik naładowania 6 kanałów na Atmega8A?
  • #9 14751661
    dondu
    Moderator na urlopie...
    Nie definiuj F_CPU w kodzie programu z tych powodów: http://mikrokontrolery.blogspot.com/2011/03/fcpu-gcc-gdzie-definiowac.html

    Zastanów się, co robi ta linijka:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Tutaj także poległeś na podstawach C, o których pisałem.
    Przestudiowałeś wskazany w poście #2 artykuł? Jeśli tak, to sobie poradzisz.

    Jeśli nie to przestudiuj, a później w CManiaku: http://mikrokontrolery.blogspot.com/p/cmaniak-kompilator-jezyka-c-online.html
    skompiluj niniejszy program:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod



    EDIT:
    Gdybyś używał oryginalnego Atmel Studio, to za pomocą symulatora już dawno doszedłbyś do błędów które robisz. A tak korzystając z Eclipse tracisz czas.

    http://mikrokontrolery.blogspot.com/2011/04/atmel-studio-spis-tresci.html
  • #10 14751737
    mikolajdeejay
    Poziom 15  
    Ciekawe, bo autor tego bloga właśnie mnie ( początkującego ) zachęcił do używania Eclipse. Porobię poprawki, dam znać jak program zacznie działać. Dzięki !
  • #11 14751745
    dondu
    Moderator na urlopie...
    mikolajdeejay napisał:
    Ciekawe, bo autor tego bloga właśnie mnie ( początkującego ) zachęcił do używania Eclipse.

    Coś Ci się pomyliło, a autorem jestem ja :)
    Teraz już wiesz, że słuchasz niewłaściwych rad. Zainstaluj Atmel Studio i wykorzystuj symulator, bo zaoszczędzi Ci masę czasu.
  • #12 14754997
    Konto nie istnieje
    Konto nie istnieje  
  • #13 14756179
    mikolajdeejay
    Poziom 15  
    Cytat:
    Ładne przewody, gdzie można takie dostać?


    electropark - tam kupiłem wszystko, ale podejrzewam, że każdy e-sklep takie posiada,

    Zrobiłem ten program zupełnie od nowa, hmm nie mam pomysłu i działam na "czuja" w oparciu o zbliżone programy.

    Poniżej wrzucam kod programu, który... nie działa, ale myślę,że jestem blisko i muszę doczytać na temat MUX-ów , ktoś ma jakieś pomysły jak rozgryźć te MUX-y dla 6- ciu wejść (PC0 do PC5) ? Przypomnę, że kontroler powinien zapalać diodę przypisaną do danego wejścia ADC gdy napięcie przekroczy jakąś wartość i gasić, gdy wartość napięcia powróci do poprzedniego stanu.
    Czyli gdy na PC0 pojawi się napięcie większe od ustalonego w programie na PB0 zaświeci się dioda LED0 i analogicznie dla kolejnych pinów aż do PC5 .



    Program dla dwóch kanałów, ale jak widać, już go próbuję ustawić dla 6-ciu, z marnym skutkiem.
    Kod: C#
    Zaloguj się, aby zobaczyć kod


    [/quote]
  • #14 14756206
    dondu
    Moderator na urlopie...
    mikolajdeejay napisał:
    Zrobiłem ten program zupełnie od nowa, hmm nie mam pomysłu i działam na "czuja" w oparciu o zbliżone programy.

    Poniżej wrzucam kod programu, który... nie działa, ale myślę,że jestem blisko i muszę doczytać na temat MUX-ów , ktoś ma jakieś pomysły jak rozgryźć te MUX-y dla 6- ciu wejść (PC0 do PC5) ?

    Jesteś uparty i niczego się nie uczysz, gdyż nie słuchasz rad.

    Tracisz czas na własne życzenie, zamiast odstawić na bok na chwilę swój porojekt i nauczyć się operowania bitami w języku C, bo tego nie potrafisz.

    Wskazałem Ci artykuł, ale nawet go nie przeczytałeś i ponownie robisz te same błędy.
    Wskazałem Ci także program i kompilator CManiak, gdzie możesz poćwiczyć to co się nauczysz we wskazanym artykule o operacjach na bitach, ale także nie ćwiczyłeś.
    W dodatku nie wykorzystujesz symulatora dostępnego w Atmel Studio, by poćwiczyć operacje bitowe.

    Dostałeś więc wszystko co Ci jest niezbędne.
    Niestety nie ruszysz z miejsca, dopóki nie opanujesz operacji na bitach - decyzja należy do Ciebie.


    Edit:
    Poza tym:

    1. opisuj każdą linię kodu byśmy wiedzieli co chcesz zrobić, bo wtedy łatwiej znaleźć Twoje błędy.

    2. ADC to rejestr 16-to bitowy, a zmienne ac1 i ac0 są 8 bitowe. Zastanów się jaki efekt ma więc takie przypisanie:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    w szczególności w przypadku, gdy ustawiasz bit ADLAR, czyli wyrównanie do lewej.

    Podobnie z porównywaniem ac1 i ac0 ze zmienną X , która ma 16 bitów i jest liczbą ze znakiem.
  • #15 14756239
    mikolajdeejay
    Poziom 15  
    Staram się, ale mam uczucie, że kończę szkołę kucharską, a chciałem zrobić tylko jajecznicę. Lecę dalej z tematem.
  • #17 14756637
    kamyczek
    Poziom 38  
    Kolega dondu dobrze radzi , ja bym na twoim miejscu zdecydowanie pomyślał o przesiadce na Studio 6 . Mimo że aplikacja z pozoru wygląda na bardziej skomplikowaną zawiera wszystko co jest potrzebne . Do tego ma jeszcze jedną zaletę jest jedna do symulacji , programowania i pozwala na pisanie w c i asemblerze i to nie tylko na AVR ale inne mikrokontrolery z rodziny Atmela .
  • #18 14790807
    mikolajdeejay
    Poziom 15  
    Układ działa ! :)
REKLAMA