f
Warning: Cannot modify header information - headers already sent by (output started at /home/anderian/ftp/www_forum/db/mysql4.php:1) in /home/anderian/ftp/www_forum/includes/sessions.php on line 548

Warning: Cannot modify header information - headers already sent by (output started at /home/anderian/ftp/www_forum/db/mysql4.php:1) in /home/anderian/ftp/www_forum/includes/sessions.php on line 549

Warning: Cannot modify header information - headers already sent by (output started at /home/anderian/ftp/www_forum/db/mysql4.php:1) in /home/anderian/ftp/www_forum/includes/page_header.php on line 343
And-Tech :: Zobacz temat - Woltomierz dwu kanałowy

Strona korzysta z plików cookie w celu realizacji usług zgodnie z Politykš prywatnoœci.

Możesz okreœlić warunki przechowywania lub dostępu do cookie w Twojej przeglšdarce lub konfiguracji usługi.

And-Tech Strona Główna And-Tech
Forum firmy And-Tech

FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  GrupyGrupy
RejestracjaRejestracja  ZalogujZaloguj  AlbumAlbum  DownloadDownload

Poprzedni temat «» Następny temat
Woltomierz dwu kanałowy
Autor Wiadomość
młody 

Dołączył: 28 Maj 2012
Posty: 1
Wysłany: Wto Maj 29, 2012 10:48 am   Woltomierz dwu kanałowy

Witam!

próbuję zrobić woltomierz dwu kanałowy, na podstawie zestawu evb4.3 v4 z atmegą 32A
wynik ma być wyświetlany na wyświatlaczu LCD.

Mam mały problem, bo tak na prawdę wyświetla mi na razie tylko tak na prawdę liczby (losowe?) nie zależnie czy coś jest wpięte w portA czy nie. Czy mógłby ktoś spojrzeć na ten kod i jakoś pomóc?

Kod:
#define F_CPU 16000000
     
    /* Pod którym portem jest szyna danych */
    #define HD44780_DATA_GPIO C
     
    #define HD44780_DATA_HIGHHALFBYTE 1
     
    /* Gdzie w LCD podpięty jest RS i E */
    #define HD44780_RS_GPIO C
    #define HD44780_RS_BIT 2
     
    #define HD44780_E1_GPIO C
    #define HD44780_E1_BIT 3

    #define HD44780_WIDTH 16
    #define HD44780_HEIGHT 2
     
    /* Kodowanie znaków itd. */
    #define HD44780_CHARSET HD44780_CHARSET_PL
    #define HD44780_CODEPAGE HD44780_CODEPAGE_UTF8 
    #define PORT_AD PORTA        // Port z wejściami analogowymi
    #define DDR_AD DDRA
       
    /* Importowanie bibliotek */
    #include <tAvrLib/hd44780.h>            // obsługa LCD
    #include <avr/io.h>
    #include <avr/pgmspace.h>     
    unsigned int ch1_asci, ch2_asci;
    char ch1[8];
    char ch2[8];
    void ADC_init(void)
{
    DDR_AD=0x00;        // Port jako wej&#182;cia
    PORT_AD=0x00;        // Port a wej&#182;cia bez podci&#177;gania
   
// 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ę ciągłą    to jest ADSC, konwersja pojedyńcza: ADEN
    ADCSRA |= _BV(ADEN);       
// Wybranie częstotliwo&#182;ci dla taktowania przetwornika  (1/32 częstotliwosci zegara kontrolera)
  ADCSRA |= _BV(ADPS0);   
  ADCSRA |= _BV(ADPS1);   
 
}
   
   
     
    int main(void)
    {
            hd44780_init();                 // inicjalizacja LCD
            HD44780_BIND_STREAM(stdout);
            printf("preskaler8+ wewnętrzne vcc");
            _delay_ms(1000);
            ADC_init();
            while(1)                        // pętla nieskończona
            {
               
                    ADCSRA |= _BV(ADSC);         // Rozpoczęcie przetwarzania - wybrany był kanał 0
                    while(bit_is_set(ADCSRA,ADSC))    // Oczekiwanie na zakończenie przetwarzania
                        {};   
                    ch1_asci=ADCH;                 // Zapisanie starszych 8 bitów wyniku konwersji w kanale 1 do zmiennej "ch1"
                     
                      ADMUX |= _BV(0);            // Wybranie kanału 1
                      ADCSRA |= _BV(ADSC);         // Rozpoczęcie przetwarzania
                      while(bit_is_set(ADCSRA,ADSC))    // Oczekiwanie na zakończenie przetwarzania
                        {};   
                    ch2_asci=ADCH;                 // Zapisanie starszych 8 bitów wyniku konwersji w kanale 2 do zmiennej "ch2_asci"
                      ADMUX &= ~_BV(0);
                      ADMUX |= _BV(1);
                      ch1_asci=ch1_asci*1024/2;
                       ch2_asci=ch2_asci*1024/2;
                    utoa(ch1_asci,ch1,10); 
                    utoa(ch2_asci,ch2,10);
                   
                    // wyrzucanie wyniku na wyświetlacz
                    hd44780_clear ();
                    printf("1CH:");
                    printf(ch1);
                    /*hd44780_goto(9, 0);
                    printf("V");*/
                    hd44780_goto(0, 1);                   
                    printf("2CH:");
                    printf(ch2);
                    /*hd44780_goto(9, 1);
                    printf("V");*/
                   
               _delay_ms(1000);
              // return 0;
            }
    }
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group