Например TDA7294

Форум РадиоКот • Просмотр темы - Вопросы начинающих PIC ASM
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Вс ноя 16, 2025 23:32:07

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


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



Начать новую тему Ответить на тему  [ Сообщений: 732 ]     ... , , , 6, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Пн авг 29, 2016 20:49:31 
Потрогал лапой паяльник

Карма: 1
Рейтинг сообщений: 13
Зарегистрирован: Чт авг 08, 2013 01:06:54
Сообщений: 359
Рейтинг сообщения: 0
Albert_V писал(а):
..."документ"

http://www.microchip.ru/files/d-sheets- ... 29_675.pdf страница 71
Ну, я человек доверчивый, что прочитал, то и сказал :)))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Пн авг 29, 2016 21:10:56 
Друг Кота
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1859
Зарегистрирован: Чт сен 12, 2013 00:54:12
Сообщений: 4119
Откуда: ЗаМКАДье. Там, где ЦУП
Рейтинг сообщения: 0
Медали: 5
Получил миской по аватаре (5)
Интересно..
В официальном документе PIC16F62x действительно так.
Но в pdf-e на PIC16F628A этот абзац убран (стр. 113).


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Вт авг 30, 2016 07:18:42 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1484
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15260
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
У семейства ПИКовых надо к каждому конкретному кристаллу подходить с точки зрения именно его даташита и сопутствующих еррат (смотри часть кода REV в считанном из МК DEVICE ID VALUES !!!).
МК "с буковками" могут весьма существенно отличаться "в аппаратных мелочах" (редко используемые нюансы - с весьма обломными последствиями).
Для простых типовых конструкций почти незаметно, но если "использование по-максимуму" -вычитывать документацию необходимо весьма тщательно!
:beer:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Чт сен 01, 2016 17:34:35 
Опытный кот
Аватар пользователя

Карма: 18
Рейтинг сообщений: 44
Зарегистрирован: Чт апр 12, 2012 07:19:59
Сообщений: 870
Откуда: Тюмень
Рейтинг сообщения: 0
Доброго времени суток, имеется HEX одной прошивки, возможно ли его дизасемблировать и получить ASM чтобы можно было её поправить? Из инструментов имеется только MPLABX :)


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Чт сен 01, 2016 17:44:09 
Друг Кота
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1859
Зарегистрирован: Чт сен 12, 2013 00:54:12
Сообщений: 4119
Откуда: ЗаМКАДье. Там, где ЦУП
Рейтинг сообщения: 4
Медали: 5
Получил миской по аватаре (5)
xterro писал(а):
...имеется HEX одной прошивки, возможно ли его дизасемблировать и получить ASM...
Возможно.
Вариант 1. Создать в MPLAB проект под конкретный контроллер, File>Import *.hex, View>Program Memory.
Вариант 2. Скачать PICDisasm.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Чт сен 01, 2016 19:19:12 
Опытный кот
Аватар пользователя

Карма: 18
Рейтинг сообщений: 44
Зарегистрирован: Чт апр 12, 2012 07:19:59
Сообщений: 870
Откуда: Тюмень
Рейтинг сообщения: 0
Спасибо ) Только я так понял, дизассемблировать это не особо полезно. Меток нет, всё по адресам, пойди догадайся, что там эта функция делает :(


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Чт сен 01, 2016 19:38:20 
Друг Кота
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1859
Зарегистрирован: Чт сен 12, 2013 00:54:12
Сообщений: 4119
Откуда: ЗаМКАДье. Там, где ЦУП
Рейтинг сообщения: 0
Медали: 5
Получил миской по аватаре (5)
xterro писал(а):
...пойди догадайся, что там эта функция делает :(
Именно так.
Очень часто, бывает проще написать свою программу, ориентируясь на "руководство пользователя" к изделию, чем править чужую программу.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Чт дек 22, 2016 23:52:14 
Потрогал лапой паяльник

Карма: 1
Рейтинг сообщений: 13
Зарегистрирован: Чт авг 08, 2013 01:06:54
Сообщений: 359
Рейтинг сообщения: 0
Доброго времени суток. Пытаюсь завести модуль SSP на PIC16F73 в режиме I2C (ведомый режим, 7 разрядная адресация с разрешением прерываний по приему старт-бита). Не получается, прошу помощи.
Спойлер
Код:

push   macro
   movwf   w_temp
   swapf   STATUS,w
   movwf   status_temp
   endm

pop      macro
   swapf   status_temp,w
   movwf   STATUS
   swapf   w_temp,f
   swapf   w_temp,w
   endm

RESET_VECTOR   code   0h
   goto   Init

ISR            code   4h      ; Вектор прерывания
   push                  ; Сохраним контекст
   btfsc   PIR1,SSPIF
   call   Receive_I2C_Byte

ISR_end
   pop                     ; Восстановим контекст
   retfie

Init                     ; Предварительная загрузка начальных значений   
   banksel   TRISA            ; Банк 1
   movlw   b'00000000'
   movwf   TRISA            ; Порт A на вывод
   movwf   TRISB            ; Порт В на вывод
   call   SSP_I2C_Ini
   banksel   INTCON            ; Банк 0      
   movlw   b'11000000'         ; Разрешаем прерывание периферийных модулей и прерывания вообще
   movwf   INTCON
   
Main
;      делаем что-то с полученной по I2C переменной value
   goto   Main

SSP_I2C      code

SSP_I2C_Ini
   banksel   SSPADD            ; Вибираем 1 банк

   movlw   I2C_ADDR         ; Заносим адрес устройства      
   movwf   SSPADD
   movlw   (1<<SSPIE)         ; Разрешем прерывания от модуля SSP
   movwf   PIE1

   banksel   SSPCON            ; Вибираем 0 банк
   movlw   (1<<SSPEN)|(1<<SSPM3)|(1<<SSPM2)|(1<<SSPM1) ; Включаем модуль SSP, ведомый режим с 7-разрядной адресацией и разрешением прерываний
   movwf   SSPCON

   return

Receive_I2C_Byte
   btfsc   SSPSTAT,BF         ; Ожидаем завершения приема байта адреса
   goto   Receive_I2C_Byte   
   movfw   SSPBUF            ; Считаем полученый адрес, чтобы сбросить флаг BF
Wait_Receive_I2C_Byte
   btfsc   SSPSTAT,BF         ; Ожидаем завершения приема байта данных
   goto   Wait_Receive_I2C_Byte            
   movfw   SSPBUF            ; Считаем полученые данные
   movwf   value
   bcf      PIR1,SSPIF
   return


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Пт дек 23, 2016 00:19:04 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1432
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4590
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Пока_без_кота писал(а):
с разрешением прерываний по приему старт-бита
Это как ?
SSPIF поднимается по приёму байта, а не по сартовому состоянию.

Изображение
Вложение:
2016-12-23_01-23-26.png [62.76 KiB]
Скачиваний: 867


Соответственно и прерывание возникает в этот же момент.

И к чему манипуляции с BF-битом, тоже не понятно ... :dont_know:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Пт дек 23, 2016 03:37:44 
Потрогал лапой паяльник

Карма: 1
Рейтинг сообщений: 13
Зарегистрирован: Чт авг 08, 2013 01:06:54
Сообщений: 359
Рейтинг сообщения: 0
Там еще есть режим, в котором прерывания возникают по приходу старт/стоп бита. Но я внимательнее вчитался, и понял что мне это не нужно. Переделал без этих прерываний, и лишнего анализа флага BF.
Спойлер
Код:
SSP_I2C      code
SSP_I2C_Ini
   banksel   SSPADD            ; Вибираем 1 банк
   movlw   I2C_ADDR         ; Заносим адрес устройства      
   movwf   SSPADD
   movlw   (1<<SSPIE)         ; Разрешем прерывания от модуля SSP
   movwf   PIE1
   banksel   SSPCON            ; Вибираем 0 банк
   movlw   (1<<SSPEN)|(1<<CKP)|(1<<SSPM2)|(1<<SSPM1); Включаем модуль SSP, ведомый режим с 7-разрядной адресацией, управление SCL отключено
   movwf   SSPCON
   return

Receive_I2C_Byte
   movfw   SSPBUF            ; Сразу считаем полученый байт, чтоб сбросить флаг BF
   banksel   SSPSTAT
   btfss   SSPSTAT,D         ; Если принятый байт - адрес,
   goto   End_Receive_I2C_Byte; сразу на выход
   banksel   PIR1
   movwf   value         ; Иначе обновим соостояние переменной
End_Receive_I2C_Byte
   banksel   PIR1
   bcf      PIR1,SSPIF         ; Сбрасываем флаг прерывания от модуля SSP
   return


Все работает, спасибо :beer:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Чт дек 29, 2016 20:08:15 
Потрогал лапой паяльник

Карма: 1
Рейтинг сообщений: 13
Зарегистрирован: Чт авг 08, 2013 01:06:54
Сообщений: 359
Рейтинг сообщения: 0
Доброго времени суток. Вопрос не совсем по асму, но близко. Когда-то, где-то, мельком видел документ от Микрочипа, в котором для UART указываются погрешности в % при разных номиналах кварцевых резонаторов. Подскажите пожалуйста, как называется сей документ. Для чего необходимо: имеется устройство на ПИКе, в котором стоит кварц на 11,0592 МГц в планарном исполнении. Этот экземпляр кварца нужен для другой поделки на базе MCS51, для которой этот номинал подходит для реализации безпогрешного обмена по UART. Хочу узнать, какие номиналы нужны ПИКу для безпогрешного обмена, может быть удастся совершить подмену :)))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Чт дек 29, 2016 21:12:16 
Друг Кота

Карма: 27
Рейтинг сообщений: 1283
Зарегистрирован: Ср фев 11, 2009 20:35:58
Сообщений: 7853
Рейтинг сообщения: 0
См. даташит на МК


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Чт дек 29, 2016 21:42:58 
Потрогал лапой паяльник

Карма: 1
Рейтинг сообщений: 13
Зарегистрирован: Чт авг 08, 2013 01:06:54
Сообщений: 359
Рейтинг сообщения: 0
Там какая-то слишком скудная таблица. Нет даже того же кварца на 11,0592, который стоит на этой плате с ПИКом. Я думал есть аппноут какой-то расширенный :roll:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Чт дек 29, 2016 21:50:25 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2918
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 24533
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Пока_без_кота писал(а):
Хочу узнать, какие номиналы нужны ПИКу для безпогрешного обмена, может быть удастся совершить подмену :)))

Что за бред? :facepalm:
Какой еще "беспогрешный" обмен?
Скорость обмена может отличаться у передатчика и приемника довольно значительно. Важно лишь, чтобы на одном байте все 8 (или 9) бит попали на выборки приемника. А это допускает отклонение частот аж до 10% БЕЗ ПОТЕРИ ИНФОРМАЦИИ.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Чт дек 29, 2016 23:41:32 
Потрогал лапой паяльник

Карма: 1
Рейтинг сообщений: 13
Зарегистрирован: Чт авг 08, 2013 01:06:54
Сообщений: 359
Рейтинг сообщения: 0
Под "беспогрешным" я понимаю обмен с ошибкой в пределах 2%. Я для себя макетирую некоторые устройства с приминением софтового UART-а на 8-ногих микроконтроллерах (без кварца). При сильном разбросе температур это все теоретически не очень стабильно себя ведет. Поэтому мне очень желательно свести к минимуму разбежности в обмене хотя бы на стороне контроллера с кварцем. Вот такой бред :)
П.С. А вообще нагуглил вот такой калькулятор (http://www.micromagicsystems.com/#/pic-baud/4523812801), который показывет ошибку при любом кварце - выбирай, какой душа пожелает :tea:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Пт дек 30, 2016 00:32:46 
Друг Кота
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1859
Зарегистрирован: Чт сен 12, 2013 00:54:12
Сообщений: 4119
Откуда: ЗаМКАДье. Там, где ЦУП
Рейтинг сообщения: 0
Медали: 5
Получил миской по аватаре (5)
Пока_без_кота писал(а):
...Я для себя макетирую некоторые устройства с приминением софтового UART-а на 8-ногих микроконтроллерах (без кварца)....
Извините за нескромный вопрос: НАХРЕНА?
Сложно выбрать контроллер с аппаратным EUSART (к примеру, PIC12F1840 в SOIC-8)?
Освоить работу с периферией PIC контроллеров 12-ой серии - пару вечеров (с диким количеством перекуров).


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Пт дек 30, 2016 04:00:43 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2918
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 24533
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Пока_без_кота писал(а):
П.С. А вообще нагуглил вот такой калькулятор

Поколение "некст"...
Убить время на поиск "калькулятора" вместо чтения даташита с ПРИМИТИВНОЙ формулой в два арифметических действия...
Более того, если применяются два контроллера одной платформы (с одинаковыми модулями UART), то в них вообще не нужно ничего считать. Потому что одинаковые режимы дадут одинаковую скорость.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Пт дек 30, 2016 13:22:28 
Потрогал лапой паяльник

Карма: 1
Рейтинг сообщений: 13
Зарегистрирован: Чт авг 08, 2013 01:06:54
Сообщений: 359
Рейтинг сообщения: 0
Albert_V писал(а):
... НАХРЕНА? ...

Я "вечноначинающий" любитель. Уровень моих поделок - мигание светодиодом во всех возможных проявлениях. Я смог достать небольшую партию PIC12F629 по 0,2 бакса за штучку. Я посчитал это выгодным предложением, тем более что мне нравиться сам процесс ковыряния с мелкими пиками на ассемблере. Теперь свои поделия (выносные датчики) делаю на них.

КРАМ писал(а):
... Убить время на поиск "калькулятора" вместо чтения даташита с ПРИМИТИВНОЙ формулой в два арифметических действия ...

Формула давно прочитана и забита в исходник, так что даже считать ничего не надо:
Спойлер
Код:
#define   yes            1
#define   no            0

#define   f            .8000000
#define   baudrate      .9600
#define   USE_HIGH_SPEED   no

   if   (USE_HIGH_SPEED)
#define   K            (f/(baudrate*.16))-1
   else
#define   K            (f/(baudrate*.64))-1
   endif

PIC16_HW_UART_udata   udata_shr   

Temp_FSR         res   1

PIC16_HW_UART   code

UART_Ini
   banksel   SPBRG
   movlw   K               ; Загружаем коеф. деления частоты
   movwf   SPBRG


Просто из этой формулы НАГЛЯДНО НЕ ВИДНО, какой будет % отклонения, высчитывать вручную мне влом. Тем более что это действие возможно пришлось бы повторять в будущем, вот и решил "упростить жизнь" себе, и Вас заодно позадалбывать. Спасибо за внимание :beer:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Пт дек 30, 2016 15:43:41 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1484
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15260
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
В даташите конкретного ПИКа, имеющего блок(и) последовательного обмена всегда присутствует соответствующая таблица допусков погрешностей/вероятных ошибок.
Где-то встречался и алгоритм программной обработки приема/передачи....
:roll:
Как вариант, программный передатчик был тут (viewtopic.php?p=2593182#p2593182 download/file.php?id=236646 )
:beer:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Вс янв 01, 2017 22:36:14 
Потрогал лапой паяльник

Карма: 1
Рейтинг сообщений: 13
Зарегистрирован: Чт авг 08, 2013 01:06:54
Сообщений: 359
Рейтинг сообщения: 0
С Новым Годом! Прошу помощи в таком вопросе. Есть код:
Спойлер
Код:
Send_TX_byte                     ; Подпрограмма передачи 1 байта
   bcf      INTCON,GIE               ; Запрещаем прерывания   
;   bsf_TX                        ; Предварительно установим TX
   bsf      TX                     ; Предварительно установим TX
   
if   (USE_ONE_PIN)
   banksel   OPTION_REG               ; Bank 1
;   bcf_TX                        ; Настроим TX на выход
   bcf      TX
   banksel   INTCON                  ; Bank 0
endif

;----------
;   bcf_TX                        ; Шлем старт бит
   bcf      TX                     ; Шлем старт бит
   movwf   TX_byte                  ; Загрузим передавемый байт         
   movlw   .8                     ; Загрузим количество передаваемых битов
   movwf   UART_counter
   nop
Transmit_Next_Bit
   nop
   call   Delay_1bit               ; Длинной 1 бит
   rrf      TX_byte                  ; Продвигаем в бит переноса все биты, начиная с младшего
   btfsc   STATUS,C               ; Проверяем, что выдавилось в бит переноса
;   bsf_TX                        ; Если 1, выставляем 1 на ТХ - !!! надо будет переделать, макрос занимает 2 команды и прыгнуть через него мы уже не можем
   bsf      TX                     ; Если 1, выставляем 1 на ТХ
   btfss   STATUS,C
;   bcf_TX                        ; Если 0, выставляем 0 на ТХ - !!! надо будет переделать, макрос занимает 2 команды и прыгнуть через него мы уже не можем
   bcf      TX                     ; Если 0, выставляем 0 на ТХ
   decfsz   UART_counter            ; Весь байт отослан ?
   goto   Transmit_Next_Bit         ; Нет, идем слать следующий бит
   call   Delay_1bit               ; Задержка длинной 1 бит
   nop
   nop
   nop
   nop
   nop
   bsf_TX                        ; Шлем стоп-бит
   call   Delay_1bit               ; Задержка длинной 1 бит
;----------
if   (USE_ONE_PIN)   
   banksel   OPTION_REG               ; Bank 1
   bsf_TX                        ; Настроим ножку на вход
   banksel   INTCON                  ; Вернем Bank 0
endif

if   (USE_T0CKI)
   movlw   .255                  ; Перезапишем таймер для переполнения при приходе старт-бита
   movwf   TMR0
else
   bcf      INTCON,INTF               ; Сбросим флаг внешнего прерывания
endif
   bcf      INTCON,T0IF               ; Сбросим флаг переполнения Таймера 0
   bsf      INTCON,GIE               ; Разрешаем прерывания
   return

Это кусок моего программного UART (передача байта). Сперва в нем управление ногой ТХ было сделано через bsf/bcf, но так как это неправильно, я решил переделать через битовые маски. И тут меня подстерег северный полярный зверек. В конце кода замена команды установки/сброса бита на операцию по маске прошла успешно, а в других код перестает быть рабочим (шлется мусор вместо байта). Макросы установки/сброса имеют вид:
Спойлер
Код:
bsf_TX   macro
      movlw   (1<<TX_PIN)
      iorwf   TX_PORT
      endm

bcf_TX   macro
   if   (USE_PIC12)
      movlw   b'111011'
   endif
   if   (!USE_PIC12 & USE_T0CKI)
      movlw   b'01111'
   endif
   if   (!USE_PIC12 & !USE_T0CKI)
      movlw   b'11111110'
   endif      
      andwf   TX_PORT
      endm


Вопрос, почему так происходит, что в одном месте замена проходит нормально, а в другом нет. Сейчас у меня ТХ находиться на ножке RA4, контроллер PIC16F84 (открытый коллектор, есть внешний подтягивающий резистор на 4,7к), если это имеет значение.


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

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


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

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


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

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


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