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.

programowanie w c Atmega8 potencjometr oraz przetwornik U/f

BartazZ9 11 Lis 2007 13:49 3423 5
  • #1 11 Lis 2007 13:49
    BartazZ9
    Poziom 10  

    witam,
    chce wykonac sobie nastepujacy projekt: chce aby moja Atmega8 czytala napiecie z potencjometru obrotowego oraz po obrobce danych(przeliczanie np. katu obrotu potekcjometru) wyswietlala to na lcd.

    Wyswietlanie na lcd mam juz praktycznie zrobione ale nie bardzo wiem jak zabrac sie za oprogramowanie wbudowanego w atmege8 przetwornika ADC(czy on wystarczy? czy moze dodac do tego jakis zewnetrzny przetwornik?)

    prosze o jakies rady na temat przetwornika

    0 5
  • #2 12 Lis 2007 00:33
    Bogus105
    Poziom 16  

    wszystko na ten temat jest w datasheet atmegi. sam chcę wykorzystywać ADC w atmega8, przeglądałem datasheet i więcej pytań nie ma jak sięgo przeczyta

    0
  • #3 12 Lis 2007 07:59
    Ch.M.
    Poziom 27  

    Witaj
    Robisz dzielnik napięciowy na potencjometrze lub na potencjometrze i rezystorze (rezystorach) jeśli jest to konieczne. Srodkowa nózka potencometru do wejśia konitrolera a zewnętrzne do masy oraz (jeśli tego trzeba przez rezystor) do plusa. Dokładność pomiaru będzie i tak lepsza niz liniowość takiego potencjometru, możesz spokojnie wykorzystać tylko najstarsze 8bitów.

    0
  • #4 20 Lis 2007 18:40
    BartazZ9
    Poziom 10  

    czyli rozumiem ze zeby skorzystac z ADC w atmega8 musze polaczyc ukladzik tak ja na rysunku z dokumentacji Figure 96?
    co wtedy z napieciem odniesienia? czy jezeli podlacze AREF do masy poprzez kondensator to moim napieciem odniesienia bedzie napiecie zasilania?

    0
  • #6 29 Lis 2007 16:32
    BartazZ9
    Poziom 10  

    polaczylem moja atmege8 wg schematu figure 96 z datasheet, dodatkowo aby wybrac wew napiecie odniesienia dodalem kondensator między AREF i GND wg stronki powyzej.

    funkcja inicjalizujaca moj adc jest ponizej(rozniez ze stronki do ktorej link zamieszczony jest w powyzszym poscie)

    Code:
    void Inicjalizacja(void)
    
    {
       DDR_AD=0x00;      // Port jako wejścia
       PORT_AD=0x00;      // Port C wejścia bez podciągania
       //DDR_F=0xF0;         // Młodsza połowa portu jako wejścia starsze cztery bity jako wyjścia
    //   PORT_F=0xFF;      // Wejścia z podciąganiem wyjścia w stanie wysokim
          
    // Wybranie wewnętrznego żródła napięcia odniesienia   
       ADMUX |= _BV(REFS0);      
       ADMUX |= _BV(REFS1);
    //   Wybranie sposobu zapisu wyniku z wyrównaniem do lewej (osiem starszych bitów wyniku w rejestrze ADCH)
       ADMUX |= _BV(ADLAR);      
    // Zezwolenie na konwersję   
       ADCSRA |= _BV(ADEN);      
    // Wybranie częstotliwości dla taktowania przetwornika  (1/8 częstotliwosci zegara kontrolera)
       ADCSRA |= _BV(ADPS0);   
       ADCSRA |= _BV(ADPS1);   //
       
    }


    w bloku glownym mojego programu mam nastepujacy kod:
    Code:

    int main(void)
    {
        inicjalizacja_LCD();
       Inicjalizacja();  // Inicjalizacja kontrolera

        char kat1="K1:";
       char potencjometr1="P1:";
       
       char kat2="K2:";
       char potencjometr2="P2:";
       
       
       char pomiar1[5] ; //= (char) elo;
       char pomiar2[5] ; //= (char) elo;

       
       
             while(1)
             {   
                //czysclcd();
                 piszilcd(0x0C);    // włącz LCD, bez kursora i mrugania

                ADCSRA |= _BV(ADSC);         // Rozpoczęcie przetwarzania
                while(bit_is_set(ADCSRA,ADSC))   // Oczekiwanie na zakończenie przetwarzania
                {};   
                czekaj(10);
                pomiar=ADCH;
    }
    }


    wynik wyswietlam sobie na lcd, niestety nie wiem skad on tak naprawde sie bierze(wynik oscyluje w granicach 255). Kiedy podaje na port PC0 napiecie niestety nic sie nie dzieje a chce po prostu zeby to napiecie sie przekonwertowalo i zostalo wyswietlone na lcd. moglby mi ktos pomoc i zobaczyc co robie nie tak?

    0