Перейти к содержанию
    

esaulenka

Свой
  • Постов

    1 462
  • Зарегистрирован

  • Посещение

  • Победитель дней

    2

Сообщения, опубликованные esaulenka


  1. On 12/13/2019 at 8:09 PM, Polaris said:

    Как видно из скриншотов, выброс связан с искажение бита ACK

    Я правильно понимаю, что величина этого выброса - заметно больше 5 вольт? Проверьте ещё разик, что земли у всех участников соединены.

     

    On 12/13/2019 at 8:09 PM, Polaris said:

    но кто это может делать

    Попробуйте ткнуть осциллографом в TXD между контроллером и трансивером.

  2. 1 hour ago, Mysteo said:

    в регистре FLASH->SR в данный момент 0x00000A0  а это соответствует PGSERR и PGAERROR 

     почитал, что это значит, но почему возникает только после прошивки единожды пока не понял

    Подозреваю, это отладчик у вас недостаточно корректно работает. При старте программы эти ошибки есть?

    Самый простой способ - чистить эти ошибки перед инициализацией.

    А вообще - ST'шники могли бы чистить ошибки перед началом записи...

     

  3. 45 minutes ago, jcxz said:

    Но видимо телепат из меня не очень....

    Попробую и я применить телепатию. Подозреваю, что правильное ТЗ должно звучать как "у меня есть 3 GPS приёмника, и некое очень-важное-устройство, которому обязательно нужны координаты. Поэтому надо суммировать данные от приёмников, чтобы хоть один из них передал важному-устройству валидные данные".

     

    Потому что с имеющимся ТЗ на "сумматор" на выходе будет каша.

    Сильно сомневаюсь, что кто-то рассчитывал на работу с GPS'ом, у которого по три раза в секунду координаты исчезают, и появляются новые.

  4. Новый Unified Program and Debug Interface выглядит гораздо продвинутее старого debugWire'а. И с документацией сразу в даташите на камень. Как у него с обратной совместимостью, непонятно. Кажется, никак.

     

    Впрочем, я тот ещё специалист - последний AVR, под который я что-то писал, был ATmega8, с самым обычным SPI-подобным интерфейсом программирования.

  5. 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:

    Есть вот такое

    Спасибо. Несколько перебор, мне кажется.

  6. Здравствуйте.

    Возникла необходимость логировать некую железку, которая общается с внешним миром по уарту.

    Делать какую-то плату очень не хочется.

    Что есть самое простое-дешёвое-компактное с SD-картой, 2 (лучше - 4-мя) уартами и, желательно, RTC ?

     

    Кстати, насколько софт-уарты на распберри работоспособны? Мнения в интернетах расходятся...

  7. On 11/29/2019 at 3:12 PM, Basil13 said:

    будет выделяться I^2*R

    Похоже на правду.

    Единственное послабление - драйвер не будет держать dominant бесконечно, и достаточно быстро передатчик перейдёт в состояние ошибки.

  8. К сожалению, на таком уровне понимания - закрыть куб, открыть ютуб, посмотреть 100500 роликов "стм+куб - моргаем светодиодиком". Когда доберётесь до роликов "осваиваем SPI", и поймёте, что там делают, можно возвращаться к имеющемуся кан-контроллеру.

    Не, можно, конечно, вбить в гугл "STM32 + MCP2551" (это вы тоже не делали?). Проблема только в том, что без понимания, что именно происходит, повторить даже пошаговую инструкцию будет сложно...

  9. 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)" у местных жителей может и приступ случиться. Хорошо, если приступ хохота...

  10. 3 hours ago, genseq said:

    FPGA вообще не имеют отношения к обсуждаемому вопросу

    Имеют, опосредственное. В тот момент, когда у вас появится много-много данных, и их надо будет затолкать в компьютер, а перед этим как-то предобработать, FPGA может пригодиться.

    Я, правда, не понял, откуда в этой штуковине (даже на 100+ каналов) МНОГО данных... Там характерная скорость изменения сигнала какая предполагается? Я не биолог совсем, но мне всегда казалось, что все биохимические процессы идут довольно медленно...

     

    PS а за статьи вам спасибо! Половина слов непонятна, но краем глаза посмотреть, какие сейчас космические корабли бороздят просторы биоинженерии, было очень интересно.

  11. 3 hours ago, Stolbov said:

    Я всего лишь увеличил паузу после DDRE |= (1<<PORTE5);

    Какое-то странное лечение. По-хорошему, никаких пауз не надо. Если паузу убрать, переходник в компьютер отправленные байты видит?

    Вольтметр как запитан? Может, он просто запускается эти 1-2 секунды, а вы ему постоянно питание дёргаете?

     

    3 hours ago, Stolbov said:

    Сейчас разбираюсь, почему не происходит отсылка данных из условия

    На первый взгляд, правильно всё написано...

    Предложения по отладке:

    - в прерывание на приём байта добавьте пересылку его в соседний порт. Скорость этого UART1 лучше поставить побольше (например, 115200), чтоб не мешал своими задержками.

    - также можно через некоторый промежуток (например, через секунду) после обмена с вольтметром отправить в этот UART1 всю интересующую информацию -  в первую очередь, IndexStart / IndexEnd.

    - также ооочень рекомендую отладчик. Называется AVR JTAG ICE. Оригинал стоит каких-то неразумных, на мой взгляд, денег, но китайские клоны продаются за копейки (порядка 200 рублей). Правда, как работают клоны, я не знаю. "Пошагать" по программе у вас не получится (т.к. задействован вольтметр, а он ждать не будет), но посмотреть в любой момент значения переменных, да и за несколько секунд обновить программу - это очень упрощает работу.

  12. 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 на ПК 
    		}
    	}
  13. On 10/16/2019 at 7:07 AM, GeorgK said:

    Там разве не по адресам-портам в том числе исходящим пакеты определяются?

    Там какая-то наркомания с тем, куда в данный текущий момент указывает 

    struct uip_udp_conn *uip_udp_conn;
     

    То есть я понимаю, конечно, что всё для фронта, всё для побе... лишь бы в мелкий 8-битник влезло, но с современными объемами памяти лучше использовать какие-то другие стеки, которые не позволят так легко стрелять себе в ногу.

  14. 11 minutes ago, Arlleex said:

    А TXE - как раз по окончанию передачи из сдвигового при отсутствии готовых к отправке в регистре хранения UDR

    TXC. TXCIE - это разрешение соотв. прерывания, только что в памяти освежал. Но тут вопрос чуть другой - что сработает первым - опрос в while'е этого флажка, или прерывание с автоматическим его сбросом. Как-то не выглядит надёжно (хотя... никогда не интересовался временем реакции контроллера прерываний атмеги. Может быть, там с запасом... :-) ).

  15. 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 сразу можно регистры устройства читать, или при появлении его в сети его надо как-то сконфигурировать? Может, дополнительно ещё и с этим проблемы?

  16. 19 minutes ago, Mysteo said:

    Я правильно понимаю, что здесь нужно применять FFT ? Или 16 полосовых фильтров городить ?

    У меня всё никак не дойдут руки сделать что-нибудь полезное в плане ЦОС (на работе не нужно, а дома других забот хватает), но для этой задачи я бы смотрел в сторону работ дядьки Гёрцеля.

×
×
  • Создать...