Например TDA7294

Форум РадиоКот • Просмотр темы - аппаратный UART PIC16F628A
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Сб апр 20, 2024 14:44:32

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 35 ]  1,  
Автор Сообщение
Не в сети
 Заголовок сообщения: аппаратный UART PIC16F628A
СообщениеДобавлено: Пн окт 16, 2017 05:33:33 
Родился
Аватар пользователя

Зарегистрирован: Пн окт 16, 2017 05:30:58
Сообщений: 15
Откуда: Омск
Рейтинг сообщения: 0
Всем привет. Проблема такая. Использую аппаратный UART для передачи последовательности байтов. Тактирование контроллера от внутреннего генератора 4 МГЦ. Скорость обмена настроил на 10400 (расчетная) Реальная скорость составляет 10390 (если верить автонастройке лог.анализатора) Проблема в том, что теряются первые 2 бита передаваемого байта. То есть, отправляю 1000 0010 (82) а получаю на выходе 0000 0010 (02), то есть первые 2 бита распознаются анализатором как 0. То же самое и с остальными байтами. Пробовал передавать 1111 1111, на выходе - 0011 1111. Прошу подсказки, в чем может быть проблема. При этом результаты всегда стабильны, то есть в бесконечном цикле получаются всегда одни и те же результаты. Отправляю 82-11-F1-21-F1-96, анализатор распознает их как 02-11-31-21-31-16
Были подозрения на анализатор, но он не врет, попробовал на 2 разных, Saleae Logic и Disco2


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: аппаратный UART PIC16F628A
СообщениеДобавлено: Пн окт 16, 2017 12:51:10 
Друг Кота
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1351
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 14059
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Возможно тут
Вложение:
80151N_pic16f627a_628a_648a_errata_rev_a.pdf [118.79 KiB]
Скачиваний: 378

стр.3
:roll:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: аппаратный UART PIC16F628A
СообщениеДобавлено: Пн окт 16, 2017 23:06:43 
Родился
Аватар пользователя

Зарегистрирован: Пн окт 16, 2017 05:30:58
Сообщений: 15
Откуда: Омск
Рейтинг сообщения: 0
BOB51
Если я правильно понимаю, мне необходимо после включения Usart-модуля вновь настроить TRISB на вход?
Только что попробовал сбросить 2 бит регистра TRISB (нога TX как выход). Работает без изменений. Затем переместил настройку TRISB после инициализации и включения USART - работает точно также, режет старшие два бита в 0.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: аппаратный UART PIC16F628A
СообщениеДобавлено: Вт окт 17, 2017 08:43:00 
Друг Кота
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1351
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 14059
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Это предположение...
:roll:


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: аппаратный UART PIC16F628A
СообщениеДобавлено: Вт окт 17, 2017 10:17:44 
Родился
Аватар пользователя

Зарегистрирован: Пн окт 16, 2017 05:30:58
Сообщений: 15
Откуда: Омск
Рейтинг сообщения: 0
Кто-нибудь может прошить свой мк моей программой? Хочу удостовериться, что проблема в софте, а не в самом контроллере


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: аппаратный UART PIC16F628A
СообщениеДобавлено: Вт окт 17, 2017 11:35:30 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Вы бы программу выложили сюда, было бы больше пользы.
Тут нет экстрасенсов.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: аппаратный UART PIC16F628A
СообщениеДобавлено: Вт окт 17, 2017 22:27:07 
Родился
Аватар пользователя

Зарегистрирован: Пн окт 16, 2017 05:30:58
Сообщений: 15
Откуда: Омск
Рейтинг сообщения: 0
вот листинг
Код:
; контроллер - PIC16F628A
#include "p16f628a.inc"
 __CONFIG _FOSC_INTOSCIO & _WDTE_OFF & _PWRTE_OFF & _MCLRE_OFF & _BOREN_OFF & _LVP_OFF & _CPD_OFF & _CP_OFF ; конфигурация контроллера
; объявление регистров
 DATA_OUT equ h'0010'
 Reg_1 equ h'0011'
 Reg_2 equ h'0012'
 org 0000h
 goto START ; вектор сброса
 
 org 0004h
 retfie ; вектор прерывания
 
 ;основная программа инициализации контроллера
START
 clrw ; сброс W
 bcf STATUS,RP0
 bcf STATUS,RP1 ; переход в банк 0
 movwf INTCON ; запрет всех прерываний
 movwf PIR1; сброс всех флагов прерываний
 bsf STATUS,RP0 ; переход в банк 1
 movwf PIE1 ; запрет прерываний от периферии
 bcf STATUS,RP0 ; переход в банк 0
 
; отключение неиспользуемых модулей
 movlw 07h
 movwf CMCON ; отключение модуля компараторов
 
 clrf T2CON ; отключение таймера 2
 
 clrf CCP1CON ; отключение ШИМ
 
 bsf STATUS,RP0 ; банк 1
 clrf VRCON ; отключение источника опорного напряжения
 
 bcf OPTION_REG,T0CS ;обнуляем бит T0CS, что соответствует тактированию TMR0 от внутреннего сигнала
 
 bcf STATUS,RP0 ;0-й банк       
 clrf T1CON; отключение таймера 1
 
; настройка модуля USART
 bsf STATUS,RP0 ; банк 1
 movlw b'00000110' ;
 movwf TRISB
 movlw b'00011000'
 movwf SPBRG ; 24. скорость обмена - 10400
 
 movlw b'10100100'
 movwf TXSTA ; внутреннее тактирование, 8 разрядная передача, передача разрешена, асинхронный режим, высокоскоростной режим
 

 
 bcf STATUS,RP0 ; банк 0
 movlw b'10000000'
 movwf RCSTA ; USART вкл, 8 разрядный прием, прием запрещен

; основной цикл
MAIN
 call DELAY
;подпрограмма отправки запроса
 movlw b'11111111' ;
 movwf DATA_OUT ;
 call TRANSFER ; передача 0x82
 call DELAY
 goto MAIN
DELAY
; Задержка 100 000 машинных циклов
; Длительность задержки 100 миллисекунд
; Частота задающего генератора 4 МГц

            movlw       .221
            movwf       Reg_1
            movlw       .130
            movwf       Reg_2
            decfsz      Reg_1,F
            goto        $-1
            decfsz      Reg_2,F
            goto        $-3
            nop
            nop
return
 
; подпрограмма передачи данных по USART
TRANSFER
 btfss PIR1,TXIF ; пуст ли буфер передатчика?
  goto TRANSFER ; если нет, то повторная проверка
 movf DATA_OUT,w ; иначе считывание значения и копирование в буфер передатчика
 movwf TXREG
 return
 

 end


Последний раз редактировалось Аlex Вт окт 17, 2017 22:56:20, всего редактировалось 1 раз.
Тег [code]


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: аппаратный UART PIC16F628A
СообщениеДобавлено: Ср окт 18, 2017 08:46:42 
Сверлит текстолит когтями
Аватар пользователя

Карма: 25
Рейтинг сообщений: 168
Зарегистрирован: Ср янв 29, 2014 08:41:31
Сообщений: 1231
Откуда: Баку
Рейтинг сообщения: 0
А почему вы проверяете буфер передатчика флагом прерывания, а не опросом TXSTA,TRMT?
Почитайте раздел 12.2.1 ДШ, там пошагово расписана процедура передачи.

Вообще, странный выбор скорости, 10400. Почему бы не стандартные 9600?

_________________
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: аппаратный UART PIC16F628A
СообщениеДобавлено: Ср окт 18, 2017 09:16:53 
Друг Кота
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1351
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 14059
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Со скоростью обмена...
МНДЯаа...
Для асинхронного на 4МГЦ единственно вероятно BRGH = 1
при 9600 или 19200... (SPBRG =25 или SPBRG =12 соответственно)
зачем лишнюю отсебятину экспериментировать? (SPBRG =24 вместо 25)?
Для более устойчивого приема лучше два стопа ставить...
:roll:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: аппаратный UART PIC16F628A
СообщениеДобавлено: Ср окт 18, 2017 10:33:03 
Родился
Аватар пользователя

Зарегистрирован: Пн окт 16, 2017 05:30:58
Сообщений: 15
Откуда: Омск
Рейтинг сообщения: 0
По поводу скорости. Требуется организовать обмен данными с ЭБУ автомобиля (отправлять запрос и принимать ответ от блока), хочу реализовать это на аппаратном уровне. Подключался анализатором к K-line шине, обмен идет именно на такой скорости, формат - 8 бит с одним стопом. По поводу проверки буфера - таким образом не требуется переключать банки, как в случае с TMRT (хотя здесь могу ошибаться)

Добавлено after 2 minutes 43 seconds:
в принципе все и работает стабильно и на нужной скорости, только никак не могу понять, из-за чего старшие два бита всегда равны 0? число 0x11 кстати передается как положено, так как имеет вид 00010001


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: аппаратный UART PIC16F628A
СообщениеДобавлено: Ср окт 18, 2017 10:42:04 
Друг Кота
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1351
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 14059
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Посмотри, что может идти не в анализатор (настроенный возможно на какой-нить протокол), а в терминалку на ПК.
Возможно маскирование бит согласно особенностей протокола...
:dont_know:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: аппаратный UART PIC16F628A
СообщениеДобавлено: Ср окт 18, 2017 10:50:34 
Родился
Аватар пользователя

Зарегистрирован: Пн окт 16, 2017 05:30:58
Сообщений: 15
Откуда: Омск
Рейтинг сообщения: 0
В одном анализаторе стоит ASYNC SERIAL (это в Saleae Logic) в другом UART (в DISCO2). Сомневаюсь, что что-то неправильно распознается, так как непосредственно с автомобиля (заводил сигнал через делитель напряжения) распознает обмен правильно. К тому же, если смотреть просто на фронты, то начинается посылка всегда с 2 сигналов нулевого уровня. Ломаю голову, может ли быть проблема в самом контроллере (брак?)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: аппаратный UART PIC16F628A
СообщениеДобавлено: Ср окт 18, 2017 11:05:10 
Друг Кота

Карма: 64
Рейтинг сообщений: 966
Зарегистрирован: Пт мар 07, 2008 06:54:43
Сообщений: 4220
Откуда: Ижевск
Рейтинг сообщения: 0
Судя по комментариям в регистр скорости заносится 24, а нужно 23. Данные в USART следуют младшими вперед. Может поэтому в конце старшие биты проглатываются.
BAUD=4000000/(16(X+1)) -> X+1=4000000/16/10400=24 и X=23. При этом ошибка 0,16%. При 24 ошибка 3,84% - многовато.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: аппаратный UART PIC16F628A
СообщениеДобавлено: Ср окт 18, 2017 11:32:05 
Родился
Аватар пользователя

Зарегистрирован: Пн окт 16, 2017 05:30:58
Сообщений: 15
Откуда: Омск
Рейтинг сообщения: 0
Да, все верно, первый раз использовал 23. Затем, увидев в анализаторе скорость в 10600 (или около того, точно не помню), увеличил на 1 чтобы немного затормозить обмен. Может ли быть дело в том, что используется внутреннее тактирование, а не внешний кварц?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: аппаратный UART PIC16F628A
СообщениеДобавлено: Ср окт 18, 2017 11:40:34 
Друг Кота

Карма: 64
Рейтинг сообщений: 966
Зарегистрирован: Пт мар 07, 2008 06:54:43
Сообщений: 4220
Откуда: Ижевск
Рейтинг сообщения: 0
Конечно может.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: аппаратный UART PIC16F628A
СообщениеДобавлено: Ср окт 18, 2017 23:03:31 
Родился
Аватар пользователя

Зарегистрирован: Пн окт 16, 2017 05:30:58
Сообщений: 15
Откуда: Омск
Рейтинг сообщения: 0
Данные в USART следуют младшими вперед. Может поэтому в конце старшие биты проглатываются.


Я могу ошибаться, но в таком случае (если передача закончена или отменена), на линии должна появиться постоянная 1, а не 0.
Самое интересное, только что загнал программу в протеус, и там тоже в терминале некорректный прием, вместо 1111 1111 принимает 1111 1000


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: аппаратный UART PIC16F628A
СообщениеДобавлено: Чт окт 19, 2017 03:31:06 
Друг Кота
Аватар пользователя

Карма: 138
Рейтинг сообщений: 2712
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 21820
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
В Протеусе соедините передатчик МК с приемником и посмотрите как принимается эхо.
Вообще то с этого надо было начинать.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: аппаратный UART PIC16F628A
СообщениеДобавлено: Чт окт 19, 2017 10:36:40 
Родился
Аватар пользователя

Зарегистрирован: Пн окт 16, 2017 05:30:58
Сообщений: 15
Откуда: Омск
Рейтинг сообщения: 0
Последовал совету КРАМ'а, в протеусе нет приема (RCREG пустой) но подключенный параллельно терминал отображает данные корректно. Прошил контроллер, передача происходит корректно. С чем это связано - не знаю, уже запутался в своих действиях, что только не менял. На всякий случай выкладываю рабочий (на данный момент) код.

Код:
; контроллер - PIC16F628A
#include "p16f628a.inc"
 __CONFIG _FOSC_INTOSCIO & _WDTE_OFF & _PWRTE_OFF & _MCLRE_OFF & _BOREN_OFF & _LVP_OFF & _CPD_OFF & _CP_OFF ; конфигурация контроллера
; объявление регистров
 DATA_OUT equ h'0010'
 Reg_1 equ h'0011'
 Reg_2 equ h'0012'
 org 0000h
 goto START ; вектор сброса
 
 org 0004h
 retfie ; вектор прерывания
 
 ;основная программа инициализации контроллера
START
 clrw ; сброс W
 bcf STATUS,RP0
 bcf STATUS,RP1 ; переход в банк 0
 movwf INTCON ; запрет всех прерываний
 movwf PIR1; сброс всех флагов прерываний
 bsf STATUS,RP0 ; переход в банк 1
 movwf PIE1 ; запрет прерываний от периферии
 bcf STATUS,RP0 ; переход в банк 0
 
; отключение неиспользуемых модулей
 movlw 07h
 movwf CMCON ; отключение модуля компараторов
 
 clrf T2CON ; отключение таймера 2
 
 clrf CCP1CON ; отключение ШИМ
 
 bsf STATUS,RP0 ; банк 1
 clrf VRCON ; отключение источника опорного напряжения
 
 bcf OPTION_REG,T0CS ;обнуляем бит T0CS, что соответствует тактированию TMR0 от внутреннего сигнала
 
 bcf STATUS,RP0 ;0-й банк       
 clrf T1CON; отключение таймера 1
 
; настройка модуля USART
 bsf STATUS,RP0 ; банк 1
 movlw b'00000110' ;
 movwf TRISB
 movlw b'00011000'
 movwf SPBRG ; 24. скорость обмена - 10400
 
 movlw b'10000111'
 movwf TXSTA ; внутреннее тактирование, 8 разрядная передача, !передача разрешена, асинхронный режим, высокоскоростной режим
 

 
 bcf STATUS,RP0 ; банк 0
 movlw b'11111111'
 movwf PORTB
 movlw b'10111000'
 movwf RCSTA ; USART вкл, 8 разрядный прием, прием запрещен
 bsf STATUS,RP0 ; банк 1
 bsf OPTION_REG,NOT_RBPU ; вкл. подтяжку
 bsf TXSTA,TXEN ; вкл. передачи
 bcf STATUS,RP0 ; банк 0

; основной цикл
MAIN
 call DELAY
 call DELAY
 call DELAY
;подпрограмма отправки запроса
 movlw b'10000010' ;
 movwf DATA_OUT ;
 call TRANSFER ; передача 0x82
 call DELAY
 goto MAIN
DELAY
; Задержка 100 000 машинных циклов
; Длительность задержки 100 миллисекунд
; Частота задающего генератора 4 МГц

            movlw       .221
            movwf       Reg_1
            movlw       .130
            movwf       Reg_2
            decfsz      Reg_1,F
            goto        $-1
            decfsz      Reg_2,F
            goto        $-3
            nop
            nop
return
 
; подпрограмма передачи данных по USART
TRANSFER
 btfss PIR1,TXIF ; пуст ли буфер передатчика?
  goto TRANSFER ; если нет, то повторная проверка
 call DELAY
 movf DATA_OUT,w ; иначе считывание значения и копирование в буфер передатчика
 movwf TXREG
 return
 

 end


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: аппаратный UART PIC16F628A
СообщениеДобавлено: Чт окт 19, 2017 11:10:47 
Сверлит текстолит когтями
Аватар пользователя

Карма: 25
Рейтинг сообщений: 168
Зарегистрирован: Ср янв 29, 2014 08:41:31
Сообщений: 1231
Откуда: Баку
Рейтинг сообщения: 0
Проект Протеуса приложите.

_________________
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: аппаратный UART PIC16F628A
СообщениеДобавлено: Чт окт 19, 2017 12:30:07 
Друг Кота
Аватар пользователя

Карма: 138
Рейтинг сообщений: 2712
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 21820
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Довольно типична такого рода ошибка при неверно выставленных активных уровнях у передатчика относительно приемника.
Можно вывести на внешние пины МК либо весь байт эха, либо по частям. В зависимости от количества свободных пинов. Тогда получится посмотреть в железе.
Это я к тому, что только эхо позволяет оценить правильность конфигурации. А что там у внешнего приемника - будете разбирать потом.
Кстати, а в К-шине часом не манчестер?


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 35 ]  1,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y