AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
07.09.2014, 08:08
|
|
Прописка
Регистрация: 07.09.2014
Сообщений: 136
Сказал спасибо: 18
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Проблема с АЦП
Здравствуйте!
я изучаю си для микроконтроллеров, появилась проблема с ацп,
оно вроде считывается но информация на дисплее не изменяется
всегда одно и то же значение
![Нажмите на изображение для увеличения
Название: Снимок.JPG
Просмотров: 170
Размер: 100.8 Кб
ID: 69337](https://kazus.ru/forums/attachment.php?attachmentid=69337&thumb=1&d=1410062590)
код такой
Код:
|
//подключение библиотек
#include ‹mega8.h›
#include ‹delay.h›
#include ‹stdio.h›
#include ‹lcd.h›
void main(void)
{
int d;
char string[10];
float K;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
#asm
.equ __lcd_port=0x18 ;PORTB
#endasm
lcd_init(16);
ACSR=0x80;
ADMUX=0;
ADCSR=0x85;
while (1)
{
delay_ms(10);
ADCSR |= 0x40;
d = ADCW;
K = (float) d*1;
sprintf(string, "%1.2f K", K);
lcd_gotoxy(0,0);
lcd_puts(string);
};
} |
это проект в протеусе 7.1 и CodeVisionAVR
pot.zip
где ошибка? я вроде всё правильно сделал
Последний раз редактировалось AVRkin; 07.09.2014 в 13:02.
|
|
|
|
07.09.2014, 08:43
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,996
Сказал спасибо: 2,556
Сказали Спасибо 11,872 раз(а) в 5,950 сообщении(ях)
|
Re: проблема с АЦП
Кто мешает воспользоваться Визардом и использовать функцию read_adc(num chan) или посмотреть, как она устроена?
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
07.09.2014, 09:03
|
|
Прописка
Регистрация: 07.09.2014
Сообщений: 136
Сказал спасибо: 18
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Re: проблема с АЦП
Сообщение от akegor
|
Кто мешает воспользоваться Визардом и использовать функцию read_adc(num chan) или посмотреть, как она устроена?
|
с функцией получилось, это я другой способ пробую)
__________________
Самое главное умение - умение радоваться жизни.
|
|
|
|
07.09.2014, 09:12
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,996
Сказал спасибо: 2,556
Сказали Спасибо 11,872 раз(а) в 5,950 сообщении(ях)
|
Re: проблема с АЦП
АЦП надо запустить и дождаться результата. Посмотрите, как это в функции сделано.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
07.09.2014, 12:40
|
|
Прописка
Регистрация: 07.09.2014
Сообщений: 136
Сказал спасибо: 18
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Re: проблема с АЦП
код допилил
Код:
|
#include ‹mega8.h›
#asm
.equ __lcd_port=0x18 ;PORTB
#endasm
#include ‹lcd.h›
#include ‹delay.h›
#include ‹stdio.h›
char string[10];
void main(void)
{
int data;
float V;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
ACSR=0x80;
ADCSR=0x85;
lcd_init(16);
lcd_putsf("12345678");
while (1)
{
delay_ms(20);
ADCSR |= 0x40;
data = ADCW;
V = (float) data*0.0048828;
sprintf(string, "%1.2f", V);
lcd_gotoxy(0,1);
lcd_puts(string);
};
} |
в симуляторе работает, а в железе значения не меняются, пишет 5.00
__________________
Самое главное умение - умение радоваться жизни.
|
|
|
|
07.09.2014, 12:56
|
|
Прописка
Регистрация: 07.09.2014
Сообщений: 136
Сказал спасибо: 18
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Re: проблема с АЦП
при
lcd_putsf("12345678");
sprintf(string, "%1.4f", V);
показывает
на резистор и даже замыкание ножки на 5 или0 не реагирует
__________________
Самое главное умение - умение радоваться жизни.
|
|
|
|
07.09.2014, 13:19
|
|
Прописка
Регистрация: 07.09.2014
Сообщений: 136
Сказал спасибо: 18
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Re: проблема с АЦП
AVCC повесил на 5 вольт, заработало
все разряды после точки постоянно изменяются, как это победить?
__________________
Самое главное умение - умение радоваться жизни.
Последний раз редактировалось AVRkin; 07.09.2014 в 13:37.
|
|
|
|
07.09.2014, 13:51
|
|
Заблокирован
Регистрация: 21.01.2014
Сообщений: 589
Сказал спасибо: 7
Сказали Спасибо 267 раз(а) в 206 сообщении(ях)
|
Re: проблема с АЦП
Вот в этом месте
Код:
|
ADCSR |= 0x40;
data = ADCW; |
первая строчка стартует преобразование АЦП, а вторая тут же забирает результат. Между этими двумя событиями проходит времени микросекунда, АЦП просто ничего еще не успел сделать, ему нужно какое-то время на выполнение преобразования, типа, десятки микросекунд, а может и сотня.
Чтобы определить готов ли результат, надо после старта в пустом бесконечном цикле проверять стартовый бит. Когда АЦП закончит, процессор сбрасывает этот бит, из цикла выходим и забираем результат. То есть в приведенном фрагменте вторая строчка должна быть
while (ADCSR & 0x40);
|
|
|
Сказали "Спасибо" Yurkin2014
|
|
|
07.09.2014, 13:54
|
|
Прописка
Регистрация: 07.09.2014
Сообщений: 136
Сказал спасибо: 18
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Re: проблема с АЦП
дребезг разрядов убрал с помощью батарейки в качестве ИОН
__________________
Самое главное умение - умение радоваться жизни.
|
|
|
|
07.09.2014, 13:56
|
|
Почётный гражданин KAZUS.RU
Регистрация: 30.09.2006
Сообщений: 1,560
Сказал спасибо: 158
Сказали Спасибо 661 раз(а) в 431 сообщении(ях)
|
Re: проблема с АЦП
Сообщение от Yurkin2014
|
надо после старта в пустом бесконечном цикле проверять стартовый бит
...
while (ADCSR & 0x40);
|
У Вас опечатка, цикл не бесконечный.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Помогите с АЦП ATmega168
|
r0st |
Микроконтроллеры, АЦП, память и т.д |
18 |
28.05.2012 23:51 |
Некорректно работает АЦП Atmega 8
|
putmannn |
Микроконтроллеры, АЦП, память и т.д |
15 |
13.09.2011 06:03 |
AtMega АЦП
|
impuls-v |
Микроконтроллеры, АЦП, память и т.д |
19 |
20.06.2011 20:12 |
Стабилизация измерения АЦП ATMega8535
|
7Fantomas7 |
Микроконтроллеры, АЦП, память и т.д |
41 |
02.03.2011 13:25 |
АЦП и UART
|
Jasper |
Микроконтроллеры, АЦП, память и т.д |
9 |
02.07.2006 07:53 |
Часовой пояс GMT +4, время: 16:55.
|
|