Плата основана на микроконтроллере ATmega8, к стати отличный микроконтроллер, один из моих любимых на сей час.
Слегка доработал питание, добавил LC фильтр для фильтрации от ВЧ помех и более стабильного питания микроконтроллера. Ну и ещё по мелочи добавил в обвязку микроконтроллера конденсаторы на 0.1 mF(100 nF).
Снизу будет небольшая фотосессия платы.
Ладно не буду томить, вот код:
#include <avr/wdt.h> // здесь организована работа с ватчдогом #define Noise_level 1 // фильтрация +/- 1 LSB unsigned int sensor[3]; // буфер для записи предыдущего результата unsigned int filter_sensor[3]; // отфильтрованное значения void setup() { Serial.begin(115200); } void loop() { ////////////////////////////////////////////////////// wdt_enable(WDTO_1S); // защита от зависаний МК, если не сбросить ватчдог через 1 сек МК уйдёт в ресет ////////////////////////////////////////////////////// // make a string for assembling the data to log: String dataString = ""; // read three sensors and append to the string: for (int analogPin = 0; analogPin < 3; analogPin++) { sensor[analogPin] = analogReadOversampled(analogPin); if(filter_sensor[analogPin] > sensor[analogPin] + Noise_level || // если предыдущее значение +/- 1 LSB filter_sensor[analogPin] < sensor[analogPin] - Noise_level){ filter_sensor[analogPin] = sensor[analogPin]; // то выводим только предыдущее значение } //filter_sensor[analogPin] = sensor[analogPin]; dataString += String(filter_sensor[analogPin] / 2); // превращаем 11 бит в 10 if (analogPin < 2) { dataString += ","; } else{ dataString += ","; dataString += (millis() / 1000); } } wdt_reset(); // сбросим вачдог чтобы не сработала защита от зависаний Serial.println(dataString); } ////////////////////////////////////////////////////// unsigned int analogReadOversampled(byte analogChannel) { // оверсемплинг, возвращает 11 битное значение 0...2046 unsigned long aSum = 0; // the sum of all analog readings for(unsigned int i = 1024; i > 0; i--){ aSum = aSum + analogRead(analogChannel); } return aSum >> 9; // эквивалент делению на 512 } ////////////////////////////////////////////////////// //Размер скетча в двоичном коде: 4 200 байт (из 7 680 байт максимум)
Как видите ничего сверх сложного тут нету, тем более закомментировал почти каждую строчку.
Вот тут можно почитать как превратить ATmega8 а почти что полноценную ардуино.
Частота микроконтроллера 16 MHz фьюзы из калькулятора фьюзов выглядят вот так:
Небольшая фотосессия:
Вот ссылка на АЦП Калькулятор / ADC Calculator скрин из которого показывался на видео:
Купить ATmega8 из Китая можно тут:
http://ali.pub/fydxwВот собственно hex-file и Arduino Sketch (Download project files):
https://vk.com/doc256435878_334636262
Трёхканальный UART АЦП на ATtiny13
http://razniepodelki.blogspot.com/2014/09/uart-attiny13.html
Вот кстати ссылка на паблик ВКонтакте посвящённый любителям ATmega8A:
https://vk.com/atmega8a
Ссылка на софт:
http://www.x-io.co.uk/serial-oscilloscope/
Напишу для буржуев:
USB ADC on the Arduino on ATmega8 DIY
Комментариев нет:
Отправить комментарий