Опорное напряжение для АЦП на Тини13

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Аватара пользователя
zhu4er
Вымогатель припоя
Сообщения: 544
Зарегистрирован: Пт июн 04, 2010 17:40:13
Откуда: Непокорный город-герой Севастополь

Опорное напряжение для АЦП на Тини13

Сообщение zhu4er »

Ребятки, с англицким я дружу не очень. Залез в даташит Тини13 по поиску опорного напряжения для АЦП и вот что мне выдал переводчик на эту фразу:
Internal reference voltages of nominally 1.1V or VCC are provided On-chip.
Внутренние опорные напряжения номинально 1.1V или VCC обеспечены На микросхеме.
Это как понимать? Или у тиньки13 только внутреннее опорное напряжение 1.1В или опорное может быть и 1.1В и Vcc, тобишь пять вольт. Разъясните пожалуста!
И второй вопрос, если только внутр опорное равно 1.1В, то при восьмибитном преобразовании 1.1/256=0,004296875 Вольт правильно?
Не судите строго, я только начал изучать АЦП, вот и решил начать с простого. Кстати вот собранная схема, осталось только запрограммировать:
dat4ik.JPG
(57.71 КБ) 507 скачиваний
Программить буду в CVAVR
А вот что мне выдал визард
dat4ik.c
(2.35 КБ) 506 скачиваний
подскажите от куда (какая переменная) брать значение АЦП для дальнейшего сравнения с заданным значением в мВ
Допустим мне надо включить лампу при ЭДС(снимаемое с фотодиода) равном 100мВ. То есть значение АЦП будет 0х17(примерно) откуда выгрызть это значение?
Надеюсь на Ваше понимание.
Даже у стен есть уши...
Реклама
leowka
Открыл глаза
Сообщения: 42
Зарегистрирован: Ср мар 24, 2010 08:08:20
Контактная информация:

Re: Опорное напряжение для АЦП на Тини13

Сообщение leowka »

Это знач, что у тинки может быть опороное для АЦП или внутренний откалиброванный источник 1.1 Вольт, или опроник с VCC от 2 до 5 вольт. Разрешение вы правильно считаете. а в исходнике функция unsigned char read_adc(unsigned char adc_input), вернет вам значение АЦП. вызывать таким образом adc_result = read_adc(номер канала АЦП);
Реклама
Аватара пользователя
zhu4er
Вымогатель припоя
Сообщения: 544
Зарегистрирован: Пт июн 04, 2010 17:40:13
Откуда: Непокорный город-герой Севастополь

Re: Опорное напряжение для АЦП на Тини13

Сообщение zhu4er »

leowka писал(а):Это знач, что у тинки может быть опороное для АЦП или внутренний откалиброванный источник 1.1 Вольт, или опроник с VCC от 2 до 5 вольт. Разрешение вы правильно считаете. а в исходнике функция unsigned char read_adc(unsigned char adc_input), вернет вам значение АЦП. вызывать таким образом adc_result = read_adc(номер канала АЦП);
Ага, теперь понял. И последний непонятный мне пока вопрос: каким образом настроить внутренний источник опорного напряжения 1.1В или визард CVAVR сам по умолчанию устанавливает его?
Даже у стен есть уши...
Аватара пользователя
Fasterpast
Мучитель микросхем
Сообщения: 493
Зарегистрирован: Ср фев 14, 2007 12:07:58
Откуда: Москва
Контактная информация:

Re: Опорное напряжение для АЦП на Тини13

Сообщение Fasterpast »

Насколько я понимаю, чтобы включить внутреннее опорное напряжение 1.1В, нужно в кодвизарде поставить галку на "bandgap reference"
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
zhu4er
Вымогатель припоя
Сообщения: 544
Зарегистрирован: Пт июн 04, 2010 17:40:13
Откуда: Непокорный город-герой Севастополь

Re: Опорное напряжение для АЦП на Тини13

Сообщение zhu4er »

Fasterpast писал(а):Насколько я понимаю, чтобы включить внутреннее опорное напряжение 1.1В, нужно в кодвизарде поставить галку на "bandgap reference"
Да точно, я уже в книжке про Кодвижн посмотрел. Спасибо всем. Пошёл программить...
Даже у стен есть уши...
Реклама
Аватара пользователя
Symbiosis
Вымогатель припоя
Сообщения: 600
Зарегистрирован: Вс апр 27, 2008 13:44:52
Контактная информация:

Re: Опорное напряжение для АЦП на Тини13

Сообщение Symbiosis »

Ребята, а что происходит тут ?

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

#define FIRST_ADC_INPUT 0 
#define LAST_ADC_INPUT 0 
unsigned char adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1]; 
#define ADC_VREF_TYPE 0x20 
interrupt [ADC_INT] void adc_isr(void) //стандартное прерывание по ADC от CVAVR 
{ 
static unsigned char input_index=0; 
// Read the 8 most significant bits 
// of the AD conversion result 
adc_data[input_index]=ADCH; 
// Select next ADC input 
if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT)) 
input_index=0; 
ADMUX=(FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff))+input_index; 
// Delay needed for the stabilization of the ADC input voltage 
delay_us(10); 
// Start the AD conversion 
ADCSRA|=0x40; 
}
вот ссылка http://my-avr.at.ua/publ/1-1-0-15
Реклама
Аватара пользователя
md5sum
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Вт окт 27, 2009 22:39:19
Откуда: Москва

Re: Опорное напряжение для АЦП на Тини13

Сообщение md5sum »

Symbiosis писал(а):Ребята, а что происходит тут ?
Похоже, это просто "попытка" написать обучалку вырвав кусок кода из другой программы...

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

adc_data[input_index]=ADCH; 
if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT)) input_index=0;
Говорит о том, что была попытка считать среднее значение из N-го кол-ва измерений.
Но:

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

#define FIRST_ADC_INPUT 0 
#define LAST_ADC_INPUT 0 
убило это попытку на корню, а убирать "мусор из лишнего кода" оставили компилятору.

PS:Извиняюсь, невнимательно посмотрел...

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

ADMUX=(FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff))+input_index;
говорит скорее о том, что этот код должен был проводить измерения по нескольким портам: от FIRST_ADC_INPUT до LAST_ADC_INPUT
— Не говорите мне что делать и я не скажу куда Вам идти...
Аватара пользователя
Symbiosis
Вымогатель припоя
Сообщения: 600
Зарегистрирован: Вс апр 27, 2008 13:44:52
Контактная информация:

Re: Опорное напряжение для АЦП на Тини13

Сообщение Symbiosis »

Ну а если не модифицировать часть кода, сгенерированную CodeVision, разве не будет работать пример по той ссылке? Подрихтовать переменные... Не пойму зачем автор настаивает на модификации кода и какой смысл в ней
Аватара пользователя
md5sum
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Вт окт 27, 2009 22:39:19
Откуда: Москва

Re: Опорное напряжение для АЦП на Тини13

Сообщение md5sum »

По ссылке нету кода сгенерированного CodeVision, поэтому непонятно что менял автор.
А так вроде все должно работать...
— Не говорите мне что делать и я не скажу куда Вам идти...
Аватара пользователя
Symbiosis
Вымогатель припоя
Сообщения: 600
Зарегистрирован: Вс апр 27, 2008 13:44:52
Контактная информация:

Re: Опорное напряжение для АЦП на Тини13

Сообщение Symbiosis »

Сейчас сгенерирую )
...

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

#define ADC_VREF_TYPE 0x20
                                
// Read the 8 most significant bits
// of the AD conversion result
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// 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 ADCH;
}
Аватара пользователя
md5sum
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Вт окт 27, 2009 22:39:19
Откуда: Москва

Re: Опорное напряжение для АЦП на Тини13

Сообщение md5sum »

Смысл преобразований:
В автосгенерированном коде в функции read_adc
запускается преобразование, ожидается окончание,и только потом возвращается результат. Т.е основной цикл ждет получения результата.

Автор примера сделал измерения "фоновыми" - одновременно показывая как работать с АЦП и прерываниями.
В прерывании по окончании преобразований измеренное значение сохраняется в глобальной переменной и запускается новый цикл преобразования.
А в основном цикле программы достаточно просто на основании данных в глобальной переменной
зажигать светодиоды. Т.е основной цикл может во время преобразования АЦП заняться чем-то другим.
— Не говорите мне что делать и я не скажу куда Вам идти...
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»