АЦП. Разбор полётов

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
просто КОТ
Друг Кота
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ
Контактная информация:

АЦП. Разбор полётов

Сообщение просто КОТ »

Граждане, нуждаюс в Вашей помощчи. Мне надо, в целях саморазвития, запустить ЦАП в АТтини13. Он тама 10-битный. НО! Выход инфы у него через 2 регистра -- ADCL & ADCH. Как их читать. В дате сказано, что для низкой точности хватит и ADCH, а если надо точно, то тут уже и ADCL надо.
ВОПРОС: КАК МНЕ С ЭНТИХ РЕГИСТРОВ СЧИТАТЬ ИНФУ?!
Изображение
И ты врёшь!!! © Vladisman
Изображение
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: АЦП. Разбор полётов

Сообщение Аlex »

:facepalm:

Может просто прочитать эти регистры ? Не пробовали ?
Аватара пользователя
Ser60
Друг Кота
Сообщения: 3780
Зарегистрирован: Ср дек 24, 2008 09:58:58

Re: АЦП. Разбор полётов

Сообщение Ser60 »

Там АЦП а не ЦАП. Чтение регистров АЦП в R16 и R17:
in R16, ADCL
in R17, ADCH
Аватара пользователя
просто КОТ
Друг Кота
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ
Контактная информация:

Re: АЦП. Разбор полётов

Сообщение просто КОТ »

Кхэм, я имел в виду, что в них должно быть число. Около 600-700. В зависимости от этого надо зажечь светодиодик -- 600 или 700 и пара промежуточных.
НО! Я препологаю, что надо написать типа:

Код: Выделить всё

if (регистр>700)   // Если насчитал больше 700, зажечь Красный светик
{
PORTB=000001;
delay_ms(5000);
PORTB=000000;
}

А теперь вопрос -- вместо регистр писать ADCL или ADCH. Или как их сложить. Что-то мой моск перестал думать.

Аlex писал(а):Может просто прочитать эти регистры ? Не пробовали ?

С логикой дружу. С Си не очень. . .
Изображение
И ты врёшь!!! © Vladisman
Изображение
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: АЦП. Разбор полётов

Сообщение Аlex »

С логикой дружу
Ну если бы дружили, то поняли бы, что старший байт - это каждое 256-ое значение, или в хексе = 0x0100. И Си тут не причём :)
Т.б. Старший байт нужно умножить на 256 (или на 0x100) и сложить с младшим.
Как умножать будете - Ваше право. Можно через сдвиг.
Это самый простой способ...
Аватара пользователя
просто КОТ
Друг Кота
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ
Контактная информация:

Re: АЦП. Разбор полётов

Сообщение просто КОТ »

Хм, то есть что-бы мне получить ОДНО число, надо старший умножит на 256 и прибавить младший.

Код: Выделить всё

x=ADCH*256
y=x+ADCL
if (y>700)   // Если насчитал больше 700, зажечь Красный светик
{
PORTB=000001;
delay_ms(5000);
PORTB=000000;
}

Так можно?! А без х и у можно?! Что-то мне кажется я не то сделал. . .
Изображение
И ты врёшь!!! © Vladisman
Изображение
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: АЦП. Разбор полётов

Сообщение Аlex »

Код: Выделить всё

unsigned int ADC;
ADC = ADCH*256 + ADCL;

Код: Выделить всё

unsigned int ADC;
ADC = (unsigned int)ADCH<<8 | ADCL;

Код: Выделить всё

unsigned int ADC;
*((unsigned char*)&ADC)=ADCL;
*((unsigned char*)&ADC+1)=ADCH;

Код: Выделить всё

unsigned int ADC;
unsigned char *p_b = (unsigned char *)&ADC;
*p_b++ = ADCL;
*p_b  = ADCH;

........
........
........
Аватара пользователя
просто КОТ
Друг Кота
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ
Контактная информация:

Re: АЦП. Разбор полётов

Сообщение просто КОТ »

Ага, значи всё таки можно в оду строку. Понял, пасиба.
Изображение
И ты врёшь!!! © Vladisman
Изображение
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: АЦП. Разбор полётов

Сообщение Аlex »

Главное не количество строк исходника, а то, во что развернёт это всё компилятор.
Аватара пользователя
просто КОТ
Друг Кота
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ
Контактная информация:

Re: АЦП. Разбор полётов

Сообщение просто КОТ »

Код: Выделить всё

#define F_CPU 8000000 // Инициализация
#include <io.h>
#include <delay.h>

// Declare your global variables here

void main (void)
{
DDRB=0b011011;
PORTB=0b10010;
ADMUX=00000001;
#asm("sei");
{
ADCSRA=11000000;
unsigned int ADC;
ADC = ADCH*256 + ADCL;
if (ADC>700)   // Если насчитал больше 700, зажечь Синий светик
{
PORTB=000001;
delay_ms(5000);
PORTB=000000;
}
else if (ADC>670)   // Если более 670, то Зелёный
{
PORTB=000010;
delay_ms(2000);
PORTB=000000;
}
else if (ADC>630)  // Если хоть более 630, то Жёлтый
{
PORTB=010000;
delay_ms(2000);
PORTB=000000;
}
else if (ADC<630)  // А если менее 600, то Красный!
{
PORTB=001000;
delay_ms(2000);
PORTB=000000;
}
}
}

Вотъ, что вышло. Есть грубые ошибки?! А не очень?!
Последний раз редактировалось просто КОТ Пн авг 13, 2012 21:50:43, всего редактировалось 1 раз.
Изображение
И ты врёшь!!! © Vladisman
Изображение
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: АЦП. Разбор полётов

Сообщение Аlex »

// Если хоть более 630, то Жёлтый
// А если менее 600, то Красный!
А если от 600 до 630 ? :))
Аватара пользователя
просто КОТ
Друг Кота
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ
Контактная информация:

Re: АЦП. Разбор полётов

Сообщение просто КОТ »

Если эта самая грубая, то вроде всё норм. Только вот нервничаю по поводу запуска АЦП -- правильно ли я записал регистр. . .
Изображение
И ты врёшь!!! © Vladisman
Изображение
Аватара пользователя
U235
Встал на лапы
Сообщения: 135
Зарегистрирован: Вт фев 21, 2012 20:42:26
Откуда: Санкт-Петербург, Россия, Земля

Re: АЦП. Разбор полётов

Сообщение U235 »

Разве ADC - это не имя регистра АЦП?

Код: Выделить всё

ADC = ADCH*256 + ADCL;
А из наших труб идет необычный дым. Стой! Опасная зона! Работа мозга!...
Аватара пользователя
просто КОТ
Друг Кота
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ
Контактная информация:

Re: АЦП. Разбор полётов

Сообщение просто КОТ »

Вроде там с добавками. НО! Ради антиреса можно дописать букаффку. Например ADCC!
Изображение
И ты врёшь!!! © Vladisman
Изображение
Аватара пользователя
U235
Встал на лапы
Сообщения: 135
Зарегистрирован: Вт фев 21, 2012 20:42:26
Откуда: Санкт-Петербург, Россия, Земля

Re: АЦП. Разбор полётов

Сообщение U235 »

Посмотрел в WinAVR - ADC и ADCW - 16-и разрядный регистр данных АЦП.
В CodeVision - только ADCW.
А из наших труб идет необычный дым. Стой! Опасная зона! Работа мозга!...
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: АЦП. Разбор полётов

Сообщение Аlex »

U235 писал(а):Разве ADC - это не имя регистра АЦП?
Кстати, может быть. Возможно, он уже объявлен как 2-х байтная переменная по соотв. адресу, и компиль поймёт его.
Аватара пользователя
просто КОТ
Друг Кота
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ
Контактная информация:

Re: АЦП. Разбор полётов

Сообщение просто КОТ »

Так что, оставлять?!
Изображение
И ты врёшь!!! © Vladisman
Изображение
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: АЦП. Разбор полётов

Сообщение Аlex »

Зависит от компилятора. Попробуйте, не объявляя эту переменную (ADC), поработать с ней. Если ошибок не будет, значит всё в порядке.
Аватара пользователя
просто КОТ
Друг Кота
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ
Контактная информация:

Re: АЦП. Разбор полётов

Сообщение просто КОТ »

О.К.
Изображение
И ты врёшь!!! © Vladisman
Изображение
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: АЦП. Разбор полётов

Сообщение Аlex »

И ещё, Вы забыли
while(1){
.....
.....
.....
}
Ответить

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