Jump to content

    

Krik99

Участник
  • Content Count

    55
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Krik99

  • Rank
    Участник
  • Birthday 09/29/1992

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array

Recent Profile Visitors

893 profile views
  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 к земле), то необходима разработка нового устройства, так как изменить нужно все.