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

Atmega32 i problem z odczytem po ADC (brak wyniku)

woser 24 Sty 2011 08:43 1638 5
REKLAMA
  • #1 9049110
    woser
    Poziom 10  
    Witam serdecznie, mam problem z uruchomieniem ADC na atmega32 , gdy podłączam masę czy też 5V pod port ciągle przy odczycie mam jakieś śmieci, schemat mojego urządzenia dodaje w załączniku ? Co tu jest nie tak aby odczytywać wartości od 0 do 255 :/. Dodam że ten sam program na zestawie uruchomieniowym and-techa działa bez zarzutu, smieci jedynie przy odłączonych portach
    Atmega32 i problem z odczytem po ADC (brak wyniku)

    Proszę poprawić tytuł - regulamin p. 11.1
    Usunąłem zbędny załącznik.
    [zumek]
  • REKLAMA
  • #2 9049649
    arktik1
    Poziom 27  
    Może jakiś kod byś przedstawił?
  • REKLAMA
  • #3 9049794
    woser
    Poziom 10  
    
    /
    // Podłaczenie wyświetlacza LCD
    // BL = PortC.1
    // Rs = PortC.2
    // E = PortC.3
    // Db4 = PortC.4
    // Db5 = PortC.5
    // Db6 = PortC.6
    // Db7 = PortC.7
    // BL = +5V
    //
    
    
    #include <avr/io.h>
    #include <avr/pgmspace.h>
    #include "adc.h"
    #include "uart.h"
    #include <stdlib.h> 
    
    
    #include "lcd.h"
    
    void pomiar_wyjsc()
    {
    u08 adc0, adc1;			// zmierzona wartość z przetwornika będzie w tych zmiennych
    LCD_xy(0,0);
     LCD_putstr_P(PSTR("Wyjscie:        "));
     LCD_xy(0,1);
     LCD_putstr_P(PSTR("AD1:    AD2:    "));
     adc0=ADC_convert_10bit(0);
     adc1=ADC_convert_10bit(1);
     LCD_xy(4,1);
     LCD_putint(adc0,10);
     LCD_xy(12,1);
     LCD_putint(adc1,10);
     UART_putint(adc0,10);
    delayms(3000);
    LCD_clear();
    }
    
    
    int main(void)
    {
      
      LCD_init();         
    
      ADC_init();
      ADC_set_prescaler(ADC_PRESCALE_DIV32); 
    
    while(1)
    {
    pomiar_wyjsc();
    }
    }
    
  • REKLAMA
  • REKLAMA
  • #5 9051492
    Azonic_2006
    Poziom 17  
    Witam!!!
    Słabo u mnie z angielskim, ale w nocie napisali, że częstotliwość dla adc musi być z zakresu 50kHz do 200kHz. Mając zegar 16Mhz i dzieląc przez 32 da nam to 500kHz wiec za dużo.
    Dlatego radzę ustawić preskaler na 128 i wtedy osiągniemy 125 kHz.
    Druga sprawa to konfiguracja napięcia odniesienia.
    Nie wiadomo jakie jest ustawione, ale chyba powinno być AVCC.
    Dodatkowo brakuje dławika na zasilaniu, a noga aref chyba powinna być podłączona przez kondensator do masy, ale tego pewny nie jestem.
    Pozdrawiam!!!
    Azonic_2006
  • Pomocny post
    #6 9051712
    janbernat
    Poziom 38  
    Zacząc od kondensatora na AREF i dławika w szereg do AVCC.
    Potem dodać kondensatory 100nF jak najbliżej VCC i AVCC do masy.
REKLAMA