Вольтметр на atmega16a

Обсуждаем контроллеры компании Atmel.
L.O.D
Встал на лапы
Сообщения: 139
Зарегистрирован: Чт фев 11, 2016 18:35:37

Re: Вольтметр на atmega16a

Сообщение L.O.D »

COKPOWEHEU писал(а):Да что вы, откуда сомнения?!
Ну, точно не по тем пунктам, что вы перечислили.
COKPOWEHEU писал(а):Явно ведь не из-за использования в такой задаче чисел и плавающей точкой.
Для начинающего, вполне обычное явление.
COKPOWEHEU писал(а):И не из-за использования умножения + деления вместо умножения на константу.
А вот тут он прав, хотя и случайно. Правильнее обозначать количество секунд в сутках записью 60*60*24, а не 86400. А компилятор все равно превратит все это в одну константу.
COKPOWEHEU писал(а):И не незнания порядка записи переменных в арифметических выражениях.
Это вообще не понял о чем. В последнем арифметическом выражении одни сомножители, поэтому от порядка их записи ничто не изменится. Или было что-то еще?
- Из овощей я больше всего люблю пельмени... © Соседский Мальчик
aleksei18rus
Открыл глаза
Сообщения: 75
Зарегистрирован: Пн ноя 21, 2011 13:03:33

Re: Вольтметр на atmega16a

Сообщение aleksei18rus »

Так как я только начал разбираться где то и методом тыка, для меня это уже прогресс, времени нет особо. Где то беру готовые программы и разбираюсь в них пишу то что мне надо.
Novice user
Мудрый кот
Сообщения: 1704
Зарегистрирован: Вт янв 05, 2016 10:14:25
Откуда: поселок Мелеуз

Re: Вольтметр на atmega16a

Сообщение Novice user »

начал повторять ваш вольметр(изучаю си),а как выбрать внутреннее опорное напряжение ?
правильно ли я понимаю что надо выставить ADMUX=192(Internal 2.56V Voltage Reference with external capacitor at AREF pin)?
Да-все верно,проверил :))
исходник ниже
Спойлер#include <mega16.h>
#include <my_lcd.c>
#include <delay.h>
#include <stdio.h>
#define ADC_VREF_TYPE ((0<<REFS1) | (1<<REFS0) | (0<<ADLAR))
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
// Place your code here

}

// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void)
{
// Place your code here

}
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=192+adc_input;
delay_us(10);
ADCSRA|=(1<<ADSC);
while ((ADCSRA & (1<<ADIF))==0);
ADCSRA|=(1<<ADIF);
return ADCW;
}
// Declare your global variables here
char string[10];
void main(void)
{
int data; // Переменная для хранения данных выборки. int так как регистр 10 разрядов.
float V; // Переменная для выводимого значения. float так как у нас точность до 2 знаков.
PORTA=0x00;
DDRA=0xFC;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0xFC;
DDRD=0x03;
// Timer/Counter 0 initialization
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
GICR|=0xC0;
MCUCR=0x0A;
MCUCSR=0x00;
GIFR=0xC0;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// Analog Comparator initialization
ACSR=0x80;
SFIOR=0x00;
//ADMUX=0; // Первая строка, № порта.
ADCSR=0x85; // Вторая строка настройка АЦП. ADEN Разрешение работы АЦП 1-да 0-нет ADSC Запуск преобразование 1-старт
// Global enable interrupts
#asm("sei")


//ВЫВОДИМ ЗАСТАВКУ
lcd_init();
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("WINSTAR 16x02");
lcd_clear();
while(1){
// delay_ms(20); // Задаем задержку в 20 миллисекунд
// ADCSR |= 0x40; // Записываем 1 в ADSC
data = read_adc(1); // Вычитываем значение
V = (float) data*0.0048828; // Переводим в вольты
sprintf(string, " %1.2f", V); // форматируем
lcd_gotoxy(10,1); // Выставляем курсор
lcd_puts(string);lcd_puts("V"); // Выводим значение
}
}


теперь часики добавлю...
aleksei18rus
Открыл глаза
Сообщения: 75
Зарегистрирован: Пн ноя 21, 2011 13:03:33

Re: Вольтметр на atmega16a

Сообщение aleksei18rus »

А в какой программе пишите? Хочу еще ампепметр туда же пихнуть, пока не знаю как... Хочу в зарядное устройство для автомобиля засунуть.
Novice user
Мудрый кот
Сообщения: 1704
Зарегистрирован: Вт янв 05, 2016 10:14:25
Откуда: поселок Мелеуз

Re: Вольтметр на atmega16a

Сообщение Novice user »

code vision avr 2.04
у меня демо плата по своему,там и место под LM358 предусмотрел,а также кнопки,энкодер,фотоприемник,кварц на 32768 гц, кварц на 20 МГц(думаю еще добавлять частотомер ),аккумулятор 18650 с зарядкой от USB,преобразователь на 5 вольт,USB<>UART на CH340,пока этого хватит для изучения си :))
[img]
Изображение[/img]
Ответить

Вернуться в «AVR»