roboforum.ru

Технический форум по робототехнике.

считывание значений с АЦП mega8.

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

считывание значений с АЦП mega8.

Сообщение lggswep » 26 фев 2012, 18:36

Добрый день.
Я новенький в программировании контролеров. Но мне очень нравиться.
Я столкнулся с проблемой. Не могу считать значения с АЦП.
Изначально задуманная программа была такая: управление мотором(5В) переменным резистором через МК, естественно с помощью ЩИМ. ТО есть: кручу потенциометр в одну строну обороты увеличиваются - в другую уменьшаются.
С ШИМом я заробрался. Вот застрял на АЦП.
Я написал программу для считывания значения с 0-го входа АЦП, и вывод значения на ЖКИ(LM016). Ничего не выводи.
Вот текст:

#include <mega8.h>
#include <delay.h>
#define ADC_VREF_TYPE 0x00
#include <lcd.h>
#include <stdio.h>
#asm
.equ __lcd_port=0x18
#endasm ;

int t;
char *str;
// Read the AD conversion result

unsigned int read_adc(void)
{
ADMUX=00000000;
// 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;
}

// Declare your global variables here

void main(void)
{
// ADC initialization
// ADC Clock frequency: 1000,000 kHz
// ADC Voltage Reference: AREF pin
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x83;


while (1)
{
t=read_adc();
sprintf(str,"%",t);
lcd_init(16); //инициализация экрана на 16 символов
lcd_gotoxy(0, 0); //установка курсора в точку (0,0)
lcd_puts(str); //вывод строки
}
}
Пожалуйста, помогите юному инженеру)
lggswep
 
Сообщения: 4
Зарегистрирован: 26 фев 2012, 18:14

Re: считывание значений с АЦП mega8.

Сообщение boez » 27 фев 2012, 12:40

Учи С :)
1. Память под строку - где? (не надо сразу бежать за функцией malloc, сделай статический массив символов)
2. В sprintf "%" - это чего за формат такой?

Короче, замени t=read_adc(); на t=77; и добейся появления этих 77 на LCD. А с АЦП у тебя даже возможно все нормально.
boez
 
Сообщения: 1981
Зарегистрирован: 27 авг 2008, 10:45
Откуда: Харьков
прог. языки: С/С++

Re: считывание значений с АЦП mega8.

Сообщение lggswep » 27 фев 2012, 16:49

с памятью я понял. Учту.
а формат я не знаю. В инете нашел вот и написал. там еще после % добавляют буквы, а что они означают - не в курсе.
Сейчас буду исправлять. Спасибо.
lggswep
 
Сообщения: 4
Зарегистрирован: 26 фев 2012, 18:14

Re: считывание значений с АЦП mega8.

Сообщение Romikgy » 27 фев 2012, 18:04

d - целое число....
die Wahrheit ist irgendwo da draußen
Аватара пользователя
Romikgy
 
Сообщения: 750
Зарегистрирован: 15 ноя 2009, 13:37
Откуда: Porto Franco "Odessa"

Re: считывание значений с АЦП mega8.

Сообщение lggswep » 27 фев 2012, 18:09

Да вот только что дописал. Заработало. Но число изменяется только когда резистор поворачиваешь от половины до максимума, а то 0 до половины число на выходе на изменяется. Наверное переполнено. А как когда сделать что-бы оно по всему диапазону изменялось число.??
lggswep
 
Сообщения: 4
Зарегистрирован: 26 фев 2012, 18:14

Re: считывание значений с АЦП mega8.

Сообщение boez » 27 фев 2012, 21:36

А вот это уже может быть как в схеме проблема, так и в проге. Померяй тестером реальное напряжение на ноге АЦП в крайних и среднем положении потенциометра - это раз, и еще напиши сюда какие конкретно числа выводятся в крайних и среднем положениях.
boez
 
Сообщения: 1981
Зарегистрирован: 27 авг 2008, 10:45
Откуда: Харьков
прог. языки: С/С++

Re: считывание значений с АЦП mega8.

Сообщение lggswep » 27 фев 2012, 22:36

дело в том что я только симулирую. еще нет реальной схемы. Делаю в Протеусе.
теперь значения:
Напряжение на потенциометре. Я потенциометр(1кОм) подключил к 1 вольту.
Напряжение для АЦП выбрал на ножке АРЕФ. там поставил 5 вольт.
теперь когда ползунок на максимуме сопротивление 1кОм напряжение => 0 вольт, на экране число 0.
когда ползунок на минимуме сопротивление 0кОм напряжение => 1 вольт, на экране число 102.Почему 102 видимо связано с настройками АЦП.
Начиная с половины потенциометра 0,5кОм = 0,5 Вольт. число 102, не изменяется.
Что делать?
Еще измерение очень долго проходят. То есть изменение числа при изменении позиции движка потенциометра проходит примерно 4 сек. Как ускорить?
lggswep
 
Сообщения: 4
Зарегистрирован: 26 фев 2012, 18:14


Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21