пʼятницю, 16 січня 2015 р.

Аналого-цифровий перетворювач, вольтметр на базі мікроконтролера ADC Atmega8 CodeVision AVR





#include <mega8.h>
#include <delay.h>
#include <stdio.h>

#asm
   .equ __lcd_port=0x18 ;PORTB
#endasm
#include <lcd.h>

#define ADC_VREF_TYPE 0x40// Опорна напруга АЦП з ножки AVCC

// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}

// global variables
float adc_code, voltage;
unsigned char string[4];//масив знаків для виводу на дисплей
void main(void)
{
// ADC initialization
// ADC Clock frequency: 250,000 kHz
// ADC Voltage Reference: AVCC pin
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x85;
// LCD module initialization
lcd_init(16);// Дисплей на 16 символів
lcd_clear();// Очищаємо дисплей
lcd_gotoxy(0,0);// Ставим курсор на 0 знак та 0 стрічку
lcd_putsf(" LCD voltmeter ");//Вивод повідомлення на нульову стрічку (першу)
lcd_gotoxy(0,1);// Ставим курсор на 0 знак та 0 стрічку
lcd_putsf(" Voltage:     V ");//Вивод повідомлення на нульову стрічку (першу)
delay_ms(100);
while (1)
      {
     adc_code=read_adc(0);// Зчитуємо результат АЦП
     voltage=(adc_code*5)/1024;// Перетворення в напругу
     sprintf(string, "%.2f",voltage);//формуємо стрінг із змінної "voltage" 
                                    //типу float з двома знаками після коми
     lcd_gotoxy(9,1);               
     lcd_puts(string);// Виводимо значення напруги                  
     delay_ms(100);
       };
}






Немає коментарів :

Дописати коментар