Доброго времени суток! Задача такая: необходимо с одного пика на другой передать массив,в ответ второй пик должен инвертировать 4-ый бит второго байта в принятом массиве и отправить его первому.В протоне написал программы как для передающего пика, так и для принимающего все отлично откомпилировалось. Однако при моделировании в протеусе возникает ошибка при передаче массива 1-ым пиком. Может кто нибудь знает в чем тут дело? Прикрепляю програмный код и схему в протеус.
Подскажите, может кто знает в чем проблема при использовании команды на передатчике на пример HSEROUT "ID145", и прием на приемнике HSERIN 1000, loop, [Wait("ID145")]. Все происходит нормально, программа дальше работает. НО при внесении неправильного ID для проверки приема HSERIN 1000, loop, [Wait("ID140")], не происходит переход к подпрограмме loop.
Добрый день. Хочу спросить кто нибудь колдовал со звуковым блочком DFPlayer Mini с карточкой, управляемый по UART? Что-то не хочет он от UART запускаться, хотя от кнопок пиликает замечательно. UART на 9600, как в даташите. Может не правильно последовательный код передаю? И еще хотел спросить- как сосчитать контрольную сумму кода (выделил синим), может какой удобный калькулятор есть?
И еще хотел спросить- как сосчитать контрольную сумму кода (выделил синим), может какой удобный калькулятор есть?
Вот тут написано: "It's easy to calculate checksum if you understand hex well. Here is an example below. FF+06+03+00+00+01=0109 0-0109=FE F7 " THE TRUTH IS OUT THERE.
Спасибо, но эти ссылки как и многие другие были "перелопачены". WTV-20 блок с управлением по SPI отлично работает, но "гад" сильно разборчив в SD карточках, у меня из 8 разных заработал только со старой 10 летней давности. А этот блок DFPlayer всеядный, но по последовательному порту не хочет работать. Скажите а сама передача посылки данных у меня правильно организована?
За сумму отдельное спасибо- в даташите опечатка , но все равно блок молчит
У Вас на рисунке написано ... $FE, $F7... Вы передаете: .... $FF,$E6 ...
А попробуйте следующее, подключите МК к компу и отошлите эти данные компу, если комп их примет, значит Вы настроили УАРТ верно, если нет... THE TRUTH IS OUT THERE.
Уже думаю надо прикупить RS232 переходник и подцепить к компу, да посмотреть обе посылки TX от контроллера для сравнения... Может быть ответ явно на поверхности, есть какие идеи?
Сообщение отредактировал
xvovanx - Чт, 03.08.2017, 00:24
Добрый вечер! Удалось все таки победить программный (не железный) RS232. "Докладаю" в чем фокусы были. Подключил UART выходы Пика к компу (через Мах232 блок) и давай анализатором смотреть, что мы имеем: железный UART выдает правильную посылку, а програмный (команды Протона SerOut и RsOut) выдает на выход по умолчанию инверсный сигнал. Для команды SerOut инвертировать данные в описаниях не нашел как, а для команды RsOut в описаниях есть (первая строка кода)
Код
Declare RsOut_Mode 0 ' Режим последовательной передачи данных без инверсии Declare Serial_Baud 9600 Declare RsOut_Pin PORTC.0 Declare RsIn_Pin PORTC.1 RsOut $7E,$FF,$06,$03,$00,$00,$01,$EF
Все заработало как часики - в порту данные что надо. Теперь можно отсылать TX-RX с любых ног Пика. Звуковой блочёк отлично запускается даже только от TX, без RX (экономия ноги)
P.S. без анализатора КомПорта не разобрался бы в чем дело, так как раньше в Протеусе смоделировал два Пика в UART связке и они замечательно работали без всяких инверсий - что послал, то и получил. В железе однако не так
Сообщение отредактировал
xvovanx - Чт, 03.08.2017, 22:38
Кстати, вопрос - а на фига вы железный COM-порт используете? Это же только проблемы - в современных компах
Я под словом "железный" КомПорт подразумевал TX и RX ноги процессора (команда HSerOut ), а когда эти ноги уже заняты, то приходится мудрить "программный" КомПорт на свободных ногах (команда SerOut ).