Страница 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 Вольт правильно?
Не судите строго, я только начал изучать АЦП, вот и решил начать с простого. Кстати вот собранная схема, осталось только запрограммировать:
Программить буду в CVAVR
А вот что мне выдал визард
подскажите от куда (какая переменная) брать значение АЦП для дальнейшего сравнения с заданным значением в мВ
Допустим мне надо включить лампу при ЭДС(снимаемое с фотодиода) равном 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
запускается преобразование, ожидается окончание,и только потом возвращается результат. Т.е основной цикл ждет получения результата.
Автор примера сделал измерения "фоновыми" - одновременно показывая как работать с АЦП и прерываниями.
В прерывании по окончании преобразований измеренное значение сохраняется в глобальной переменной и запускается новый цикл преобразования.
А в основном цикле программы достаточно просто на основании данных в глобальной переменной
зажигать светодиоды. Т.е основной цикл может во время преобразования АЦП заняться чем-то другим.