-
Постов
1 462 -
Зарегистрирован
-
Посещение
-
Победитель дней
2
Сообщения, опубликованные esaulenka
-
-
1 hour ago, Mysteo said:
в регистре FLASH->SR в данный момент 0x00000A0 а это соответствует PGSERR и PGAERROR
почитал, что это значит, но почему возникает только после прошивки единожды пока не понял
Подозреваю, это отладчик у вас недостаточно корректно работает. При старте программы эти ошибки есть?
Самый простой способ - чистить эти ошибки перед инициализацией.
А вообще - ST'шники могли бы чистить ошибки перед началом записи...
-
Ну, очевидно, что эта ошибка может возвращаться только из PageErase().
А тот, в свою очередь, зависит только от HAL_FLASHEx_Erase().
Вот тут и надо гулять отладчиком (если можно) или обвешивать всё printf'ами.
-
45 minutes ago, jcxz said:
Но видимо телепат из меня не очень....
Попробую и я применить телепатию. Подозреваю, что правильное ТЗ должно звучать как "у меня есть 3 GPS приёмника, и некое очень-важное-устройство, которому обязательно нужны координаты. Поэтому надо суммировать данные от приёмников, чтобы хоть один из них передал важному-устройству валидные данные".
Потому что с имеющимся ТЗ на "сумматор" на выходе будет каша.
Сильно сомневаюсь, что кто-то рассчитывал на работу с GPS'ом, у которого по три раза в секунду координаты исчезают, и появляются новые.
-
Новый Unified Program and Debug Interface выглядит гораздо продвинутее старого debugWire'а. И с документацией сразу в даташите на камень. Как у него с обратной совместимостью, непонятно. Кажется, никак.
Впрочем, я тот ещё специалист - последний AVR, под который я что-то писал, был ATmega8, с самым обычным SPI-подобным интерфейсом программирования.
-
4 hours ago, x893 said:
на алиэкспресс такого добра 100500
Я пробовал "data logger" - мне выдали какие-то термометры-метеостанции-видеонаблюдение. А вот если "data logger shield" - всё становится гораздо интереснее.
Спасибо. Видимо, так и сделаю - blue pill, этот самый шилд, МГТФ и термоусадка.
3 hours ago, jcxz said:модуль UART-Bluetooth
Два. Хочется видеть передачу в обоих направлениях. Плюс нужна хорошая привязка этих двух каналов друг к другу: есть подозрения, что всё самое интересное начинается, когда пакет теряется и начинаются повторы (как водится, авторы протокола не подумали о сквозной нумерации пакетов)... Но вариант, да, спасибо.
2 hours ago, AlexandrY said:Есть вот такое
Спасибо. Несколько перебор, мне кажется.
-
On 12/5/2019 at 4:10 PM, rx3apf said:
avreal. Но... Про 412-й он еще не знает
А он вообще в принципе знает о новомодном 1-проводном способе программирования AVR'ок ?
-
Здравствуйте.
Возникла необходимость логировать некую железку, которая общается с внешним миром по уарту.
Делать какую-то плату очень не хочется.
Что есть самое простое-дешёвое-компактное с SD-картой, 2 (лучше - 4-мя) уартами и, желательно, RTC ?
Кстати, насколько софт-уарты на распберри работоспособны? Мнения в интернетах расходятся...
-
On 11/29/2019 at 3:12 PM, Basil13 said:
будет выделяться I^2*R
Похоже на правду.
Единственное послабление - драйвер не будет держать dominant бесконечно, и достаточно быстро передатчик перейдёт в состояние ошибки.
-
К сожалению, на таком уровне понимания - закрыть куб, открыть ютуб, посмотреть 100500 роликов "стм+куб - моргаем светодиодиком". Когда доберётесь до роликов "осваиваем SPI", и поймёте, что там делают, можно возвращаться к имеющемуся кан-контроллеру.
Не, можно, конечно, вбить в гугл "STM32 + MCP2551" (это вы тоже не делали?). Проблема только в том, что без понимания, что именно происходит, повторить даже пошаговую инструкцию будет сложно...
-
3 hours ago, kostet2010 said:
может я плохо объясняю. есть такая штука.
Ну, не очень хорошо, да.
Хотя бы потому, что на фоточке написано 2551, а в Вашем сообщении - 2515. UPD: наоборот, конечно же. Чёртов микрочип, почему они такие похожие названия сделали?
High-Speed CAN Transceiver и Stand-Alone CAN Controller with SPI Interface - штуки довольно-таки разные...
Ну и было бы неплохо рассказать, а что же Вы сами уже сделали? Написали "подробно объясните мне всё" ?
On 11/30/2019 at 12:21 PM, Behram said:Думаю, сначала стоить изучить
...какой-нибудь заслуживающий уважения источник.
Потому что от фразы "мой малыш в семи известном и любимом корпусе ATMEGA8 (LQFP32)" у местных жителей может и приступ случиться. Хорошо, если приступ хохота...
-
2 minutes ago, ViKo said:
А целиком можете выложить?
Вы не пробовали подобные вопросу гуглу задавать?
-
1 hour ago, TOG said:
Даташит нашёл только на pic16c620a
В этом даташите есть сноска, что PIC16LC - это то же самое, только низковольтовое. И да, eeprom там отсутствует.
-
К слову, у NXP где-то здесь был очень хороший appnote, как всё это работает.
-
3 hours ago, genseq said:
FPGA вообще не имеют отношения к обсуждаемому вопросу
Имеют, опосредственное. В тот момент, когда у вас появится много-много данных, и их надо будет затолкать в компьютер, а перед этим как-то предобработать, FPGA может пригодиться.
Я, правда, не понял, откуда в этой штуковине (даже на 100+ каналов) МНОГО данных... Там характерная скорость изменения сигнала какая предполагается? Я не биолог совсем, но мне всегда казалось, что все биохимические процессы идут довольно медленно...
PS а за статьи вам спасибо! Половина слов непонятна, но краем глаза посмотреть, какие сейчас космические корабли бороздят просторы биоинженерии, было очень интересно.
-
3 hours ago, Stolbov said:
Я всего лишь увеличил паузу после DDRE |= (1<<PORTE5);
Какое-то странное лечение. По-хорошему, никаких пауз не надо. Если паузу убрать, переходник в компьютер отправленные байты видит?
Вольтметр как запитан? Может, он просто запускается эти 1-2 секунды, а вы ему постоянно питание дёргаете?
3 hours ago, Stolbov said:Сейчас разбираюсь, почему не происходит отсылка данных из условия
На первый взгляд, правильно всё написано...
Предложения по отладке:
- в прерывание на приём байта добавьте пересылку его в соседний порт. Скорость этого UART1 лучше поставить побольше (например, 115200), чтоб не мешал своими задержками.
- также можно через некоторый промежуток (например, через секунду) после обмена с вольтметром отправить в этот UART1 всю интересующую информацию - в первую очередь, IndexStart / IndexEnd.
- также ооочень рекомендую отладчик. Называется AVR JTAG ICE. Оригинал стоит каких-то неразумных, на мой взгляд, денег, но китайские клоны продаются за копейки (порядка 200 рублей). Правда, как работают клоны, я не знаю. "Пошагать" по программе у вас не получится (т.к. задействован вольтметр, а он ждать не будет), но посмотреть в любой момент значения переменных, да и за несколько секунд обновить программу - это очень упрощает работу.
-
Опубликовано · Изменено пользователем esaulenka
чёртов редактор... · Пожаловаться1 hour ago, Stolbov said:#define BUFFER_SIZE 18 //Максимальный размер кольцевого буфера (на две принятые посылки)
#define BUFFER_MASK (BUFFER_SIZE - 1) //Маска обнуления
В том месте, где вы брали кольцевой буфер, не было написано большими буквами, что его размер обязательно должен быть кратен степени двойки?
В противном случае "магия" с маской работает совсем не так, как должна.
И вот это безобразие:
while (1) { if(get_data() == 0) //Если функция вернула 0, значит, в массиве нет новых данных { asm("nop"); //И тогда мы ничего не делаем } else if(get_data() == 1) //Если функция вернула 1, значит, какие-то данные всё же получены { read_byte_from_ring(local_buffer,index_number()); //Читаем полученные от вольтметра данные в local_buffer } else { break; } uart_1_send(local_buffer[0]); //Отсылаем данные из local_buffer на ПК }
Должно быть как-то так:
while (1) { if(get_data() == 1) //Если функция вернула 1, значит, какие-то данные всё же получены { char local; read_byte_from_ring(&local, 1); //Читаем полученные от вольтметра данные в local_buffer uart_1_send(local); //Отсылаем данные из local_buffer на ПК } }
-
On 10/16/2019 at 7:07 AM, GeorgK said:
Там разве не по адресам-портам в том числе исходящим пакеты определяются?
Там какая-то наркомания с тем, куда в данный текущий момент указывает
struct uip_udp_conn *uip_udp_conn; То есть я понимаю, конечно, что
всё для фронта, всё для побе...лишь бы в мелкий 8-битник влезло, но с современными объемами памяти лучше использовать какие-то другие стеки, которые не позволят так легко стрелять себе в ногу. -
11 minutes ago, Arlleex said:
А TXE - как раз по окончанию передачи из сдвигового при отсутствии готовых к отправке в регистре хранения UDR
TXC. TXCIE - это разрешение соотв. прерывания, только что в памяти освежал. Но тут вопрос чуть другой - что сработает первым - опрос в while'е этого флажка, или прерывание с автоматическим его сбросом. Как-то не выглядит надёжно (хотя... никогда не интересовался временем реакции контроллера прерываний атмеги. Может быть, там с запасом... :-) ).
-
Опубликовано · Изменено пользователем esaulenka · Пожаловаться
1 hour ago, Stolbov said:Разумеется, этот код ужасен
Разумеется... :-(
PORTE &= ~(1<<PORTE5); //Установить на PE5 низкий уровень (разрешение приёма)
Тут правильно.
PORTE &= ~(0<<PORTE5); //Установка на E5 выскокого уровня (разрешение отправки)
А тут должно быть PORTE |= (1<<PORTE5);
И, по-хорошему, это должно быть двумя микро-функциями Drv485_TxEn() и Drv485_RxEn()
1 hour ago, Stolbov said:на UART отправляется байт данных, перед этим на управляющий вывод подаётся высокий уровень. Когда байт покинул
буфер, срабатывает прерывание по отправке, и на управляющий вывод подаётся низкий уровень, т.е. "0"Мне не нравится эта идея. Хотя бы потому, что в ATmega есть ДВА регистра в UART'е - data register, куда записываются данные из программы, и shift register, из которого собственно идёт отправка. Вы вот можете поручиться, что прерывание по отправке первого байта сработает ДО того, как в буфер попадёт второй байт?
Я, правда, не сильно понял, как вообще работает бит TXC. Если верить документации, он автоматически сбрасывается прерыванием. Т.е., непонятно, можно ли в принципе надёжно опрашивать его в основном цикле при включённом соотв. прерывании.
Миллион лет не видел атмегу и никогда не видел rs485, но предлагаю следующий алгоритм: запрещаем прерываение по передаче; включаем передатчик MAX485, отправляем свои 8 байт, ждём TX Complete, выключаем передатчик. Предварительно читаем в даташите о необходимости заранее сбросить флаг TXC.
1 hour ago, Stolbov said:прерывание по приёму байт должно занести принятые данные в массив, после чего они все запишутся в EEPROM
Вот на фразе "после чего" у меня возникли некоторые сомнения. В коде нет никакого "после чего" - отправили данные, и сразу же записали в еепром всякий мусор.
1 hour ago, Stolbov said:1) Посылку отправляю именно таким образом, потому что если использовать что-то вроде этого:
Что-то удивительное творится. А что такое databuffer и чему равна j в начале цикла?
1 hour ago, Stolbov said:если функцию call_voltage() поместить в цикл while(1)
...то мы сразу же наступаем на грабли с битовыми масками (см. в начале моего сообщения).
А вообще - что вам помешало сразу прицепить параллельно ваш вольтметр, атмегу и usb-485 ? Хоть какая-то отладка...
PS вопрос больше к общественности. В modbus сразу можно регистры устройства читать, или при появлении его в сети его надо как-то сконфигурировать? Может, дополнительно ещё и с этим проблемы?
-
2 hours ago, Mysteo said:
входной уровень для GPIO у STM32 должен быть не более Vdd + 0.3V
Изрядная часть GPIO у STM'ок - 5 volt tolerant, и туда можно безболезненно подавать куда бОльшее напряжение, чем 3 вольта.
-
4 hours ago, mcheb said:
if((GPIOB->IDR)&(1<<0)) GPIOC->BSRR = (1<<(13+(1)*16)); else GPIOC->BSRR = (1<<(13+(0)*16));
Это, простите, настоящий код с настоящего боевого проекта? Можно только позавидовать Вашей внимательности и усидчивости.
-
19 minutes ago, Mysteo said:
Я правильно понимаю, что здесь нужно применять FFT ? Или 16 полосовых фильтров городить ?
У меня всё никак не дойдут руки сделать что-нибудь полезное в плане ЦОС (на работе не нужно, а дома других забот хватает), но для этой задачи я бы смотрел в сторону работ дядьки Гёрцеля.
-
17 hours ago, Сергей Борщ said:
Кнопочек "+" и "-" на этом форуме нет
... а нечто под названием "member reputation" - есть :-)
-
50 minutes ago, jcxz said:
STM8L151Fxx
Спасибо.
50 minutes ago, jcxz said:Почему-бы не открыть мануал и не посмотреть?
Потому что, очевидно, знать все мануалы невозможно.
А на сайте ST я сразу не нашёл нужную табличку.
Error frames на шине
в Controller Area Network (CAN)
Опубликовано · Пожаловаться
Я правильно понимаю, что величина этого выброса - заметно больше 5 вольт? Проверьте ещё разик, что земли у всех участников соединены.
Попробуйте ткнуть осциллографом в TXD между контроллером и трансивером.