• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Разработка ‘библиотеки’ малого webсервера на esp8266.

pvvx

Активный участник сообщества
А остальное можно скорректировать в цифре.
Сравнив c внешним REF (стоимостью больше полного модуля ESP) и учтя наводки, создающие динамические нелинейности от работы кристалла :):):)
Займитесь - через пяток лет расскажите что добились...
А хотелось бы при обращении к ацп выполнялось лишь одно преобразование.
Может подскажите как запустить однократно АЦП ( пуск, готовность чтение данных) - один раз, а не восемь.
0x60000D50 Бит 2..4: кол-во значений в SAR_DATA 0..7 -> 1..8
 
Последнее редактирование:

PostLast

Member
Нет никакой разницы корректировать лишь источник или суммарную характеристику источника и ацп.
Разница есть. Природа нелинейности ацп неизвестна и кто сказал, что она не меняется от температуры, фазы луны ( это не шутка, фаза может влиять на передаточную функцию ). Для компенсации таких отклонений возникают дополнительные датчики.
Не пробовали применить медианный фильтр для удаления помех?
Если вы гонитесь за скоростью то медианный фильтр дает джиттер миниму на 3 такта. Может проще медленнее мерить?
Осреднение тоже не убирает шумы - оно переносит их спектр, сглаживает сигнал. Если сделать например многими любимый скользящий фильтр глубиной N то увидите колебания сигнала с пиком спектра Fпреоб/(2N)
 

pvvx

Активный участник сообщества
В WDRV сделал скорость ADC от 1Гц до 192кГц:
0..48кГц = 14 бит, далее убывает каждый интервал до 12 бит при 192кГц.
ADC 96кГц (принято по WiFi в USR-TCP232-Test и в файл, а файл в СoolPro2):
ESP-ADC-96kHz.gif
ADC 192кГц (отключаем вывод отладки в UART! Иначе будут пропуски...):
ESP-ADC-192kHz.gif
Если без SDK, то полная инициализация SAR:
Код:
#include "hw/esp8266.h" // https://github.com/pvvx/esp8266web/blob/master/include/hw/esp8266.h
#define i2c_bbpll                            0x67 // 103
#define i2c_bbpll_en_audio_clock_out        4
#define i2c_bbpll_en_audio_clock_out_msb    7
#define i2c_bbpll_en_audio_clock_out_lsb    7
#define i2c_bbpll_hostid                    4

#define i2c_saradc                            0x6C // 108
#define i2c_saradc_hostid                    2
#define i2c_saradc_en_test                    0
#define i2c_saradc_en_test_msb                5
#define i2c_saradc_en_test_lsb                5

#define i2c_writeReg_Mask(block, host_id, reg_add, Msb, Lsb, indata) \
    rom_i2c_writeReg_Mask(block, host_id, reg_add, Msb, Lsb, indata)

#define i2c_readReg_Mask(block, host_id, reg_add, Msb, Lsb) \
    rom_i2c_readReg_Mask(block, host_id, reg_add, Msb, Lsb)

#define i2c_writeReg_Mask_def(block, reg_add, indata) \
    i2c_writeReg_Mask(block, block##_hostid, reg_add, reg_add##_msb, reg_add##_lsb, indata)

#define i2c_readReg_Mask_def(block, reg_add) \
    i2c_readReg_Mask(block, block##_hostid, reg_add, reg_add##_msb, reg_add##_lsb)

//---- Init CPU
    IO_RTC_4 = 0; // отключить WiFi // 0x60000710 = 0
    GPIO0_MUX = 0; // отключить вывод Q_CLK
    // CLK CPU 160 MHz
    rom_i2c_writeReg(103, 4, 1, 136);
    rom_i2c_writeReg(103, 4, 2, 145);
    CLK_PRE_PORT |= 1;
    ets_update_cpu_frequency(80 * 2);
...
//---- Init SAR
    IO_RTC_4 |= 0x06000000; // переключить источник тактирования (частоту) для SAR SET_PERI_REG_MASK(0x60000710,0x6000000);
    i2c_writeReg_Mask(108,2,0,4,4,1);
    i2c_writeReg_Mask(108,2,1,1,0,2);
    i2c_writeReg_Mask(98,1,3,7,4,15);
    DPORT_BASE[0x18>>2] |= 0x038f0000; // SET_PERI_REG_MASK(0x3FF00018,0x038f0000);
    HDRF_BASE[0x0e8>>2] |= 0x01800000; // SET_PERI_REG_MASK(0x600005e8,0x01800000);
    // включить SAR
    i2c_writeReg_Mask_def(i2c_saradc, i2c_saradc_en_test, 1); //select test mux
    SAR_CFG1 |= 1 << 21;

    // ожидание готовности SAR
    while((SAR_CFG >> 24) & 0x07);
....
// user code
 
Последнее редактирование:

pvvx

Активный участник сообщества
В этом варианте 192 кгц - это одиночный пуск ацп?
т е суммирование 8 отсчетов нет или есть?
а где в вашем алгоритме исрпавляется теперь нелинейность 5 младших бит?
А на скриншоте показано минимальное и максимальное значение и указано что всё это принято из WDRV в свалке, да кол-во бит для 192 кГц описано в сообщении... и в хидере стоит предел ADC = 386 000 Hz.
Так-же как раньше и исправляется, без китайской ошибки из новых SDK.
И зачем это всё вам? Всё равно на Lua это работать не будет и никто в Lua это встраивать тоже не будет.
 
Последнее редактирование:

pvvx

Активный участник сообщества
Один из таких приборов я уже назвал на форуме - это оптический спектрометр в т ч и рамановского излучения.
Поставьте нормальный ADC, вам всего то измерять разницу дифракционных сеток - яркость... К примеру из старых типа ADuC7060..7061 - у него и MCU встроен и два синхронных ADC, для передачи в ESP по любому интерфейсу... на напыленный микро металлический резистор в вакуумной колбе он даст полное разрешение до тепловых шумов, в отличии от полупроводниковых датчиков - у металлических на 3..4 десятичных знака меньше шум -> разрешение больше...
 
Последнее редактирование:

pvvx

Активный участник сообщества
pvvx,
посмотрел ADuC7060..7061
они медленные до 8 кгц
мне надо вводить весь спектр это 4000 пиксель. как можно быстрее.
В профессиональных ставят ацп 16 бит на 1 мгц
Значит что-то неверно описали здесь http://esp8266.ru/forum/threads/raz...o-webservera-na-esp8266.56/page-55#post-13159
https://ru.wikipedia.org/wiki/Рамановская_спектроскопия
 

pvvx

Активный участник сообщества
если упрощенно, То рамановская спектроскопия - это оптический спектр отраженного света лазера.
Т е это оптический спектрометр+ лазер+режекторный фильтр.
Я делаю сейчас статический спектрометр - а это значит что фотоприемник должен быть либо линейкой либо матрицей
В динамическом фурье-спектрометре фотоприемник - фотодиод .
Фотодиод с выходом 500 ТГц? :eek:
Т е вместо линейки фото получаем линейку серво.
Скорости конечно большой не надо, но погрешность перемещения на уровне долей микрон.
Это при наклонной "линейке"?
Что-то у вас всё не так, как у рабочих образцов. :( Ладно - всё ясно что это просто выдумка для отмазки, проехали.
 

pvvx

Активный участник сообщества
pvvx,
что вы скажите относительно следующего:
1) почему нельзя задать не от 1 до 8 значений на ввод, а скажем сразу 16 разрядное число?
У данного SAR всего 8 регистров.
какое время преобразование одного отсчета АЦП? Можете измерить?
в хидере стоит предел ADC = 386 000 Hz.
Код:
SAR TEST 8 buf samples:

Wait 3486 = Tcpu, Wait 1M samples = 21737500 us

SAR TEST 7 buf samples:

Wait 3068 = Tcpu, Wait 1M samples = 19125000 us

SAR TEST 6 buf samples:

Wait 2650 = Tcpu, Wait 1M samples = 16512500 us

SAR TEST 5 buf samples:

Wait 2232 = Tcpu, Wait 1M samples = 13900000 us

SAR TEST 4 buf samples:

Wait 1836 = Tcpu, Wait 1M samples = 11425000 us

SAR TEST 3 buf samples:

Wait 1418 = Tcpu, Wait 1M samples = 8812500 us

SAR TEST 2 buf samples:

Wait 1000 = Tcpu, Wait 1M samples = 6200000 us

SAR TEST 1 buf samples:

Wait 582 = Tcpu, Wait 1M samples = 3587500 us
1244214.gif
Код:
void test_sar_tim(int b)
{
    ets_printf("SAR TEST %u buf samples:\n", b+1);
    uint32_t t1, t2;
    SAR_CFG = SAR_CFG & (~(7<<2)) | ((b&7)<<2);

    GET_CCOUNT(t1);

    // запуск нового замера SAR
    uint32 x = SAR_CFG & (~(1 << 1));
    SAR_CFG = x;
    SAR_CFG = x | (1 << 1);
    // ожидание готовности SAR
    while((SAR_CFG >> 24) & 0x07);

    GET_CCOUNT(t2);
    ets_printf(" Wait %u = Tcpu,", t2-t1);

    int i = 1000000;
    t1 = system_get_time();
    while(i--) {
        // запуск нового замера SAR
        uint32 x = SAR_CFG & (~(1 << 1));
        SAR_CFG = x;
        SAR_CFG = x | (1 << 1);
        SAR_CFG |= (1 << 1);
        // ожидание готовности SAR
        while((SAR_CFG >> 24) & 0x07);
    }
    t2 = system_get_time();
    ets_printf(" Wait 1M samples = %u us\n", t2-t1);
}

int i = 8;
    while(i--) test_sar_tim(i);
 

pvvx

Активный участник сообщества
На фотодиод у нас падает часть светового излучения,
полученная после дифракционной решетки либо часть интерфирационного сигнала если это фурье-спектрометр.
В самом первом вопросе и ответе вам и писалось - дифракционной решетки и интерференции в яркость. А чувствительный элемент по яркости = болометр со сдвоенным элементом и металлический, т.к. шум у него меньше, а время реакции десятки миллисекунд и никаких ВЧ ADC не требуется.
Есть другие - перенос по спектру в возбужденном газе (или мет. пару), как гетеродин. Там уже надо полосу ADC и настройка гетеродина идет путем подмагничивания магнитным полем... Но в такой системе ESP - смешно.
 

pvvx

Активный участник сообщества
правильно я понял, что при вводе по одному отсчету получаем 3.5 мкс на 1 отсчет, т е. 285 кГц. Верно?
Вы когда нибудь можете внимательно посмотреть то, что вам дают в ответ? Там зачем дан график и цифири?
График дан, т.к. так проще и нагляднее в Exel получить формулу расчета... и там коэф. у X указывает время одной итерации ADC в us, а в низу таблицы дан пересчет в частоту.
Прерывание на такой частоте ESP не потянет и как прикрутить DMA (SLC) к ADC китайцы зажилили, как и зажилили включение прерывания от ADC (найдены только регистры разрешения и подтверждения прерывания в ADC, но не как их подключить к контроллеру прерываний). По тому используется другой алгоритм - без подтверждений и т.д. А уже из этого вытекает, что то, что вы хотите не выйдет.
Пишите китайцам - я не собираюсь анализировать весь чип или платите за исследования. Но я это делаю за очень дорого - у меня другие задачи :)
 
Последнее редактирование:

pvvx

Активный участник сообщества
пример фотодиодных приемников ИК диапазона.
У большинства "железных" 10-12Вт/Гц1/2 :p
Всё как я и говорил. Чувствительность определяется тепловым шумом - шумом Джонсона. У полупроводников он больше на 3..4 порядка, но учитывая большее преобразование на 1 порядок и получаем лучшую чувствительность всего на 2..3 порядка. :p
А избранный вами диапазон зависит от фильтра перед элементом. :)
Вы проконсультировались у НПО Орион на счет того из чего у них элементы ? :)
Вот она, ваша отговорка по невнимательности:
Поэтому не факт, что то, что для одного привычно и понятно, другой воспримет точно также.
А собственное незнание вы переводите в манию величия у других.
Значит обижены на весь мир. Нехорошо.
И на счет копания в ESP8266 - всё выложено, т.е. у вас условия одинаковы со мной, но вы всё равно попрашайничаете, вместо того чтобы посмотреть и возможно исправить и дать новые, улучшенные варианты.
 
Последнее редактирование:

pvvx

Активный участник сообщества
Зачем Вы пищите известные из книжек общие рассуждения о физике этих элементов.
У меня хорошее радиотехническое образование, ученая степень и 20 лет стажа преподавания в радиотехническом вузе.
Поверьте моему опыту из Вас плохой лектор.
Я не учился на лектора или журналиста.
А из вас хороший лектор, если вы постоянно ошибаетесь и совсем невнимательны? Вам приходится писать одно и то-же десятки раз, до полного извращения темы и опускания информации до сленга детсада, что в итоге дает путаницу, за которую вы потом хватаетесь и обвиняете.
Я тоже выложил библиотеки для быстрого ввода с ацп,
которые получил от китайцев.
При этом они никогда не выпендриваются .
Что-то наоборот - все их PDF и прочая информация завышена на порядки. Это не выпендривание?
И толку от ваших либ? Где исходники? Опять мне делать?
И когда ваши китайцы что дали если это уже не было сделано альтернативно?
Что касается попрошайничества,
то весь это форум , да и вообще все технические форумы на этом основаны.
А этот форум лишь на этом и живет.
На данном форуме нет дискуссий.

Вы же сами хвалитесь своими достижениями и напрашиваетесь на вопросы.
Пометили здесь свое место и огрызаетесь на тех, кто якобы претендует на него.
Вместо дискуссии у Вас лишь звучит брань и попытка унизить собеседника,
если тот пытается вам что то возразить.
Нет никаких проблем с этим. Прекращаю этим заниматься и буду вести себя как вы. Т.е. нового больше ничего тут не выложу - не ошибается тот, кто ничего не делает. Если на тысячу правильного одна ошибка - это мелочь. У вас же наоборот.
Короче тема свалки закрыта по настоянию пользователей.
 
Последнее редактирование:

PycLan

New member
Добрый день!
pvvx, не подскажете где почитать или мож раcскажете, про взаимодействие ~name~ <>ESP <>UART?
 

PycLan

New member
Да, ну ладно, правда не понятно причем тут я....o_O
— Простите, часовню тоже я… развалил? ...© :D
 
Последнее редактирование:

pvvx

Активный участник сообщества
Да, ну ладно, правда не понятно причем тут я....o_O
— Простите, часовню тоже я… развалил? ...© :D
Часовня стоит. Но ей надоели всякие тупые маркетологи и папараци типа Nikolz. Они не желают ничего бесплатного и постоянно воюют, выдумывая и наговаривая что угодно. У них это вызывает падение бизнеса по втюхиванию своих кривых недоделок...
По этому временно, а может безвременно, тут будут соблюдаться их правила и методы - никаких ответов по теме.
Это не обида - это проверка концепций и выдумок Nikolz - "обозвался груздём - полезай в лукошко".
 
Последнее редактирование:

PycLan

New member
У меня хорошее радиотехническое образование, ученая степень и 20 лет стажа преподавания в радиотехническом вузе.
Поверьте моему опыту из Вас плохой лектор.
Что касается попрошайничества,
то весь это форум , да и вообще все технические форумы на этом основаны.
А этот форум лишь на этом и живет.
На данном форуме нет дискуссий.
Т.е. Вы 20 лет преподавая, были уверенны, что Вы бог, а все ваши студенты, которые задавали вопросы - бомжи? Так Вы утверждаете, ссылаясь на слово - попрошайничество?
Все радиотехнические форумы сборище бомжей живущих за счет этих форумов?
 

pvvx

Активный участник сообщества
не подскажете где почитать или мож раcскажете, про взаимодействие ~name~ <>ESP <>UART?
У вас очень общий вопрос. Ответить на него невозможно, не исписав несколько страниц. Но части вопроса уже обсуждались ранее.
Например передача данных из web в UART невозможна, т.к. web многопользовательский, а UART - нет. И скорости у них разнятся - может возникнуть переполнение данных из web в UART. Так-же не известно обратное действие - что показывать из данных UART, когда обновлять на странице, какому подключившемуся клиенту или асинхронному многопоточному запросу браузера... Т.е. требуется специальный алгоритм, который каждый пишет для своего частного случая сам.
 

PycLan

New member
Спасибо за ответ.
1. ограничить подключения до одного клиента (устройством управлять можно только одним пользователем)
2. web или только передает данные, или только принимает, нет одновременных прием-передача, за очередностью следит сам web
Может ли возникнуть переполнение данных при передаче web <> UART? при условии 1 и 2 пункта.
Какие ограничения у текущего примера Hello? C точки зрения передаваемой длины сообщения?
 
Последнее редактирование:
Сверху Снизу