#include <mega8.h> #include <delay.h> #include <stdio.h> #asm .equ __lcd_port=0x12 ;PORTD #endasm #include <lcd.h> #define ADC_VREF_TYPE 0x40// Опорна напруга АЦП з ножки AVCC //TCCR1B #define CS0 0 #define CS1 1 #define CS2 2 // 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 unsigned int adc_code,old_code=1, pwm; unsigned char string[10];//масив знаків для виводу на дисплей void main(void) { // ADC initialization // ADC Clock frequency: 250,000 kHz // ADC Voltage Reference: AVCC pin ADMUX=ADC_VREF_TYPE & 0xff; ADCSRA=0x85; DDRB=0xFF;//Порт Б на виход //Fast PWM 8-bit //OC1A встановлюється в 1 при свівпаданні (COM1A1=1, COM1A0=1) //OC1B скидається в 0 при свівпаданні (COM1B1=1, COM1B0=0) TCCR1A=(1<<COM1A1)|(1<<COM1A0)|(1<<COM1B1)|(1<<WGM10); TCCR1B=(1<<CS0)|(1<<WGM12); // LCD module initialization lcd_init(16);// Дисплей на 16 символів lcd_clear();// Очищаємо дисплей lcd_gotoxy(0,0);// Ставим курсор на 0 знак та 0 стрічку lcd_putsf(" LCD PWM Control ");//Вивод повідомлення на нульову стрічку (першу) lcd_gotoxy(0,1);// Ставим курсор на 0 знак та 0 стрічку lcd_putsf("PWN 0-100%: %");//Вивод повідомлення на нульову стрічку (першу) delay_ms(100); while (1) { adc_code=read_adc(0)/4;// Зчитуємо результат АЦП if(adc_code!=old_code) //Якщо значення з АЦП змінилось { old_code=adc_code; pwm=(adc_code*100)/255;//Перетворення коду 0-1023 в 0-100% для виведення на lcd sprintf(string, "%d",pwm);//формуємо стрінг із змінної "pwm" //типу int в десятковому вигляді //заносим значення в регістри порівняння OCR1A=adc_code; OCR1B=adc_code; lcd_gotoxy(12,1); lcd_puts(string);// Виводимо значення змінної "pwm" } delay_ms(100); }; }
пʼятницю, 16 січня 2015 р.
Апаратний ШІМ мікроконтролера Atmega8 + PWM+LCD
Підписатися на:
Дописати коментарі
(
Atom
)
Немає коментарів :
Дописати коментар