настройка Attini13A

Здесь все вопросы по языку программирования С
Ответить
redkii55
Сообщения: 1
Зарегистрирован: 25 фев 2015, 23:09

настройка Attini13A

Сообщение redkii55 » 25 фев 2015, 23:14

Доброго всем времени суток.
Только начал изучать AVR+CVAVR
С мегой 8 вроде разобрался,да и примеров полно.
А вот с тинькой13 проблемы у меня.Вроде все на сайте есть но не получается настроить правильно.
Вопрос кто подскажет по настройке таймера и ацп ,и если можно с примером в CVAVR

Аватара пользователя
gurvinok
Сообщения: 1473
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: настройка Attini13A

Сообщение gurvinok » 26 фев 2015, 21:24

Первое что рекомендую, удалить CVAVR, а в замен установить AtmelStudio 6.
Второе качеем документацию на МК.
Если этого не сделать, то можно конечно все таки найти в интернете готовое решение, но так или иначе Вы никогда не научитесь работать с микросхемой.
Далее переходим на страницу 76. Analog to Digital Converter На следующей странице есть рисунок 39, на котором изображен весь АЦП МК.
VCC выполняет роль опорного напряжения. Внизу ADC0-ADC3 каналы АЦП. ADIF это флаг для прерывания, но его можно читать. Он взводится после окончания преобразования. ADIE это разрешение прерывания. Если ADIF взведется, то отработает прерывание и отправит МК в обработчик прерывания. После преобразования данные закидываются в верхний правый ящик. Это 16 битный регистр данных ADC. Он разбин на два восьми битный ADCL и ADCH. Так как АЦП 10-ти битный, то последние 5 бит нас не волнуют.
Теперь начинаем читать
The ADC converts an analog input voltage to a 10-bit digital value through successive approximation. The minimum value represents GND and the maximum value represents the voltage on VCC or an internal 1.1V reference voltage.
Перевожу. АЦП преобразует аналоговый сигнал в 10-ти битный цифровой с минимальным значением GND и максимальным, равным VCC или внутреннего 1,1 вольт.
The analog input channel is selected by writing to the MUX bits in ADMUX. Any of the ADC input pins, can be selected as single ended inputs to the ADC.
Здесь сказано о том что ADMUX нужен для выбора канала АЦП. Это те ADC0...ADC3 верхний левый прямоугольник.
The ADC is enabled by setting the ADC Enable bit, ADEN in ADCSRA. Voltage reference and input channel selections will not go into effect until ADEN is set. The ADC does not consume power when ADEN is cleared, so it is recommended to switch off the ADC before entering power saving sleep modes.
Здесь говорится о том что если нужно включить АЦП, то нужно записать бит ADEN в регистре ADCSRA(средний прямоугольник). А пока он не записн, то потребления энергии нет, АЦП выключен и все гуд.
The ADC generates a 10-bit result which is presented in the ADC Data Registers, ADCH and ADCL. By default, the result is presented right adjusted, but can optionally be presented left adjusted by setting the ADLAR bit in ADMUX
Тут сообщают о том что после преобразования, данные записываются в регистр данных ADC который сотоит из ADCL и ADCH. По умолчанию данные загружаются по правому краю, как в обычном регистре, но если религия не позволяет, то можно приравнять данные по левому краю выставив бит ADLAR в ADMUX.
If the result is left adjusted and no more than 8-bit precision is required, it is sufficient to read ADCH. Otherwise, ADCL must be read first, then ADCH, to ensure that the content of the data registers belongs to the same conversion. Once ADCL is read, ADC access to data registers is blocked. This means that if ADCL has been read, and a conversion completes before ADCH is read, neither register is updated and the result from the con-version is lost. When ADCH is read, ADC access to the ADCH and ADCL Registers is re-enabled
В двух словах. Если не требуется точность, то можно прочитать только 8 бит из регистра ADCH. Если же необходимо прочитать все данные, то сначала обязательно читаем ADCL, а затем ADCH.
Далее про прерывания.
Starting a Conversion
Самое интересное, Старт преобразования. Сделать это можно двумя способами, вручную и триггерами. для начала лучше в ручную.
A single conversion is started by writing a logical one to the ADC Start Conversion bit, ADSC. This bit stays high as long as the conversion is in progress and will be cleared by hardware when the conversion is completed. If a different data channel is selected while a conversion is in progress, the ADC will finish the current conversion before performing the channel change.
О чем тут речь. Для старта преобразования нужно записать в разряд ADSC в регистре ADC логическую единицу. По окончанию преобразования этот бит сбрасывается аппаратно. Если нужно сменить канал во время преобразования, то сначала дожидаемся окончания, а потом меняем. Вся эта бла-бла-бла видна на рисунке 40.
Prescaling and Conversion Timing Предделитель и тайминги преобразования.
Смотрим картинку 41
By default, the successive approximation circuitry requires an input clock frequency between 50 kHz and 200 kHz to get maximum resolution. If a lower resolution than 10 bits is needed, the input clock frequency to the ADC can be higher than 200 kHz to get a higher sample rate
Тут говорится о том что максимальное разрешение АЦП может производится в диапазоне тактирования 50-200 кГц. А что делать если кварц на 16 МГц? Вот для этого нужен предделитель. Это можно сделать установив предделитель битами ADPS0...ADPS2 в регистре ADCSRA.
Страница 88 ADC Conversion Result Конвертирование полученных данных в текущее напряжение.
ADC = (Vin(измеряемое)*1024)/Vref(опорное напряжение)

Ну вот и все.
1 - выбираем канал ADMUX
2 - включаем АЦП записывая единицу в ADEN в регистре ADCSRA
3 - настраиваем предделитель в ADPS0...ADPS2 в ADCSRA
4 - запускаем преобразование записывая единицу в ADSC в регистре ADCSRA
5 - получаем данные в ADCL, ADCH
6 - конвертируем в напряжение

Далее оставляю на факультатив. Будут вопросы пишите. С таймером та же песня.
Если долго мучиться, может быть получится.

Ответить