Страница 1 из 1

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

Добавлено: Сб ноя 20, 2010 11:17:01
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(примерно) откуда выгрызть это значение?
Надеюсь на Ваше понимание.

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

Добавлено: Сб ноя 20, 2010 11:34:12
leowka
Это знач, что у тинки может быть опороное для АЦП или внутренний откалиброванный источник 1.1 Вольт, или опроник с VCC от 2 до 5 вольт. Разрешение вы правильно считаете. а в исходнике функция unsigned char read_adc(unsigned char adc_input), вернет вам значение АЦП. вызывать таким образом adc_result = read_adc(номер канала АЦП);

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

Добавлено: Сб ноя 20, 2010 13:03:03
zhu4er
leowka писал(а):Это знач, что у тинки может быть опороное для АЦП или внутренний откалиброванный источник 1.1 Вольт, или опроник с VCC от 2 до 5 вольт. Разрешение вы правильно считаете. а в исходнике функция unsigned char read_adc(unsigned char adc_input), вернет вам значение АЦП. вызывать таким образом adc_result = read_adc(номер канала АЦП);
Ага, теперь понял. И последний непонятный мне пока вопрос: каким образом настроить внутренний источник опорного напряжения 1.1В или визард CVAVR сам по умолчанию устанавливает его?

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

Добавлено: Сб ноя 20, 2010 14:18:55
Fasterpast
Насколько я понимаю, чтобы включить внутреннее опорное напряжение 1.1В, нужно в кодвизарде поставить галку на "bandgap reference"

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

Добавлено: Сб ноя 20, 2010 15:51:41
zhu4er
Fasterpast писал(а):Насколько я понимаю, чтобы включить внутреннее опорное напряжение 1.1В, нужно в кодвизарде поставить галку на "bandgap reference"
Да точно, я уже в книжке про Кодвижн посмотрел. Спасибо всем. Пошёл программить...

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

Добавлено: Чт фев 03, 2011 04:12:15
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

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

Добавлено: Чт фев 03, 2011 09:10:32
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

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

Добавлено: Чт фев 03, 2011 11:39:00
Symbiosis
Ну а если не модифицировать часть кода, сгенерированную CodeVision, разве не будет работать пример по той ссылке? Подрихтовать переменные... Не пойму зачем автор настаивает на модификации кода и какой смысл в ней

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

Добавлено: Чт фев 03, 2011 14:32:14
md5sum
По ссылке нету кода сгенерированного CodeVision, поэтому непонятно что менял автор.
А так вроде все должно работать...

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

Добавлено: Чт фев 03, 2011 16:09:11
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;
}

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

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

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