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

    

amischuk@bk.ru

Участник
  • Публикаций

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

  • Посещение

Репутация

0 Обычный

Информация о amischuk@bk.ru

  • Звание
    Участник

Посетители профиля

647 просмотров профиля
  1. PIC32MZ Проблемы. RS485 <-> UART

    Здравствуйте, Ниже приведён код чтения байта с терминала компьютера по RS485 и вывод его обратно. Между блоком чтения, переводом микросхемы в режим передачи требуется задержка. При передаче цикл while(U1STAbits.TRMT == 0) проверяет корректное завершение передачи и подобная задержка не требуется. Я не нашёл каких-то флагов, по аналогии с U1STAbits.TRMT чтобы проверять завершение приёма байта. Какой бит проверять что приёмник свободен, чтобы убрать задержку ? LATD &= 0xFFFFF7FF; // Перевести микросхему UART<->RS485 в режим приёма. while (U1STAbits.URXDA == 0); // Ждем байт для приёма данных. ReceivedChar = U1RXREG; Delay10uS(10); // Без данной задержки символы не выводятся или отображаются не корректно. LATD |= 0x800; // Перевести микросхему UART<->RS485 в режим передачи. while (U1STAbits.UTXBF == 1); Ждем пока UART будет готов передать данные. U1TXREG = ReceivedChar ; while(U1STAbits.TRMT == 0); Ждём завершения полной передачи данных. Исходный текст: rs485.c
  2. PIC32MZ - Проблемы. I2C

    Вопрос можно считать закрытым. После внесения указанных ниже изменений, I2C работает стабильно. 1. Добавлено адаптивное увеличение времени задержки между следующими друг за другом командами записи по шине i2c. 2. При возникновении ошибок на шине I2C1STATbits.BCL выполняется повторная инициализация модуля i2c, которая включает в себя сброс SDA/SCL в ноль. Исходные тексты записи I2C в пот PCF8574: http://tesla.zabotavdome.ru/pic32/src/pic32mz_i2c.X.zip Принципиальная схема прототипа: http://tesla.zabotavdome.ru/pic32.html Всем успехов!
  3. PIC32MZ - Проблемы. I2C

    Да. Всё верно. Достаточно дернуть шину SCL. Спасибо! Попробую!!
  4. PIC32MZ - Проблемы. I2C

    I2C1CONbits.PEN = 1; while(I2C1CONbits.PEN); Этими командами всегда завершаю передача данных, но увы, команда завершается корректно, но не поднимает прижатую к земле шину данных.
  5. PIC32MZ - Проблемы. I2C

    Вход в повторный цикл передачи данных пока прижата к земле линией SDA - ACK периферии, даёт сбой в работе таймера, PIC32MZ не выходит из цикла - while( TMR2 < (10000000/10000)); Поэтому пока оставил проверки статуса в бесконечном цикле. Корректная инициализация модуля I2C возможна если сбросить SDA/SCL линии в нуль. При отладке, в момент "ошибки", достаточно SСL посадить на землю, затем её отпустить, работа будет продолжена. Но пока включен I2C1 модуль I2C1CONbits.I2CEN = 1, доступа к значениям регистра LATD RD9/RD10 у меня нет. Полностью проблему можно решить, анализируя линии SDA/SCL по завершению приёма или передачи данных. void I2C1Init(void) { I2C1CONbits.I2CEN = 0; //Disable until everything set up is complete TRISD &= 0xFFFFF9FF; LATD &= 0xFFFFF9FF; I2C1BRG = 0x220; // I2CBRG = [1/(2*Fsck) - PGD]*Pblck - 2 I2C1CONbits.SIDL = ENABLED; I2C1CONbits.SCLREL = DISABLED; I2C1CONbits.STRICT = DISABLED; I2C1CONbits.A10M = DISABLED; //7-bit address mode I2C1CONbits.DISSLW = DISABLED; I2C1CONbits.SMEN = DISABLED; I2C1CONbits.GCEN = DISABLED; I2C1CONbits.ACKDT = DISABLED; //send NACK when requested //Clearing the recieve and transmit buffers I2C1RCV = 0x0000; I2C1TRN = 0x0000; I2C1CONbits.I2CEN = 1; //Enable I2C1 module, pins will be taken care of by module; no need for peripheral pin select //IEC1bits.MI2C1IE = 1; //Enable I2C master interrupt if you want to use interrupts }
  6. PIC32MZ - Проблемы. I2C

    Проблема c I2C обрела некоторую ясность. Вначале передаётся адрес периферийного устройства, следом данные. rc = I2C1Send(((0x21 << 1) | I2C_WRITE)); rc = I2C1Send(pcfByte); Две команды идут одна за другой. После передачи адреса устройства, периферия выдаёт ASK, прижимает шину данных к земле. Модуль обработки I2C процессора это понял и отработал корректно, сбросив и установив необходимые флаги, программа продолжила выполнение. С этого момента возникает проблема. Процессор быстрый и он проваливается в цикл передачи следующего байта не дождавшись пока периферийное устройство отпустит шину данных. У аппаратуры модуля I2C контроллера полностью сносит голову когда он видит на шине данных ноль, при этом шина SCL поднята. В том числе отмечается и отказы в работе таймера. Пока решение проблемы выглядит так (двое суток без проблем): Delay10uS(1); rc = I2C1Send(((0x21 << 1) | I2C_WRITE)); Delay10uS(10); rc = I2C1Send(pcfByte); Но по хорошему надо дождаться пока периферийное устройство отпустит шину данных. Или самому анализировать линию данных, но в режиме I2C доступ к шине SDA вероятно будет заблокирован. Delay10uS(10) - десять раз по десять uS void Delay10uS(int num) { T2CON = 0x8000; //enable TMR2 with 1:1 prescaler while (num > 0) //wait for specified number of multiples of 10 microseconds { TMR2 = 0; while( TMR2 < (10000000/10000)); //wait 10 microseconds num = num-1; } }
  7. PIC32MZ - Проблемы. I2C

  8. PIC32MZ - Проблемы. I2C

    Частота на шине SCL 100кГц, но пробовал менять вплоть до 40кГц, меняя значение I2C1BRG. Питание 3.3V, пробовал подтягивающие резисторы от 1,8 ком., сейчас 4.7. Запись идет через преобразователь уровня на PCF8574. Данные по приведённому коду записываются в регистр корректно. Цикл отрабатывает 15-30 секунд, потом возникает ситуация, что шина данных SDA не отпущена. Моя версия - видимо PCF8574 что-то не отрабатывает и контроллер жизнерадостно подвисает на цикле ожидания окончания передачи. Или контроллер не отправляет должный сигнал.
  9. PIC32MZ - Проблемы. I2C

    Работает не стабильно. Как правило зависает на передаче байта данных I2C1TRN = pcfByte, не выходит из следующего за командой цикла while(I2C1STATbits.TRSTAT) . Шина данных SDA уходит в "ноль" там и остаётся до выключения питания. Частота шины 100кГц. Никто не сталкивался с проблемой? I2C1TRN = ((0x21 << 1) | I2C_WRITE); while(I2C1STATbits.TRSTAT) { ; } // wait for the transmission to finish if(!I2C1STATbits.ACKSTAT) { // if this is high, slave has not acknowledged I2C1TRN = pcfByte; while(I2C1STATbits.TRSTAT) { ; } // wait for the transmission to finish if(!I2C1STATbits.ACKSTAT) { // if this is high, slave has not acknowledged I2C1CONbits.PEN = 1; // comm is complete and master relinquishes bus while(I2C1CONbits.PEN) { ; } continue; } }
  10. PIC32MZ - FPLLRNG = 7 does not match any valid value

    Вопрос более не актуален. При формировании файла конфигурации через утилиту MPLAB Set Configuration Bits, последняя для микроконтроллера PIC32MZ0512EFE064 формирует адреса DEVCFG0, DEVCFG1 как 1FC0FFCC, 1FC0_FFC8 и т.д. В то время как должны быть BFC0FFCC, BFC0_FFC8 и т.д Кому интересно, схему, программный код можно забрать по ссылке: http://tesla.zabotavdome.ru/pic32.html
  11. PIC32MZ - FPLLRNG = 7 does not match any valid value

    На отладочной схеме, при попытке создании приложения на C/ASM , без использования harmony, проект production в микроконтроллер загружается но не работоспособен. Подозреваю что виной всему ошибки, приведённые ниже, но информации по ним нет. Изменить значения FPLLRNG и DMTCNT через Set Configuration bits ни к чему не приводят, ошибка та же. BUILD SUCCESSFUL (total time: 458ms) Loading code from C:/MPLABXProjects/pic32mz_simple.X/dist/default/production/pic32mz_simple.X.production.hex... Configuration Bits: address 0x1FC0FFC4: FPLLRNG = 7 does not match any valid value in the device database. Setting to the default value. Configuration Bits: address 0x1FC0FFC8: DMTCNT = 31 does not match any valid value in the device database. Setting to the default value. Loading completed Буду признателен за помощь.
  12. GPS/GNS на ML8088 ML8089

    Цитата(Владимир О. @ Apr 28 2018, 12:07) Добрый день! Схема "официальной" отладочной платы для модулей ML8088 и ML8089 есть на сайте НАВИА http://naviaglonass.ru/wp-content/uploads/...vodsto_v2.0.pdf Трассировка платы предоставляется по запросу. Также могут быть предоставлены материалы по плате ML8089+DR-DEMO, которая поддерживает инерциальную навигацию Dead Reckoning. Всё верно. Официальная отладочная плата есть. Год назад за консультациями по трассировке ВЧ части в НАВИА обращался - выстрел в пустоту. Может сейчас что поменялось.
  13. Цитата(Herz @ Apr 15 2018, 20:08) Такие ответы приходят, в основном, когда автор задаёт либо слишком общие вопросы, либо сам ещё не решил, что ему нужно, либо заходит, как говорится, совсем уж не с того конца... Полезность таких ответов сразу оценить сложно. Иногда они выглядят даже абсурдными. Но бывают очень ценными, ибо позволяют выйти на нужную дорогу или взглянуть на проблему под правильным углом. Чего самостоятельно, без "пинка", сделать по разным причинам не удаётся. Добросовестно и ответственно, полно и с примерами, раскрыв мой вопрос, Вы помогаете не только мне, но и всем кто столкнулся или столкнётся с похожей проблемой. Тем самым Вы транслируете свои знания и опыт в мир. Полагаю, эгоцентрическая модель мира, в которой Вы привыкли существовать не позволяет Вам это понять и сделать. Вы рассматриваете данную, очень большую и кропотливую работу, как метание бисера перед свиньями, подметил один из "адвокатов". Вопросы могут быть бестолковыми, вопрошающие могут быть ничтожны для Вас. Но всё определено целью, которое определяет Ваше присутствие на форуме. Не у знатоков должны преференции, а у вопрошающих. Как только будет так, Вы получите положительную энергетику, через уважение и прочую атрибутику. Если для Вас это имеет смысл.
  14. Цитата(Herz @ Apr 15 2018, 20:55) Я подозреваю, причина этого проста и даже банальна: на одного специалиста по силовой электронике приходится едва ли не сотня программистов. Которые всё уже знают наперёд, опыт для них - лишний балласт. Но, давайте не усугублять... А почему Вы решили что должно быть наоборот? Откровение снизошло? Радуйтесь, будет наоборот - спишут. Упоминал. Знать на перёд - это склад ума и качества системного аналитика, как бы тщательно Вы на себя это не примеряли, это не Ваше. Умеете рассчитывать по справочникам дросселя - считайте на здоровье. Силовую электронику оставьте коллективам на предприятиях. Будьте спокойны. Там с силовой электроникой, всё в полном порядке.
  15. Цитата(Herz @ Apr 15 2018, 20:08) А без хамства, всё-таки, не получается, молодой человек? Напомню, это Вы пришли сюда за помощью. Но мало того, что крайне недовольны тем, что не получили желаемого и в нужном виде, но и не стесняетесь давать рекомендации людям много старше и опытнее себя касательно "образа жизни" и "веры в себя". Уровень оценивать берётесь. Вы ничего не перепутали? Вам не приходило в голову, что у человека, которому Вы дерзите, "всё уже получилось", когда Вас ещё на свете не было. Да уж... Общие вопросы, особенно мировозренческие не могут являться оффтопом, поскольку важнее прочего. Скажите, человеку, который многоопытен и у которого всё сложилось - дозволено дерзить младшему, менее или вообще не опытному? Снобизм и хамство, завернутые в словоблудие и полунамеки, таковыми быть не перестают. Открою секрет. Вы не только не видите этого, но и всячески потворствуете этому. Мне очень понравились Ваши посты про горбатых адвокатов. Вы просматриваете предложения, после в голове у Вас включается блендер, который тщательно перемешивает слова, расставляет запятые и выдаёт получившееся ноу хау в ответах? Интеллектуальная пустота Озаренных знанием, мне интересна в большей степени, чем расстановка резисторов, но реальную помощь оказал Plain. Он предложил не ждать у моря, а составлять алгоритмы в эмуляции и сам предложил реальную схему в LTSpice. Ему Огромное Спасибо. Прочим любителям давать Советы, свои потуги лучше справлять в специально отведенных для этого комнатках.