Jump to content
    

Krik99

Участник
  • Posts

    55
  • Joined

  • Last visited

Everything posted by Krik99


  1. Добрый день. Есть такая проблема с PN532 в режиме i2c. I2c подключен 30-40см от МК. Линии i2c подтянуты 2,7К к +3.3В. На стороне PN532 линии подключены через 150ом после чего стоят конденсаторы в 100пФ (пробовал и без них). Использую SDA, SCL, INT для управления, линия reset не разведена. При попытке включать эл. клапан на питание 24в некоторые пакеты не доходят, но при определенных обстоятельствах зависает шина в состоянии SCL в лог.0 и держит ее именно PN532. Касание пальцем линий SDA приводит к тому же эффекту. Оживить устройство естественно не получается кроме как дернуть ресет на стороне PN532 и все запускается. Что интересно при создании тех же помех и удержании МК в паузе в отладчике PN532 не реагирует вовсе и после отпускания паузы в отладчике все заводится с первого раза. Код крутится в стейт машине и первым шагом идет отправка команды вывода PN532 из спящего режима. Подскажите может есть какие-то особенности в реализации I2C интерфейса для PN532? Блок схема стейт машины:
  2. Так я же и писал "андроид подобных", я про интерфейсы которые заточены под сенсорные дисплеи типа Kivy (видом как стандартный интерфейс андроида) но для Linux и желательно Си+.
  3. Графическими интерфейсами не занимаюсь, и интересно как здесь обстоят дела в 2019г с Qt и его лицензиями. Куда стоит смотреть для андроид подобных интерфейсов заточеных под тачскрин и лицензией MIT или подобной?
  4. Полистал sdk и не осталось какого-то впечатления черного ящика, как от опыта с esp8266. Только вот если включить OTA, то сразу отрубается одно ядро. Черный ящик пока только с BT. Правильно ли я понимаю, что на сегодня нужен wifi или нет, но чип очень заманчив в плане цена/мощность даже по сравнению с stm32f107, с его кучей переферии, подержкой апаратного шифрования. А проблему с числом выводов можно решить i2c расширителями. Или это только мне так кажеться? Немного пугают возможные дыры в загрузчике.
  5. Конкретный контроллер Stm32f103rbt6. Но на сколько я понял с AN2824 i2c у них у всех глючный. Ок, как будет доступ к осциллографу сделаю скрины
  6. А какие самые бюджетные и популярные arm с Mac на борту? И как быть с реализацией ssl без крипто модуля? Я вот тоже присматривался к ST и выходит дороже с внешней физикой чем wiznet. П. С. Тут вспоминали о esp32 и что о ней думаете в серьёзных проектах? Тоже нужна физика, но из плюсов есть криптография на аппаратном уровне, BLE4.0 и два ядра которые пока криво работают. У меня был негативный опыт с кривой sdk у esp8266, но у esp32 все вроде иначе собирается.
  7. Добрый день. Есть утройство у которого на шине i2c висит 3 слейва, все в приделах одной платы. Часы, ээпром и дисплей. Так вот, основная часть логики завязана с роботой еепром. Программа довольно много обращается к еепром и иногда бывают сбои. Пишу код под Coide и готового решения AN2824 для него я не нашел. Собственно проблема в том, что если читаю 1 или 2 байта читается какой-то мусор, а если больше 3 то и вовсе виснет еепром и шина всегда занята, даже если перезагружаю i2c на контроллере. С записью проблем нет. DMA не использую так как приходится много читать для поиска пустого блока, проверку делаю "на лету" без выгрузки всего муссора с eeprom в озу. Второй день уже не могу понять в чем проблема, может чего уже не замечаю, вот код. unsigned char I2C_Read_git(I2C_TypeDef* I2Cx, unsigned char SlaveAddress, unsigned char *buf, unsigned int nbyte){ //I2C2->CR2 |= I2C_IT_ERR; //interrupts for errors // Wait for idle I2C interface if(wait_for(FLAG, I2C_FLAG_BUSY) == 0) return I2CERR; //go out with timeout error // Enable Acknowledgement, clear POS flag I2C_AcknowledgeConfig(I2Cx, ENABLE); I2C_NACKPositionConfig(I2Cx, I2C_NACKPosition_Current); // Intiate Start Sequence (wait for EV5 I2C_GenerateSTART(I2Cx, ENABLE); if(wait_for(EVENT, I2C_EVENT_MASTER_MODE_SELECT) == 0) return I2CERR; //go out with timeout error // Send Address I2C_Send7bitAddress(I2Cx, SlaveAddress, I2C_Direction_Receiver); // EV6 if(wait_for(FLAG, I2C_FLAG_ADDR) == 0) return I2CERR; //go out with timeout error if(nbyte == 1){ // Clear Ack bit I2C_AcknowledgeConfig(I2Cx, DISABLE); // EV6_1 -- must be atomic -- Clear ADDR, generate STOP __disable_irq(); (void) I2Cx->SR2; I2C_GenerateSTOP(I2Cx,ENABLE); __enable_irq(); // Receive data EV7 if(wait_for(FLAG, I2C_FLAG_RXNE) == 0) return I2CERR; //go out with timeout error *buf++ = I2C_ReceiveData(I2Cx); }else if(nbyte == 2){ // Set POS flag I2C_NACKPositionConfig(I2Cx, I2C_NACKPosition_Next); // EV6_1 -- must be atomic and in this order __disable_irq(); (void) I2Cx->SR2; // Clear ADDR flag I2C_AcknowledgeConfig(I2Cx, DISABLE); // Clear Ack bit __enable_irq(); // EV7_3 -- Wait for BTF, program stop, read data twice if(wait_for(FLAG, I2C_FLAG_BTF) == 0) return I2CERR; //go out with timeout error __disable_irq(); I2C_GenerateSTOP(I2Cx,ENABLE); *buf++ = I2C_ReceiveData(I2Cx); __enable_irq(); *buf++ = I2C_ReceiveData(I2Cx); I2C_NACKPositionConfig(I2Cx, I2C_NACKPosition_Current); }else{ (void) I2Cx->SR2; // Clear ADDR flag while (nbyte-- != 3){ // EV7 -- cannot guarantee 1 transfer completion time, wait for BTF // instead of RXNE if(wait_for(FLAG, I2C_FLAG_BTF) == 0) return I2CERR; //go out with timeout error *buf++ = I2C_ReceiveData(I2Cx); } if(wait_for(FLAG, I2C_FLAG_BTF) == 0) return I2CERR; //go out with timeout error // EV7_2 -- Figure 1 has an error, doesn't read N-2 ! I2C_AcknowledgeConfig(I2Cx, DISABLE); // clear ack bit __disable_irq(); I2C_GenerateSTOP(I2Cx,ENABLE); // program stop *buf++ = I2C_ReceiveData(I2Cx); // receive byte N-2 __enable_irq(); // wait for byte N if(wait_for(EVENT, I2C_EVENT_MASTER_BYTE_RECEIVED) == 0) return I2CERR; //go out with timeout error *buf++ = I2C_ReceiveData(I2Cx); // receive byte N-1 nbyte = 0; } // Wait for stop if(wait_for(FLAG, I2C_FLAG_STOPF) == 0) return I2CERR; //go out with timeout error I2C_AcknowledgeConfig(I2Cx, ENABLE); return I2COK; } unsigned char EEPROM_Read(unsigned int addr, unsigned char *data, unsigned char len){ unsigned char y=0; // While the bus is busy if(wait_for(FLAG, I2C_FLAG_BUSY) == 0) return I2CERR; //go out with timeout error I2C_AcknowledgeConfig(I2C2, ENABLE); // Generate the Start Condition I2C_GenerateSTART(I2C2, ENABLE); if(wait_for(EVENT, I2C_EVENT_MASTER_MODE_SELECT) == 0) return I2CERR; //go out with timeout error I2C_Send7bitAddress(I2C2, 0xA0, I2C_Direction_Transmitter); //send adress chip if(wait_for(EVENT, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED) == 0) return I2CERR; //go out with timeout error I2C_SendData(I2C2, addr>>8); //send upper bit if(wait_for(EVENT, I2C_EVENT_MASTER_BYTE_TRANSMITTED) == 0) return I2CERR; //go out with timeout error I2C_SendData(I2C2, addr & 0xFF); //send lower bit if(wait_for(EVENT, I2C_EVENT_MASTER_BYTE_TRANSMITTED) == 0) return I2CERR; //go out with timeout error I2C_GenerateSTOP(I2C2, ENABLE); if(wait_for(FLAG, I2C_FLAG_BUSY) == 0) return I2CERR; //go out with timeout error y=I2C_Read_git(I2C2, 0xA0, data, len); return y; } А вот код который работает, но здесь нет всех замечаний которые были написаны в AN2824 о глючном i2c в stm32f1: unsigned char EEPROM_Read(unsigned int addr, unsigned char *data, unsigned char len){ unsigned int i; // While the bus is busy if(wait_for(FLAG, I2C_FLAG_BUSY) == 0) return I2CERR; //go out with timeout error I2C_AcknowledgeConfig(I2C2, ENABLE); // Generate the Start Condition I2C_GenerateSTART(I2C2, ENABLE); if(wait_for(EVENT, I2C_EVENT_MASTER_MODE_SELECT) == 0) return I2CERR; //go out with timeout error I2C_Send7bitAddress(I2C2, 0xA0, I2C_Direction_Transmitter); //send adress chip if(wait_for(EVENT, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED) == 0) return I2CERR; //go out with timeout error I2C_SendData(I2C2, addr>>8); //send upper bit if(wait_for(EVENT, I2C_EVENT_MASTER_BYTE_TRANSMITTED) == 0) return I2CERR; //go out with timeout error I2C_SendData(I2C2, addr & 0xFF); //send lower bit if(wait_for(EVENT, I2C_EVENT_MASTER_BYTE_TRANSMITTED) == 0) return I2CERR; //go out with timeout error I2C_GenerateSTOP(I2C2, ENABLE); if(wait_for(FLAG, I2C_FLAG_BUSY) == 0) return I2CERR; //go out with timeout error I2C_GenerateSTART(I2C2, ENABLE); // Generate the Start Condition if(wait_for(EVENT, I2C_EVENT_MASTER_MODE_SELECT) == 0) return I2CERR; //go out with timeout error I2C_Send7bitAddress(I2C2, 0xA0, I2C_Direction_Receiver); //send adress chip if(wait_for(EVENT, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED) == 0) return I2CERR; //go out with timeout error for(i = 0; i<len; i++){ if(i<len-1){ if(wait_for(EVENT, I2C_EVENT_MASTER_BYTE_RECEIVED) == 0) return I2CERR; //go out with timeout error }else{ I2C_AcknowledgeConfig(I2C2, DISABLE); // Prepare an NACK for the next data received if(wait_for(EVENT, I2C_EVENT_MASTER_BYTE_RECEIVED) == 0) return I2CERR; //go out with timeout error I2C_GenerateSTOP(I2C2, ENABLE); } *data = I2C_ReceiveData(I2C2); data++; } if(wait_for(FLAG,I2C_FLAG_STOPF)==0) return I2CERR; I2C_AcknowledgeConfig(I2C2, ENABLE); //Delay_ms(5); return I2COK; } За ранние спасибо.
  8. Скачал gcc-linaro-4.9-2016.02-x86_64_arm-linux-gnueabihf.tar.xz Сделал все как написано здесь http://linux-sunxi.org/Toolchain#Linaro_toolchain Но что-то не установилось. При выполнении выдает ошибку Нет ли более подробной инструкции как правильно установить Linaro ?
  9. Добрый день. Allwinner A13 это мой первый SoC. Сразу говорю что в linux сильно новичок. Откопал плату от старого планшета и решил чем не отладочная пата. Начал с малого, после долгих ковыряний получилось собрать uBoot и успешно загрузится с карты. Но вот вопрос. Не могу собрать sunxi 3.4 Все мануалы были написаны давно, а уже много чего изменилось. Работаю под Linux Mint 19 Tara и здесь установлен gcc (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0 Вот при попытке скомпилировать ядро ругается что нет библиотек. Установить gcc 3.2 у меня не вышло :( Вот уже не знаю куда двигаться. Подскажите как скомпилировать ядро под моей системой?
  10. Именно так все и собрано, напрямую к МК. :rolleyes: Тоесть обычные буферы помогают в этом случае? Тогда после оптопар желательно тоже ставить что-то типа тригеров Шмидта или это лишнее? PS Если все это собрать на стандартной схеме, один конец кнопки к земле, второй через RC цепь к МК это будет работать, или всеже нужно ставить буфер? Есть вариант с подключением на общий провод +24в и снимать через стабилитрон сигнал?
  11. Когда впервые увидел эту конструкцию, тоже засомнивался. Суть в чем, клавиатуры в стандартном понимании нет, есть 8 врезаных в щитовую кнопок, которые уже подключены между собой по схеме матричной клавиатуры. При этом все собрано обычным монтажным проводом, а из защиты входов подключены резисторы в 5к и на землю.
  12. Дисплей установлен на плате, а матричная клавиатура вынесена на панель щитовой ~30см. Нет на сколько я помню там сделана отдельная колодка на плате и спецально для его питания 7812. Датчик имеет у себя на борту МК и не зависает.
  13. А как тогда с внешними eeprom и rtc быть? Датчик питается от наплатного 7812 и выдает колисчетво импульсов по одному сигнальному проводу (длина импульса ~50мс). Всё это в 15 см от платы. Есть 7-ми сегментный индикатор и матричная клавиатура. Из входов\выходов, это все. Тоесть если у меня выход это нормально открытая група контактов реле, то мне нужно ставить кроме предохранителя еще и варистор на этот выход?
  14. ОК. Я сейчас всех уже подзапутал и сам тоже. Но надо было начать с этого. Есть щитовая в котоой установлен PLC и вся силовая часть (реле, пускатели) и тут же стоит ИБП который питает те самые МК. К щитовой подходит стандартный силовой кабель на 3 фазы. Земля ПЛК (у него внутри БП) и ИБП соеденены на землю щита. Передача данных и питания осуществляется разными проводами. При чем от этого же питания запитаны промышленные датчики на стороне МК, которые из защиты имеют только TVS и дросель. И в итоге МК зависает намертво, а датчикам норм. В чем вопрос. На сколько будет эфективна гальваническая развязка 485 при общем питании устройств? Может идея с питанием и не очень, но B&R в своих ПЛК используют схему с общим БП без проблем. (синий и оранжевый это типа "А" и "В" линии) При этом проблемма именно не с потерей данных, а именно с зависанием МК. Если с матричной клавиатурой норм (смущает что линии МК обвязаны только резисторами на 4к7 к земле), то необходима разработка нового устройства, так как изменить нужно все.
  15. 1. Блок питания один для 3-х плат и он импульсный. 2. Клавиатура работает без прерываний по внешнему сигналу, хотя обработка присходит в прерывании таймера развертки 7-ми сегметного дисплея. Клавиатура скрещена с дисплеем. 3. Плата в металическом щите, типа мелкого электрошкафа. 4. Ситуация повторяется но спровацировать зависание очень сложно. 5. Пишу на Си. Это мне нужно во все регистры разрешения прерываний загнать состояние "прерывания запрещены"? Я правельно понял, что TVS диод очень эфективен против наносекундных помех с большой амплитудой? На той плате использована схема драйвера rs485 порта со смещением и без TVS диодов
  16. Я правельно понимаю что TVS диоды должны быть отдельно от платы? Такая схема с TVS есть на стороне PLC. И гальваническая развязка нужна на каждом устройстве подключенном к линии 485? Тогда что делать с тем что несколько устройств питаются от одного БП и фактически развязав линию RS485 сохраняем общую землю через питание. На сколько помню там использовали кабель специально предназначеный для rs485. Что делать с экраном кабеля?
  17. Так в этом и проблема. Я вот сам столкнулся с устройством на пик18, которое просто соеденено по rs485 с PLC. Так в PLC RS485 вообще гальванически развязан. Соеденено все это витой парой в экране, на плату приходит только 2 провода сигнала, экран подключен к заземлению на стороне PLC. И вот когда запускаются 3-х фазные двигатели и мощные потребители мк зависает, а со сторожевым таймером все ребутится. Сам мк не включает нагрузок вообще. Смущает только включение управляюших кнопок матрицой на растоянии в 30см от платы. Читал я рекомендации от производителя по снижению тактовой частоты, меньше использовать прерывания, но там без прерываний никак, включены все таймеры и uart. Значит у STM32 выводы отладки необходимо подтягивать к +3.3В ? И какие грубые ошибки можно допустить в программе, может я чего не знаю?
  18. Если коротко, то есть лампочка кторую включает выключатель, вся эта цепь на 220в, и вот мне нужно следить включена лампочка или нет. Вопроссы возникли после прочтения книги, может конечно это мой английский, или отсутствие опыта. Но хотябы грубо на пальцах можете сказать? И насколько мои выводы с 1-11 правельны или же я что-то неправельно понял?
  19. Добрый день. Начал я тут разробатыать устройство, которое вроде как должно подходить под стандарт промышленной электроники (3-ч фазные двигатели, эл. магнитные клапана и т.д.). Сердцем всего этого должен быть МК. Программу написать не проблема, но вот погуглив увидел что у многих разработчиков возникает проблемма с зависанием МК. Сам такое наблюдал в устройстве, где через делитель снималось с силовой цепи 220в сигнал контроля. Так вот на 5-20 раз особенно когда быстро переключал можно было перезагрузить МК. Решил все это конденсатором паралельно контактам кнопки, но так и не понял почему в стеральной машине ведётся контроль подобным образом после контактов реле и все нормально. Мое устройство питается от 24В (от этих 24В включаются клапана и пускатели). На входе платы стоит TVS диод (или варистор) и дросель с двумя обмотками. Скоростных линий не предвидится, максимум i2c. Имеется rs485. Так вот погуглив наткнулся на книгу Г. Отта И вот сообственно хочу спросить вас, правильно ли я все понял. И так начнем: 1. Норамльной помехоустойчивости нереально добится на односторонней плате 2. Блокировочный конденсатор нужно ставить как можно ближе к выводам микросхем 3. Кварц нужно разводить согласно рекомендациям производителя 4. На двухсторонних платах одна их сторон должна быть землей (либо в виде сетки с мелкими ячейками) 5. На длинных и шумных линиях (типо катушка клапана на 24в) нужно ставить феритовое кольцо(мелкое такое) или это только на входные линии? 6. Под линиями питания на обратной стороне обязательно должна быть земля 7. От наносекундных помех не спасают даже оптотроны, но помагают резисторы в разрыв порта ввода-вывода в гашении помех 8. Необходимо использовать большое количество переходных отверстий между землеными полигонами 9. Пустые места должны быть заполнены земляными полигонами 10. Не создовать земляные петли вокруг платы 11. Индуктивность проводников питания должна быть минимальна(широкие проводники с большим количеством переходных отверстий) Ещё возникли вопросы: 1. Как я понял земляной слой разрывать можно, но над разрывами нельзя пропускать линии питания? 2. Разводить питание можно цепочкой(DC-DC -> микроконтроллер -> часы -> логика и т.д.) или нужны отдльные линии от каждой микросхемы? 3. С точки зрения помех, если мне необходимо включать катушки клапанов на растоянии до 1.5м ,нужно ли использовать реле, или всёже нужно перейти на MOSFET? 4. Немного не понял с чистой и грязной землей, тоесть что куда подключать? 5. Что если земленой полигон получился с обеих сторон? 6. Нужно ли соединять минус питания 24в с заземлением щита, так как в книге пишут что часто земля является источником помех? 7. Есть ли смысл использования изолированого острова земли (для микроконтроллера), которая соединена с остальной землей через фиритовое кольцо либо тонкую дорожку? 8. Если входные\выходные кабеля являются источниками помех (common-mode noise), то зачем их фильтры подключать к "чистой" земле, но не к цифровой? При чем именно эта чистая земля должна быть подключена к корпусу устройства. Это подключение в любом случае или если корпус заземлен? И нужна ли такая чистая земля при использовании оптопар? 9. И как быть с rs485? По входным линиям там стоят TVS диоды. Но у 485 есть 3 провода и еще экран. Куда и как подключать экран, если сами драйвера и их питания планируется подключить через изолированый dc-dc и оптопары? При чем как я понял из книги, TVS диоды сигнальных линий должны быть соеденены именно на корпус устройства.
  20. С питанием разобрался, спасибо. Проблемы и небыло, просто хочу поправить все недостатки конструкции до того как вытравлю платы и соберу устройство. Понял что для 24в неплохо подходит старый LM2596 с его 40в на входе. Вопрос с комутацией мощной нагрузки. Часто пишут что у разработчиков возникает проблемма что МК виснет при включении нагрузки мощным пускателем, и связано это именно с нагрузкой, а не с катушкой (наличие диода паралельно обмотке). Сам видел такое устройство. И тут в ход идут конденсаторы для искрогашения и т.п., хотя как я понял это лишь костыль, так как в том-же Siemens Logo все намного проще(по входам даже оптопар нет), и все стабильно работает. Спрашиваю кто работал с промышленной электроникой, на что нужно обратить особое внимания, учитывая что у меня на одной плате стоит МК с релейными выходами? БП с одним питанием, максимум что могу пустить напряжение с изолированого DC-DC на засветку оптопар.
  21. В такой схеме можно увеличить ток резистором R2 или поставить R2 перед R1. В схеме с подтяжкой к 3.3в тоже можно увеличить ток, но это будет нагрузка на стабилизатор 3.3в. я правильно понимаю? Еще есть вопрос с землей. В щитовой есть заземление, я так понимаю моя земля 24в и цифровая земля не должны соединятся с заземлением? Так стоит или нет?
  22. Понял решение, но не понял для чего используется именно "большой" ток. Можете объяснить на пальцах? Аналоговый датчик это датчик уровня с набором резисторов, так что точность там не сильно влияет, так как значения фиксированы. Тут пишут что с dc/dc сложности возникают, так может смотреть в сторону линейных преобразователей типа кренки?
  23. фильтр подразумевает LC цепь расчитаную в программе? Про ложные срабатывания это я знаю, а вот так и не понял какой оптимальный вариант для кнопок управления, которые вынесены за приделы платы. Типы включений кнопок к МК я знаю, а вот в "моем" случае интересно услышать совет. Либо кнопку на землю и подтяжка 10к к 3.3в или на кнопку 24 или 12в и через стабилитрон + резистор + конденсатор на землю? Видел промышленные PLC и знаю про опторазвязку от датчиков на дальних растояниях. При этом можно ли на датчики пускать 24в от основного БП? И вот вопрос, если датчик удален и нужно снимать аналоговый сигнал(грубо говоря потенциометр) как быть здесь?
  24. С фильтром спасибо учту. Тогда ещё вопрос. Я так понял что DC-DC должен справится со всеми помехами и не пропустить их на питание контроллера. Возможно ли запитать от данного БП в 24в несколько электромагнитных клапанов? Планировалось использовать реле, но если это не создаст глюков для МК можно включать через mosfet И еще по поводу выносных кнопок, опять вопрос в стабильности и принятии помех, если кнопка находится 20см от платы, на кнопку нужно подавать 24в~12в и снимать через стабилитрон в 3,3в сигнал на МК, или можно стандартно на кнопку землю, а подтяжку к 3.3в? ПС До этого устройства ограничивался размерами платы.
×
×
  • Create New...