SD_Card Arduino
MOSI D11
MISO D12
SCK D13
CS D9 (можно использовать любой, поправив в коде)
Обратите внимание на упор, помеченный красной стрелкой. Моя LGT8F328P имеет длину около 31 мм, а классические китайские про мини около 33мм, для их установки данный упор надо выломать.Нажатие Частота_Записи На_Экране
(примерно)
1 2 раза в сек auto
2 2 раза в сек manu 0.000nF
3 1 раз в сек manu 0.00nF
4 1 раз в 5 сек manu 0.0000uF
5 1 раз в 10 сек manu 0.000uF
6 1 раз в 30 сек manu 0.00uF
7 1 раз в мин manu 0.0000mF
8 1 раз в 3 мин manu 0.000mF
9 1 раз в 5 мин manu 0.00mF
Работу устройства можно оценить по миганию светодиода, который по умолчанию подключен к 13 пину на плате ардуино. Он загорается при обращении к SD карточке. При нормальной работе это короткие вспышки в момент записи. Если светодиод циклично загорается на 2 сек, то это значит адаптер не видит вставленную карту памяти, или она не вставлена./*
Программа записи логов с мультиметра UNI-T UT61E
[email protected] февраль 2023
SD карта до 4ГБ, форматировать в FAT16
=================================================================
== ЧТОБЫ НАЧАТЬ ЗАПИСЬ НА SD CARD нужно поставить и снять HOLD ==
=================================================================
HOLD ставит запись на паузу, снятие с HOLD продолжает запись на SD Card
При паузе на HOLD можно вытаскивать и возвращать карту
Имя файла генерируется автоматически при подаче питания, пока питание не снято, запись ведется в один и тот же файл
Настройка частоты записи: переключатель мультиметра ставим в положение Ёмкость
Нажатие Частота_Записи На_Экране
(примерно)
1 2 раза в сек auto
2 2 раза в сек manu 0.000nF
3 1 раз в сек manu 0.00nF
4 1 раз в 5 сек manu 0.0000uF
5 1 раз в 10 сек manu 0.000uF
6 1 раз в 30 сек manu 0.00uF
7 1 раз в мин manu 0.0000mF
8 1 раз в 3 мин manu 0.000mF
9 1 раз в 5 мин manu 0.00mF
т.к. мультиметр шлет ПРИМЕРНО 2 посылки в секунду (на самом деле чуть чаще), частота записи тоже не точная
просто при частоте, например "1 раз в мин", пишем на карту каждую 120-ю посылку
*/
#include <lgtx8p.h> // удалить при компиляции под ардуино
#include <arduino.h>
#include <SPI.h>
#include <SD.h>
#define digit_separator '.' // <---- НАСТРОЙКА РАЗДЕЛИТЕЛЯ ЦЕЛОЙ И ДРОБНОЙ ЧАСТИ ДЛЯ ЭКСЕЛЯ
#define PIN_CS 9 // SD Card SPI: MOSI D11, MISO D12,SCK D13, CS 9
#define _bs bit_is_set
byte b[14]; // буфер приема 14 байт
byte b_count = 0; // счетчик байт в посылке
byte f_count = 0; // счетчик в имени файлов
int cut = 0; // прореживание посылок
int c_count = 0; // счетчик прореживания посылок
int cutting[] = {0,1,10,20,60,120,360,600};
String file_name = ""; // имя файла
bool fl_start = false; // флаг разрешения записи
bool fl_init_card = false; // флаг инициализации карты после HOLD
unsigned long start_millis;
uint16_t b0() // возвращает кол-во разрядов до точки
{
if(b[6]==0xB)
{
if(b[0]==4) {return 100;}
else {return 10000/(pow(10,b[0])); }
}
else if(b[6]==0xD)
{
if(b[0]==0) {return 100;}
else {return 10;}
}
else if(b[6]==0xF)
{
if(b[0]==0) {return 1000;}
else {return 100;}
}
else if(b[6]==0x0) {return 1000;}
else {return 1;}
}
String b15() // возвращает измеренное число
{
String ret = "";
ret = b[1];
if(b0()==10000) {ret += digit_separator;}
ret += b[2];
if(b0()==1000) {ret += digit_separator;}
ret += b[3];
if(b0()==100) {ret += digit_separator;}
ret += b[4];
if(b0()==10) {ret += digit_separator;}
ret += b[5];
if(b[7]==0x1 || b[7]==0x5) {return "ovl.";}
else {return ret;}
}
String b6() // возвращает единицы измерения
{
if(b[6]==0xB) {if(b[0]==4){return "mV";} else {return "V";}}
else if(b[6]==0xD) {return "uA";}
else if(b[6]==0xF) {return "mA";}
else if(b[6]==0x0) {return "A";}
else {return " ";}
}
String b7() // возвращает для DC + или -, для AC пробел
{
if(!_bs(b[7],2) && _bs(b[10],3) && !_bs(b[10],0)) {return "+";} // флаг НЕ минус, флаг DC и нет флага Hz
else if(_bs(b[7],2) && _bs(b[10],3) && !_bs(b[10],0)) {return "-";} // флаг минус, флаг DC и нет флага Hz
else {return " ";}
}
void find_name() // ищем свободное имя файлу по порядку
{
file_name="log_";file_name+=f_count;file_name+=".csv"; // длина имени не больше 8 знаков!
while (SD.exists(file_name)) {
f_count++;
file_name="log_";file_name+=f_count;file_name+=".csv";
}
Serial.println("New file: " + file_name);
}
void sd_init() // инициализируем модуль
{
while(!SD.begin(PIN_CS)) {Serial.println("Card failed, or not present"); delay(1000);}
Serial.println("Card initialized.");
}
String disp_time() // время
{
String time_string = "";
unsigned long time_disp = (millis() - start_millis)/1000ul;
int h = time_disp/3600ul; // Время работы
time_string += h/10;
time_string += h%10;
time_string += ":";
int m = (time_disp%3600ul)/60ul;
time_string += m/10;
time_string += m%10;
time_string += ":";
int s = (time_disp%3600ul)%60ul;
time_string += s/10;
time_string += s%10;
return time_string;
}
void setup()
{
Serial.begin(19230, SERIAL_7N1);
pinMode(PIN_CS, OUTPUT);
Serial.println("Start");
sd_init();
find_name();
}
void loop()
{
if (_bs(b[11], 1)) {fl_start = true; fl_init_card = true;} // ставим флаги при нажатии HOLD
if (!_bs(b[11], 1) && fl_init_card) {sd_init(); start_millis = millis(); fl_init_card = false;} // реинициализируем карту при отпускании HOLD
while (Serial.available() > 0)
{
unsigned char in = Serial.read();
b[b_count] = in;
if (in != '\n' || in != '\r') {b[b_count] ^= 0x30;} // убираем 4 и 5 биты
b_count++;
if (in == '\n') // ловим конец пакета с данными
{
if(b[6]==0x6) {cut=c_count=cutting[b[0]]; fl_start = false;} // режим ёмкости, настройка частоты записи
if((b[6]>=0xB || b[6]==0x0) && !_bs(b[10],0) && !_bs(b[11],1)) // режимы ток, напряжение, не Hz, не HOLD
{
c_count++;
Serial.print(disp_time()+'\t');Serial.print(b7());Serial.print(b15());Serial.print(b6()+'\t');
//for (int i = 0; i < 12; ++i) {Serial.print(b[i], HEX);} // HEX принятого пакета
if(fl_start && c_count > cut)
{
File dataFile = SD.open(file_name, FILE_WRITE); // открываем файл на SD карте
if (dataFile) // записываем строку в файл log_X.csv
{
dataFile.println(disp_time()+";"+b7()+b15()+";"+b6()+";");
dataFile.close();
Serial.print("SD write "+file_name);
}
else {Serial.print("SD write ERRROR");}
c_count=0;
}
Serial.println();
}
b_count = 0;
}
}
}
+69 |
5365
161
|
Меня больше бы заинтересовало как раз подключение его к РС по ВТ. Написал в поддержку — ответ; «Приложение только под андроид». Под РС есть другие модели наших мультиметров.
BlueStacks например. Прекрасно работает.
Хотя вот корректно bt прокидывать наверное все же не любая.
Возможно получиться через android x86 на виртуальной машине или ставить на систему.
Прога для планшета/телефона есть, вроде и для РС (не пользовался).
www.youtube.com/watch?v=-oz-0lRHvsE
А в остальном с учетом поднятия цен на UT61, Owon примерно те же деньги сейчас стоит.
Вот от другого логгера.
Можете пример привести?
Но и этими 10 000, например в FNB-48 распорядились как-то странно. Только 9 часов можно записывать. Хотя вполне на 24 часа хватило бы этих 10 800 точек.
Надеюсь, хотя бы от лунных циклов тут ничего не зависит? ;) :)))
Так что Вы оказались не правы.
Если хоть в чём-то умеете писать программы (а вы, я так понимаю, умеете), то ничего лучше, чем компонент TeeChartPro не видел.
Я его на Borland Delphi 7 использовал, но оно для любых языков есть.
Там можно впихивать десятки тысяч точек на один график без всяких тормозов! Если не ошибаюсь, то этот тип графиков там называется tFastLine. Можно добавлять точки хоть оптом (из файла), хоть поштучно в реальном времени. Удобные средства измерения и масштабирования.
Никакой Ексель так не умеет.
aliexpress.ru/wholesale?SearchText=Openlog+
вязли открытый проект SparkFun Electronics который в общем то USA
и растиражировали
все что нужно здесь github.com/sparkfun/OpenLog
более узкозаточенная версия
github.com/cleanflight/blackbox-firmware
aliexpress.ru/popular/openlog.html
Если ссыль текстом взять то все ок
Mysku добавляет свою рефку к ссылкам на товар — чтобы иметь средства на поддержание и развитие сайта. Лучше эта рефка, чем анимированные баннеры «жoпказино» по периметру страницы.
1. https://aliexpress.ru/item/1005004954547389.html
2. https://aliexpress.ru/item/1005004954626149.html
Просто скопируйте текст. Или самостоятельно поищите «Openlog» на али.
Человек в той теме мне ответил что с впн только поднялось
В общем, код нужно стараться делать «прозрачным», легко читаемым даже спустя время. И использовать для этого все возможности своего компилятора.
лог напряжения в розетке у меня ИБП делает, нужно раз в год.
Типа стирать, гладить, мыть посуду и ГОТОВИТЬ — только ночью :)))
А приятель, маньяк, почти неработающий и на всём экономящий — так и живёт сейчас. Ночью :)
теперь если буду(будут) счетчик менять — поставлю строго однотарифный.
а приятель просек фишку, с женой так жить не получится ))
Пару лет назад меняли счётчики (безвозмездно) и поставили двухтарифный.
Я несколько месяцев с этим пожил и решил «нафиг так жить».
Ложусь в 22, встаю в 7, как раз ВНЕ экономичного тарифа. Ночью люблю тишину, поэтому ничего ночью не работает. Весь день — кофеварка, компы, жрать готовить и вообще свет горит.
И получается как-то непонятно зачем дорого!
Попёрся в ПЭС и в разнузданной форме попросил вернуть один тариф. Ибо.
Ну… В течении примерно 5 месяцев, мне его вернули. Тк скть на круги своя.
То есть счётчик менять не надо, достаточно сходить в контору намекнуть им об их половой ориентации.
P.S.: жена приятеля еще более такая же… ммм… не спящая ночами…
мне лично специально этим заниматься лень, там и экономия копеечная, и переплата тоже.
Мне проще сходить.
Что-то там у себя нажали и не стало двухтарифности.
Ну так а что… Я все равно каждйы месяц ножками хожу им денег отнести.
Прихожу такой на 3й или 4й раз:
— Вам как обычно?
— Да, пожалуйста.
И сразу бланк заявки выдают :))))
Стирать (если достаточно «умная» стиральная машина), мыть посуду (если посудомойка) и даже готовить (если мультиварка) можно и ночью, «без отрыва от подушки», да. :)
Это больше вопрос привычек, предпочтений и желания перестроить свой образ мыслей и жизни под новый режим.
Я вот, например, уже больше десятка лет живу без холодильника… :))
Ну и потом всё равно я на удалёнке и работаю дома днём.
Соотвественно — 95% потребителей — в дневное время.
Раз в 1-2 недели стиралку запустить — ну такое себе…
Умную плиту еще посоветуйте — я лёг спать, а она мне омлетик пожарила, пельмешек сварила… В 4 часа ночи… Самое то :))))
Без холодильника… Ну, это уже за гранью… Но как, черт побери, Холмс?
А для её изменения нужны либо желание, либо необходимость, причём и то, и другое достаточной «силы» для того, чтобы преодолеть собственную инерцию. :))
«Аналогично, шеф!» :)
Ну, моё «дневное» время нередко бывает сдвинуто сильно «в ночь». :)
Да, вот с этим я тоже не заморачиваюсь: нечасто требуется, просто не вижу смысла что-то мудрить. Ну и стиралка достаточно старая, а мудрить какое-нибудь реле времени для включения ночью смысла нет, потому как… см. выше… :))
Очень советую завести себе мультиварку. :)
Лучше — с режимом пароварки-скороварки…
Алиментарно, Уотсон! :))
Живу в основном один, могу по нескольку дней отсутствовать, причём нередки варианты срочного отъезда, «по тревоге». Так что заготовки «впрок» на практике доказали свою бессмысленность и невыгодность: больше портится, чем съедается.
Поэтому привык (приучил себя) питаться «с колёс»: есть запас круп, сахара-мёда, консервов, сушёной зелени, специй и прочих «долгоиграющих» продуктов.
Хлеб, мясо, сыр и прочие «короткоживущие», в условиях отсутствия холодильника, продукты покупаю по необходимость непосредственно перед готовкой.
Готовлю мало, из расчёта сохранности блюд и их употребления максимум за день — и портиться не успевают, и всегда ем свежую пищу. :)
Вот, как-то так… :)
А я придумал проще: взять три датчика DS18B20, ардуину, и модуль OpenLog, как на картинке выше писали. Всё это уже давно купил. Застрял на том, что обнаружилось: компилятор Ардуины под WinXP работает с ошибками, а кроме того в память обычной ардуины ничего не влазит (типа того, как тут советовали «всё делать красиво, использовать типы данных и всё такое»). Искать для этих целей «ардуину в которую всё влазит» мне было лень.
А сейчас я бы и не против купить новую ардуину или что-то получше для этих экспериментов, но у нас тут «временно» большие сложности с доставкой из Китая и из России. Приходится покупать только самое нужное (вот наконец-то сьездил в РФ — в одну сторону нормально 1718 руб потратил, а на обратную дорогу 4186 руб, много так не наездишся за «игрушками»).
www.youtube.com/watch?v=rKKfJeMt0Gs
И даже с Блютузом:
www.youtube.com/watch?v=InaME2NyPKs
А если у моего 61-го уже USB выход, как быть?
А USB надо ещё куда-то «втыкнуть». Возможно в ноут. Но, во-первых габариты, а во-вторых малое время работы от аккумуляторов.
Хотя нет, мультиметр как-то узнаёт, что к нему переходник подключен.
Интересующий Вас момент можно настроить там в разных вариантах.
Показометр слева внизу у монитора — что-то самопальное или завод?
Ваш же «перл»: «Что за странная тяга к МК из 90»…
Один-единственный вопрос: зачем??
Зачем, куда, для чего, под какие задачи, и т.д., вы «тулите» этого вашего «сферического коня в вакууме» — да, с роскошной гривой, но… не зная задач и потребностей того, кого вы взялись критиковать?
У вас с AVR и/или 90-ми что-то очень личное и болезненное связано? ;)
А иначе почему вы такой упор делаете на этом, никак не обосновывая и не мотивируя навязываемый вами другим людям ваш выбор под задачи, которых вы не знаете?
Ы? ;)
Да, я тоже думаю, что дело не в МК, а в каких-то ваших комплексах и стереотипах… :)
А объяснить, на кой ляд вы, образно говоря", дачнику, которому понадобилось ведро перегноя, предлагаете вместо ведра «жадный» КамАЗ, у вас так и не получилось…
Я понимаю, что оно «крутое и блестит», но — зачем? Вот для этой конкретной задачи автора — зачем?? :)
Автора устраивает его выбор, этот выбор решает его задачи и удовлетворяет его потребности. И поэтому все ваши «хвасты» на тему «А у меня вот такая блестящая штуковина есть!» попросту идут лесом. :)
Понадобится ему для его новых задач то, что вы тут так настойчиво навязываете — он это купит. А пока что «рулит» всё тот же разумный классический подход выбора инструмента под задачу…
Аккумулятора (была крона 600мАч и 8,4В!!!) хватило для записи на 15 дней, дискретность была каждые 30 минут.
Т.е. было записано 720 точек.
с одной стороны atmega328 с минимальной обвязкой, с другой слот под микро сд. Прошивку можно и свою залить )