2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2, 3, 4  След.
 
 EEPROM i2c, Ардуино. Проблемы и вопросы
Сообщение12.12.2018, 08:20 
Аватара пользователя


11/12/16
13852
уездный город Н
Есть Arduino Uno (точнее её китайский клон). Есть библиотека для работы с i2c для ардуино, стандартная - wire.h
Есть банальный EEPROM 24с32, выпаянный из телевизора :D
И есть некоторая проблема с ним.

Проблема заключается в том, что если обмен с 24с32 делать без делеев между атомарными операциями, то чтение запись происходит ненадежно.
Даже более сильно - надежно возникают проблемы.
Опыт показал, что достаточно задержки в 3-5 мс.
Под атомарными операциями понимается как чтение\запись одного байта, так и чтение\запись последовательности байт за один цикл обмена (микросхема поддерживает такой режим).

В чем проблема? В eeprom, библиотеке, или в HW-реализации i2c на мелкопроцессоре Ардуины?

-- 12.12.2018, 08:27 --

И есть еще такой вопрос.
Опять же есть та же самая Ардуина.
Через SoftwareSerial к ней подключен LCD экран.
Через i2c будет подключен АЦП, с разрешением от 12 до 18 бит. Ну, 18 бит это будет скорее всего излишне. Но 12-16 хочется поддержать.
С АЦП будет делаться выборка порядка 500-1000 точек.
Их надо где-то сохранить, чтобы
а) сделать предобработку и выгрузить в LCD экран.
б) слить на комп через HardwareSerial

Вообщем, где-то надо сохранить 2-3 килобайта. А памяти уже столько нет.
Вопросы:
а) можно ли использовать для этого EEPROM (выборка будет делаться примерно раз в секунду при включенном устройстве)?
б) может есть какая-то достпуная память (ОЗУ) с i2c интерфейсом? Посоветуйте чип
:roll:

 Профиль  
                  
 
 Re: EEPROM i2c, Ардуино. Проблемы и вопросы
Сообщение12.12.2018, 08:58 


27/08/16
10218
EUgeneUS в сообщении #1360632 писал(а):
Есть банальный EEPROM 24с32, выпаянный из телевизора :D

Они бывают сделаны различными производителями.

EUgeneUS в сообщении #1360632 писал(а):
Проблема заключается в том, что если обмен с 24с32 делать без делеев между атомарными операциями, то чтение запись происходит ненадежно.
Чтение или запись? Микросхема не может выполнять некоторые операции со скоростью шины. Тогда нужно ждать. Вообще, читайте даташит на свой чип, например: http://ww1.microchip.com/downloads/en/d ... oc0336.pdf

EUgeneUS в сообщении #1360632 писал(а):
а) можно ли использовать для этого EEPROM (выборка будет делаться примерно раз в секунду при включенном устройстве)?
Если вас устраивает Endurance (максимальное гарантированное количество записей, при превышении которого ваш чип сдохнет - то почему нет? Этот параметр касается количества записей в одну ячейку.

Что вам мешает делать предобработку и сливать на комп в процессе выборки по одной точке раз в секунду?

 Профиль  
                  
 
 Re: EEPROM i2c, Ардуино. Проблемы и вопросы
Сообщение12.12.2018, 09:20 
Аватара пользователя


11/12/16
13852
уездный город Н
realeugene в сообщении #1360636 писал(а):
Чтение или запись?


И чтение и запись, как выяснилось. Если писать по-байтно без делеев, то первый байт пишется надежно, а последующие как попало.
Если писать блоком, то пишется нормально.

Если читать сразу после записи, то читает как попало и блоком и по-байтно.

realeugene в сообщении #1360636 писал(а):
Микросхема не может выполнять некоторые операции со скоростью шины.

Беда, если так, см. ниже. Еще беда в том, что 24с32 настолько распространенный тип микросхемы, что её делает кто попало и в разных (видимо) вариантах - сложно найти "именно тот даташит".

realeugene в сообщении #1360636 писал(а):
Если вас устраивает Endurance (максимальное гарантированное количество записей, при превышении которого ваш чип сдохнет - то почему нет? Этот параметр касается количества записей в одну ячейку.


Пишут про миллион. Выглядит много, но не очень :D

realeugene в сообщении #1360636 писал(а):
Что вам мешает делать предобработку и сливать на комп в процессе выборки по одной точке раз в секунду?

Мешает, то, что нужно делать (и отображать) всю выборку примерно за секунду.
Если обработку устраивать по каждой точке, то много накладняков получается, в частности при записи точки в LCD (туда лучше блоком писать).
Возможно вариант - это делать блок точек на 250, тогда должно влезть в память... Но исключается вариант "слить выборку в комп по запросу из компа".

 Профиль  
                  
 
 Re: EEPROM i2c, Ардуино. Проблемы и вопросы
Сообщение12.12.2018, 09:39 


27/08/16
10218
EUgeneUS в сообщении #1360638 писал(а):
Если читать сразу после записи, то читает как попало и блоком и по-байтно.

В EEPROM запись - долгая операция. У этого Атмела по моей ссылке выше до 20 мс на байт. Обычно несколько быстрее, но всё равно миллисекунды. Запись блоком скорее всего сначала складывает данные в буфер, потом их пишет по одному байту из буфера.

EUgeneUS в сообщении #1360638 писал(а):
Еще беда в том, что 24с32 настолько распространенный тип микросхемы, что её делает кто попало и в разных (видимо) вариантах - сложно найти "именно тот даташит".
Посмотрите на маркировку чипа. Обычно чипы промаркированы логотипом производителя, если только они не совсем уж noname.

EUgeneUS в сообщении #1360638 писал(а):
Пишут про миллион. Выглядит много, но не очень :D
От вашей задачи зависит. Бывают EEPROM и на 10 миллионов.

EUgeneUS в сообщении #1360638 писал(а):
Если обработку устраивать по каждой точке, то много накладняков получается, в частности при записи точки в LCD (туда лучше блоком писать).

Писать раз в секунду? И вас заботят накладные расходы?
Вы всё равно не сможете отобразить 1000 точек на мелком индикаторе. Копите статистику, сырые данные сбрасывайте в комп.

EUgeneUS в сообщении #1360638 писал(а):
Но исключается вариант "слить выборку в комп по запросу из компа".
Ардуина - это средство для быстрых поделок, а не для тщательной проработки всех возможных вариантов. Есть возможность скидывать через неё по одному отсчёту, не рисуя свою плату и почти не умея программировать - радуйтесь.

 Профиль  
                  
 
 Re: EEPROM i2c, Ардуино. Проблемы и вопросы
Сообщение12.12.2018, 09:49 
Аватара пользователя


11/12/16
13852
уездный город Н
realeugene в сообщении #1360641 писал(а):
Писать раз в секунду? И вас заботят накладные расходы?


Раз в секунду (может в 2-3 секунды, но уже некомфортно будет):
1. снять 500-1000 отсчетов (там не только прочитать АЦП)
2. Привести эти 500-1000 отсчетов по 2-3 байта к одному байту на отсчет.
3. Результат п.2. слить на LCD
4. Сырые отсчеты
а) либо сразу слить на комп
б) либо (лучше) слить на комп по запросу от компа.

Если сохранение в EEPROM будет добавлять 20мс на байт - уже сильно не укладываемся.

realeugene в сообщении #1360641 писал(а):
Вы всё равно не сможете отобразить 1000 точек на мелком индикаторе.

А у меня не мелкий индикатор. Вот такой: https://www.itead.cc/wiki/NX8048K050
Он поддерживает форму для вывода графиков: максимальный вертикальный размах до 256 пикселей (то есть байт), а количество - ограничивается только размером экрана (800).

realeugene в сообщении #1360641 писал(а):
Ардуина - это средство для быстрых поделок, а не для тщательной проработки всех возможных вариантов. Есть возможность скидывать через неё по одному отсчёту, не рисуя свою плату и почти не умея программировать - радуйтесь.

Это не повод не делать устройство хоть немного юзабельным.

 Профиль  
                  
 
 Re: EEPROM i2c, Ардуино. Проблемы и вопросы
Сообщение12.12.2018, 09:55 


27/08/16
10218
EUgeneUS в сообщении #1360642 писал(а):
снять 500-1000 отсчетов (там не только прочитать АЦП)

У вас точка в секунду или 1000 точек в секунду?

Сейчас многие производители распространяют development boards для своих чипов за небольшие деньги, десятки долларов за плату. При этом базовый инструментарий для них часто бесплатный и включает в себя нормальную среду с компилятором и отладчиком, RTOS и драйвера для встроенной периферии. Посмотрите, например, на семейство STM32. В этих чипах памяти изначально гораздо больше и ядро 32-битный ARM, а не уже морально устаревший AVR.

-- 12.12.2018, 10:02 --

EUgeneUS в сообщении #1360642 писал(а):
А у меня не мелкий индикатор. Вот такой: https://www.itead.cc/wiki/NX8048K050
Для больших индикаторов последовательная шина и AVR в любом случае будут тормозом. Не надейтесь на быструю реакцию.

-- 12.12.2018, 10:05 --

EUgeneUS в сообщении #1360642 писал(а):
Это не повод не делать устройство хоть немного юзабельным.
Это повод правильно выбирать инструментарий под свою задачу.

 Профиль  
                  
 
 Re: EEPROM i2c, Ардуино. Проблемы и вопросы
Сообщение12.12.2018, 10:16 
Аватара пользователя


11/12/16
13852
уездный город Н
realeugene в сообщении #1360643 писал(а):
У вас точка в секунду или 1000 точек в секунду?


"Я бы взял по частям, но мне нужно сразу" (с)
Делается АЧХ-метр. Если АЧХ будет сниматься за время большее единиц секунд, это будет неюзабельно.

realeugene в сообщении #1360643 писал(а):
Для больших индикаторов последовательная шина и AVR в любом случае будут тормозом. Не надейтесь на быструю реакцию.

В этом экране вся работа с графикой реализована внутри него, шлются только данные (туда), и события по нажатию "кнопок" (обратно) - и то не все, а какие нужно (задается прошивкой самого экрана).

realeugene в сообщении #1360643 писал(а):
Посмотрите, например, на семейство STM32.

Мысли сменить процессор были, если не на STM32, то на какую-нибудь Arduino Mega c ATmega1280. Там, в частности, более одного железного UART, что снимает вопрос со скоростью обмена с LCD. И памяти 8 кб, что должно хватить для хранения сырой выборки. Но пока повожусь с Uno. Похоже быстрый EEPROM на 10 миллионов циклов должен решить проблему. Хотя это и похоже на пациента, который кушал с ножа :D

 Профиль  
                  
 
 Re: EEPROM i2c, Ардуино. Проблемы и вопросы
Сообщение12.12.2018, 10:21 


27/08/16
10218
EUgeneUS в сообщении #1360647 писал(а):
то на какую-нибудь Arduino Mega c ATmega1280.
Говорю же вам: они морально устарели.

EUgeneUS в сообщении #1360647 писал(а):
Делается АЧХ-метр. Если АЧХ будет сниматься за время большее единиц секунд, это будет неюзабельно.
Преобразование Фурье сигнала тоже на AVR будете делать?

 Профиль  
                  
 
 Re: EEPROM i2c, Ардуино. Проблемы и вопросы
Сообщение12.12.2018, 10:25 
Аватара пользователя


11/12/16
13852
уездный город Н
realeugene в сообщении #1360650 писал(а):
Преобразование Фурье сигнала тоже на AVR будете делать?


Зачем оно?
Есть синтезатор частоты, который будет пробегать заданную полосу
Есть логарифмический детектор. Его выход читает АЦП.

 Профиль  
                  
 
 Re: EEPROM i2c, Ардуино. Проблемы и вопросы
Сообщение12.12.2018, 10:46 


27/08/16
10218
EUgeneUS в сообщении #1360653 писал(а):
Есть логарифмический детектор. Его выход читает АЦП.

Не звуковой диапазон? Но сотни микросекунд на точку? Логарифмический детектор? С 18-битным АЦП? Что-то не вяжется.

Мне кажется, что на этом пути вас ждёт ещё много удивительных открытий. Но успехов!

 Профиль  
                  
 
 Re: EEPROM i2c, Ардуино. Проблемы и вопросы
Сообщение12.12.2018, 11:02 
Аватара пользователя


11/12/16
13852
уездный город Н
realeugene в сообщении #1360657 писал(а):
Не звуковой диапазон?


В первую очередь - радиочастоты, от примерно 0.5 Мгц до 30 Мгц.
Со звуковым диапазоном надо будет отдельно разбираться в любом случае. Но он особо (пока) не интересует.

realeugene в сообщении #1360657 писал(а):
Но сотни микросекунд на точку? Логарифмический детектор?

А в чем проблема?

realeugene в сообщении #1360657 писал(а):
С 18-битным АЦП?

Дешевый чип, такой как MCP3421, уже позволяет от 12 до 18 бит (но скорость чтения падает с ростом разрядности).
Выше я писал, что 18 бит - это перебор. Думаю, и 12 бит хватит.

-- 12.12.2018, 11:06 --

realeugene в сообщении #1360657 писал(а):
Мне кажется, что на этом пути вас ждёт ещё много удивительных открытий. Но успехов!


Таких поделок, в том числе и на Ардуино, на просторах интернетов целая куча. О каких-то особых проблемах не сообщается (это, конечно, не является гарантией, что их нет).
Отличие моей поделки только в том, что еще Nextion прикручивается для отображения АЧХ, что позволит использовать без компа.

 Профиль  
                  
 
 Re: EEPROM i2c, Ардуино. Проблемы и вопросы
Сообщение12.12.2018, 11:11 


27/08/16
10218
EUgeneUS в сообщении #1360660 писал(а):
А в чем проблема?

А успеет?

EUgeneUS в сообщении #1360660 писал(а):
Дешевый чип, такой как MCP3421
А вы заглядывали в его даташит? Смотрели скорость измерения и полосу пропускания входного сигнала? Первое открытие, которое вас ждёт: эти очень дешевые но точные сигма-дельта АЦП предназначены для медленных измерений, без напряга до нескольких точек в секунду. Второе открытие - существование промышленной электросети с частотой 50 Гц.

-- 12.12.2018, 11:12 --

EUgeneUS в сообщении #1360660 писал(а):
Таких поделок, в том числе и на Ардуино, на просторах интернетов целая куча.
Ну удачи, удачи...

 Профиль  
                  
 
 Re: EEPROM i2c, Ардуино. Проблемы и вопросы
Сообщение12.12.2018, 11:22 
Аватара пользователя


11/12/16
13852
уездный город Н
realeugene в сообщении #1360663 писал(а):
А успеет?

детектор AD8307. Response Time Small signal, 10% to 90%, 0 mV to 100 mV, CL = 2 pF 400 ns; Large signal, 10% to 90%, 0 V to 2.4 V, CL = 2 pF 500 ns

Успеет с запасом.

realeugene в сообщении #1360663 писал(а):
А вы заглядывали в его даташит? Смотрели скорость измерения и полосу пропускания входного сигнала? Первое открытие, которое вас ждёт: эти очень дешевые но точные сигма-дельта АЦП предназначены для медленных измерений, без напряга до нескольких точек в секунду. Второе открытие - существование промышленной электросети с частотой 50 Гц.


Заглядывал. 240 SPS (12 bits), то есть около 4 секунд на выборку 1000 точек, и 2 секунды на 500 точек. Многовато, конечно.

-- 12.12.2018, 11:24 --

Но если посоветуете чип АЦП побыстрее (но стоимостью в несколько долларов) буду благодарен.

 Профиль  
                  
 
 Re: EEPROM i2c, Ардуино. Проблемы и вопросы
Сообщение12.12.2018, 11:28 


27/08/16
10218
EUgeneUS в сообщении #1360666 писал(а):
детектор AD8307. Response Time Small signal, 10% to 90%, 0 mV to 100 mV, CL = 2 pF 400 ns; Large signal, 10% to 90%, 0 V to 2.4 V, CL = 2 pF 500 ns
Для частоты 0.5 МГц это как раз один период входного сигнала. :mrgreen:
А нет, целых четыре периода. Ошибся в устном счёте. :facepalm:
А, нет, опять нет! Целую четверть периода. :facepalm: :facepalm: :facepalm: :mrgreen:

EUgeneUS в сообщении #1360666 писал(а):
Но если посоветуете чип АЦП побыстрее (но стоимостью в несколько долларов) буду благодарен.
Почему вас так сильно беспокоит стоимость для единичного экземпляра?

-- 12.12.2018, 11:32 --

EUgeneUS в сообщении #1360666 писал(а):
Заглядывал. 240 SPS (12 bits), то есть около 4 секунд на выборку 1000 точек, и 2 секунды на 500 точек. Многовато, конечно.
Ещё одно открытие, которое вас ждёт - это что у сигма-дельта АЦП переходный процесс его реакции на единичный скачок занимает несколько выходных точек.

 Профиль  
                  
 
 Re: EEPROM i2c, Ардуино. Проблемы и вопросы
Сообщение12.12.2018, 11:41 
Заслуженный участник


20/08/14
11780
Россия, Москва
EUgeneUS в сообщении #1360647 писал(а):
Похоже быстрый EEPROM на 10 миллионов циклов должен решить проблему.
10 миллионов секунд это меньше 4 месяцев непрерывной работы. Ну пусть включают лишь на 6ч в рабочий день, значит хватит на 2 календарных года. Нехорошо.
А некоторые микросхемы не имеют даже и миллиона циклов, например Microchip 24LC32 гарантирует 10 миллионов циклов лишь для первых 512 байтов и всего 100 тысяч циклов для остальной памяти.

Стандартные I2C eeprom обычно имеют скорость записи от 5 до 8 мс на буфер длиной от 8 (24C32) до 256 (24C1024) байтов, причём размер буфера коррелирует с объёмом микросхемы. Вам нужна скорость не менее 2 килобайта в секунду или 16 байтов за 8 мс, это можно получить на Microchip 24LC64 с буфером в 32 байта, но она всего миллион циклов. Или можно включить 4 штуки 24LC32 с буфером 8 байтов с разными адресами.

Но это всё извращения. Поставьте недорогую SPI SRAM память (например) и не мучайтесь.

Или переработайте алгоритм выдачи данных в комп чтобы отдавались прямо данные с АЦП, а не из буфера. Для отрисовки же они считались прямо на лету и тоже не буферизировались.

Насчёт 50 Гц наводки и MCP3421, у него можно выбрать частоту сэмплирования 50 Гц и в АЧХ будет первый провал, -70 dB конечно не идеал, но всё же.
UPD. Ах нет, нельзя, лишь 60Гц, ну тогда для 50 Гц не судьба.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 52 ]  На страницу 1, 2, 3, 4  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group