АЦП ATmega16 - Страница 10 - Форум
Вторник, 27.08.2013, 16:20 Вы вошли как Гость | Группа "Гости"
Eugene's MCU
Главная | | Мой профиль | Выход | RSS

[ Личные сообщения() · Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Страница 10 из 11«12891011»
Форум » Основной раздел » Разработка: программирование, схемотехника. » АЦП ATmega16 (Учебная программа - вольтметр на ATmega16)
АЦП ATmega16
mehanik

Дата: Понедельник, 23.05.2011, 19:31 | Сообщение # 91

Группа: Пользователи
Сообщений: 2
Статус: Offline
Привет всем. Не могу разобраться где проблема.
Code

/*
CodeWizardAVR V1.24.6 Professional
Chip type           : ATmega16
Program type        : Application
Clock frequency     : 8,000000 MHz
Memory model        : Small
External SRAM size  : 0
Data Stack size     : 256
*/

#include <mega16.h>
#include <stdio.h>

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

#define ADC_VREF_TYPE 0x00

unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input|ADC_VREF_TYPE;
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
char lcd_buffer[16];
float v;
unsigned int data;
void main(void)
{
   
PORTA=0x00;
DDRA=0x00;

PORTB=0x00;
DDRB=0x00;

PORTC=0xff;
DDRC=0xff;

PORTD=0x00;
DDRD=0x00;

TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

MCUCR=0x00;
MCUCSR=0x00;

TIMSK=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// ADC initialization
// ADC Clock frequency: 125,000 kHz
// ADC Voltage Reference: AREF pin
// ADC Auto Trigger Source: None
ADMUX=ADC_VREF_TYPE;
ADCSRA=0x86;

// LCD module initialization
lcd_init(16);

while (1)
       {
       // Place your code here
       data=read_adc(0);
       v=(data)*(5/1024);
       lcd_clear();
         lcd_gotoxy(0,0);
         sprintf(lcd_buffer, "V=%i", v);
         lcd_puts(lcd_buffer);
         lcd_read_byte(16);
       };
}

Симулировал в протеусе и получил на экране V=0.
Что я только не делал всё без результатно. Перерыл море информации.

V3.rar(65Kb)

[ (BY) ]

eugenemcu

Дата: Понедельник, 23.05.2011, 19:38 | Сообщение # 92

Группа: Администраторы
Сообщений: 115
Статус: Offline
Как минимум, попробуйте заменить
v=(data)*(5/1024);
на
v=(data)*(5.0/1024);



[ (RU) ]

mehanik

Дата: Понедельник, 23.05.2011, 23:15 | Сообщение # 93

Группа: Пользователи
Сообщений: 2
Статус: Offline
Спасибо. Всё пошло. И я ещё подправил.
Code
sprintf(lcd_buffer, "V=%.2f", v);



[ (BY) ]

qwert

Дата: Пятница, 07.10.2011, 18:33 | Сообщение # 94

Группа: Пользователи
Сообщений: 4
Статус: Offline
добрый день. Начинаю разбираться с языком СИ, микроконтроллерами и IAR, спасибо за уроки для начинающих. Созрел такой вопрос: Есть микроконтроллер например аttiny 13, хочу сделать чтобы два светодиода мигали по заранее записанной программе, например один 0.1Гц-10Гц, а второй от 100Гц до 200Гц. Как я понял чтобы легко можно было менять программу необходимо таблицу частот записать в еепром??


[ (BY) ]

eugenemcu

Дата: Пятница, 07.10.2011, 19:25 | Сообщение # 95

Группа: Администраторы
Сообщений: 115
Статус: Offline
EEPROM предназначен для сохранения после выключения питания значений переменных (последних режимов, индивидуальных настроек устройства) изменённых в процессе работы программы. Как телевизор запоминает последний канал и уровень громкости. Если вам такой эффект не нужен, то не нужен и EEPROM.
Из вашего рассказа мало понятно как должна работать программа.



[ (RU) ]

qwert

Дата: Пятница, 07.10.2011, 20:27 | Сообщение # 96

Группа: Пользователи
Сообщений: 4
Статус: Offline
Два светодиода. Первый моргает с частотой от 0.1 до 10Гц(например частоты в герцах: 1-4-9-2-5-1-8-9-2-7-2). Второй светодиод моргает но с частотой от 100 до 200Гц(например частоты в герцах: 100-130-150-190-110-110-190-170). Вот такую задачку я придумал себе для изучения микроконтроллеров.
Как я понял нужно записать два массива:
первый - 1-4-9-2-5-1-8-9-2-7-2
второй - 100-130-150-190-110-110-190-170
И считывать значения подряд



[ (BY) ]

eugenemcu

Дата: Пятница, 07.10.2011, 20:31 | Сообщение # 97

Группа: Администраторы
Сообщений: 115
Статус: Offline
Ну да надо бы... и EEPROM тут вроде ни к чему))


[ (RU) ]

qwert

Дата: Пятница, 07.10.2011, 21:53 | Сообщение # 98

Группа: Пользователи
Сообщений: 4
Статус: Offline
просто я думал чтоб была возможность оперативно заменить программу, переписал еепром и уже по другому начали моргать светодиоды, а прошивка осталась старая.


[ (BY) ]

eugenemcu

Дата: Пятница, 07.10.2011, 21:59 | Сообщение # 99

Группа: Администраторы
Сообщений: 115
Статус: Offline
менять частоту можно нажатием кнопочки, а если надо запоминать как мигало перед последним выключением тогда eeprom


[ (RU) ]

bender57

Дата: Воскресенье, 18.12.2011, 20:17 | Сообщение # 100

Группа: Пользователи
Сообщений: 4
Статус: Offline
Здравствуйте!
Подскажите как доработать программу цифрового вольтметра, если результат необходимо вывести не на светодиод, а передать по сети RS485?
И необходимо измерить отклонение напряжения от заданного (т.е сделать за минуту N измерений и усреднить)

на схеме VR2 7805 это датчик напряжения?



[ (RU) ]

Форум » Основной раздел » Разработка: программирование, схемотехника. » АЦП ATmega16 (Учебная программа - вольтметр на ATmega16)
Страница 10 из 11«12891011»
Поиск: