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.

Przetwornik AC Atmega 8, diody cały czas świecą

-nobile- 15 Lut 2010 18:00 2307 6
  • #1 15 Lut 2010 18:00
    -nobile-
    Poziom 16  

    mam problem z uruchomieniem przetwornika AC w atmedze, po polaczeniu ukladu zgodnie z tym schematem

    http://www.voytek.tkdami.net/programy/adc/ADC_przyk1/adc_led_atm8.png

    wszystkie ledy na ktorych ma byc wyswietlany wynik caly czas sie swieca mimo ze w programie jest ustawiony stan wysoki w konf. portow (diody sa prawidlowo polaczone).

    do przetwornika PC0 jest podlaczone 4.5V z zasilania przez rezystor 7.5KOhm

    Prosze o pomoc, co jest nie tak. (atmega sprawna, prawidlowo polaczona)

    kod programu

    Code:

    #include <avr/io.h>

    #define PORT_AD PORTC   //port C z wejsciami analogowymi
    #define DDR_AD DDRC
    #define PORT_LED PORTB   //port B z ledami
    #define DDR_LED DDRB

    unsigned int pomiarx;   //zmienna do przechowywania pomiaru osi X
    //unsigned int pomiary;   //zmienna do przechowywania pomiaru osi Y

    void Inicjalizacja(void)
    {
       DDR_AD=0x00;   //usatw port jako wejscie
       PORT_AD=0x00;   //wejscia stan niski
       DDR_LED=0xFF;   //usatw port jako wyjscia
       PORT_LED=0xFF;   //wyjscia stan wysoki
       
       
    //wybranie wewnetrznego zrodla napiecia odniesienia, tabela 74 dokumentacji AT8 (uref)
       ADMUX|=_BV(REFS0);
       ADMUX|=_BV(REFS1);
    //wybranie sposobu zapisu wyniku z wyrowaniem do lewej (8 starszych bitow wyniku w rejestrze ADCH)
       ADMUX|=_BV(ADLAR);
    //zezwolenie na konwersje (Ustawienie go zezwala na pracę przetwornika, a wyzerowanie wyłącza go)
       ADCSRA|=_BV(ADEN);
    //wybranie czestotliwosci dla taktowania przetwornika [usatwienie 011 dzielnik 8 czyli 125kHz] (patrz tabela 76 dok. AT8)
       ADCSRA|=_BV(ADPS0);
       ADCSRA|=_BV(ADPS1);

    }

    int main(void)
    {
       Inicjalizacja();
       
       while(1)
       {
          ADCSRA|=_BV(ADSC);               //rozpoczecie przetwarzania
          while(bit_is_set(ADCSRA,ADSC)){};   //oczekiwnaie na zakonczenie przetwarzania
          pomiarx=ADCH;                  //zapisanie starszych 8 bitow wyniku pomiaru do zmiennej "pomiarx"
       
          PORT_LED=~pomiarx;               //wyswietlenie wyniku pomiaru("~" dopelnienei do 2 (negacja bitow))
       }

    }


    PS. sorka za komentarze ale ucze sie dopiero programowac

    0 6
  • #2 15 Lut 2010 18:38
    paw789
    Poziom 18  

    Zmienną pomiarx zadeklaruj jako unsigned char, pozatym program wydaje się byc napisany poprawnie.
    Co to oznacza: "do przetwornika PC0 jest podlaczone 4.5V z zasilania przez rezystor 7.5KOhm" skąd te 4,5V z zasilania ?
    Skąd wiesz że Atmega sprawna i prawidłowo podłączona ? Pokaż schemat.

    0
  • #3 15 Lut 2010 18:44
    -nobile-
    Poziom 16  

    zasilanie jest brane z USB przez programator.
    Schematu jako takiego nie ma (polaczone na plytce stykowej)
    Uklad jest poprawnie podlaczony bo przed chwla dzialal mi program do zliczania impulsow i poprawnie wyswietlal wynik na diodach, wgralem ten i od ta dupa..

    teraz nawet program w stylu:

    #include <avr/io.h>



    int main(void)
    {
    DDRC=0xFF;
    PORTC=0xFF;


    }

    nie wygasza ledow.
    nie wiem co sie stalo
    AT padla czy co?

    0
  • #4 15 Lut 2010 18:47
    paw789
    Poziom 18  

    To w końcu gdzie masz podpięte diody, na PORTB czy PORTC ?

    0
  • #5 15 Lut 2010 18:49
    -nobile-
    Poziom 16  

    tu z pospiechu zrobilem blad...
    diody sa podpiete pod B
    ale mimo wszytsko to:

    DDRB=0xFF;
    PORTB=0xFF;

    ich nie wygasza

    0
  • #6 15 Lut 2010 18:52
    paw789
    Poziom 18  

    Jak masz podpięte diody ? Spróbuj z PORTB=0xAA;

    0
  • #7 15 Lut 2010 20:55
    -nobile-
    Poziom 16  

    Z PORTB=0xAA dalej to samo

    Diody sa podpiete w nastepujacy sposób:
    krotsza nozka (-) KATODA do uC, a dłuższa (+) ANODA do (+) zasilania

    Dodano po 1 [godziny] 36 [minuty]:

    Podłączylem teraz AT16 i dziala poprawnie, tylko nadal jest ciagle swiecenie diod (delikatnie migocza)

    Dodano po 17 [minuty]:

    Zrobielm wyzwalany przyciskiem pomiar i pokazuje wyniki ale nie wiem skad on je bierze..
    skoro do PC0 nie mam nic podpietego (zadnej wartosci napiecia) wyniki oscyluja w granicach 135 (po przeliczneiu z binarnego) ale sa czasami mocne odchyly.
    CO JEST NIE TAK??!!

    0