воскресенье, 21 сентября 2014 г.

Трёхканальный UART АЦП на ATtiny13

По буржуйски: Three-channel UART ADC ATtiny13 

Видео работы:



Графики(ссылка на софт в конце статьи):



UART кстати программный, при питании 5-3 В проблем с приёмом данных не обнаружено.
Потребление МК меньше 2 mA в работе при напряжении 3.3 В, при напряжении 5 В ток 3.5 mA.
Схема:






Вот код дл BASCOM-AVR:

Samples Alias 64                                            ' Аналог директивы #define на Си

$regfile = "attiny13.dat"                                   ' Конфигурации по умолчанию
$crystal = 1200000
$hwstack = 16
$swstack = 16
$framesize = 16
'$noramclear

Open "comb.0:9600,8,n,1" For Output As #1                   ' Настройка программного UART, скорость 9600 бод
                                                              ' Ножка PB0 будет как TXD, подключаем к RXD преобразователя

Config Adc = Single , Prescaler = Auto , Reference = Avcc   'Конфигурирование АЦП, измерение относительно Vcc
Start Adc                                                   ' Запускаем преобразование

' Здесь Adc - режим считывания значения: Single - единичное считывание,
' также может быть Free (режим постоянной работы преобразователя)
' Prescaler = 128 - выбираем частоту дискретизации путем деления
' частоты кварца на определенное число (также может быть 2,4,8,16,32,64 или Auto).
' Если выбрать Auto, то компилятор сам выберет подходящую частоту работы АЦП
' Reference – выбор источника опорного напряжения. Aref – внешний источник,
' Avcc – напряжение питания схемы, Internal – внутренний ИОН на 1,1 в.

Declare Function Adc_get(byval Adc_port As Byte) As Word    ' Обявим переменную которая принимает номер нужного порта АЦП
                                                              ' И возращает усреднённое от "Samples" количество выборок АЦП

Do                                                          ' Тут начинается вечшый цыкл

   Print #1 , Adc_get(1) ; "," ; Adc_get(2) ; "," ; Adc_get(3)       ' Выводим данные в формате *,*,*

Loop                                                        ' Тут кончается

Function Adc_get(byval Adc_port As Byte ) As Word           ' Переменная типа Word может принимать знач. до 65535

   Dim Temp_result As Word                                  ' Создадим переменную для буфера
   Dim Adc_cycles As Byte                                   ' И счётчик выборок АЦП

   Temp_result = 0

   For Adc_cycles = 1 To Samples

      Temp_result = Temp_result + Getadc(adc_port)

   Next

   Temp_result = Temp_result / Samples

   Adc_get = Temp_result                                    ' Эта функция возвращает Temp_result

End Function

Фьюзы:

Небольшая фотосессия:




Вот софт: http://www.x-io.co.uk/serial-oscilloscope/
Вот файлы проекта: https://vk.com/doc256435878_328731967
Полная статья на Хабре: http://habrahabr.ru/post/237543/

Комментариев нет:

Отправить комментарий