- ТЛГ-протокол для БК0010-01
-
? dima83 - 02.01.2018 07:04
У меня возникла необходимость загружать в свою БКшку небольшие программки. Я решил использовать для этой цели ТЛГ-канал. Однако возникла сложность, так как допоять провода до выводов оказалось недостаточно. Загружать программы в бк я планировал с помощью пик-контроллера (опыт программирования пиков у меня есть). На данный момент я реализвал определение готовности и к приему информации пиком без использования вывода "готовность приемника", т.е. определение идет по анализу с линии "прием данных". Для простоты я решил загнать в БК вот таку програмку:
¤
MOV #103,R0
Q: EMT 16
BR Q
-
? dima83 - 02.01.2018 07:42
Но, к сожалению пока ничего путного не получилось.
В ходе исследования с помощью осциллографа удалось установить следующее:
1. При вводе из "монитора" команды "L"(Линия) на выводе 1 мс D12 (чтение байта с линии) формируются импульсы лог.0 (0В) длительностью 2-4 мкс периодичностью 20 мкс, в интервалах между импульсами на линии лог.1 (5В).
2. При подче на вывод 1 мс D12 вначале лог "0", а затем снятии на выводе 12 мс D13 (готовность к приему) формируется лог "0", т.е., как я понимаю, это признак готовности к приему байта.
-
? dima83 - 02.01.2018 07:56
Далее нужно передать байт.
Изучение листингов драйвер-мониторной системы показало, что:
¤
; ===========================
; *** БЛОК ПЕРЕДАЧИ БАЙТА ***
; ===========================
¤
¤
BPDB: MOV R0,-(SP)
MOV R4,-(SP)
¤
BIS #1400,R0 ; ПОДГ. ПАРАМЕТРОВ
MOV #13,R4
¤
6$: BIT #200,@#ASPORT ; ОЖ. ГОТОВНОСТИ
BEQ 6$
¤
CLC ; УСТАНОВКА БИТА
BR 1$
4$: ASR R0
1$: BCC 2$
MOV #KTLG1,@#ASPORT
BR 3$
2$: MOV #KTLG0,@#ASPORT
BR 3$
¤
3$: MOV DLBIT,R5 ; ЦИКЛ ПЕРЕДАЧИ БИТА
5$: SOB R5,5$
¤
SOB R4,4$
¤
MOV (SP)+,R4
MOV (SP)+,R0
RTS PC
¤
Байт (в том числе стартовый бит) передается только после приема сигнала готовности принимающей стороны. Всего передается 11 байтов: стартовый байт (лог.0), собственно байты (0-7) и два стоповых байта (лог.1)
¤
¤
; ===============================
; ***** МОДУЛЬ ПРИЕМА БАЙТА *****
; ===============================
¤
¤
; ВЫХОД: R0 - МЛ. БАЙТ
¤
¤
MPRBYT:
¤
¤
; =========================
; *** БЛОК ПРИЕМА БАЙТА ***
; =========================
¤
¤
BPRB: MTPS #0 ;- РАЗРЕШЕНИЕ ПРЕРЫВАНИЙ
MOV R3,-(SP)
MOV R4,-(SP)
¤
MOV #ASPORT,R3 ; ПОДГ. ПАРАМ.
MOV #20,R4 ;- СЧЕТЧИК БАЙТА
CLR R0
¤
1$: BIT R4,(R3) ; ПОИСК СТАРТОВОГО БИТА
BEQ 1$
11$: MOV #260,(R3) ;- УСТ. ГОТОВН. ПРИЕМА
BIT R4,(R3)
BNE 11$
MTPS #200 ;- ЗАПРЕТ ПРЕРЫВАНИЙ
¤
MOV DLBIT,R5 ; ПОИСК СЕРЕД. СТ. БИТА
ASR R5
2$: SOB R5,2$
ASR R4
¤
6$: MOV DLBIT,R5 ;- ЧТЕНИЕ БАЙТА
3$: SOB R5,3$
BIT #20,(R3)
BNE 4$
CLC
BR 5$
4$: SEC
BR 5$
5$: RORB R0
SOB R4,6$
MOV #220,(R3) ;- СБРОС ГОТОВН. ПРИЕМА
¤
MOV (SP)+,R4
MOV (SP)+,R3
RTS PC
¤
На принимающей стороне байт принимается только после приема стартового бита, установки готовности приема и приема инверсного стартового бита (в моем случае это подтверждается сначала закорачиванием выв. 1 D12 на землю, а затем его отпусканием)
-
? dima83 - 02.01.2018 07:59
Но вопрос в том, что стартовый бит не может быть подан до установки готовности приема! А готовность приема будет установлена только после принятия стартового бита! Получается что и приемник и передатчик будут ждать...???
-
? MM - 02.01.2018 10:23
Иван 83 радиолюбитель, отличные тексты !
-
? dima83 - 02.01.2018 13:24
Еще есть вопрос по поводу мс D12, лог.0 устанавливается на ее входе 1 закорачиванием на землю (37 mA), а как быть с лог.1 ? Просто отпустить или подтянуть к питанию?
-
? dima83 - 03.01.2018 12:47
Сегодня нашел в схеме ошибку! Не 1 вывод, а 4й! А я туда и землю и +5 В пихал! И как там только ничего не сгорело удивляюсь!)
-
? MM - 03.01.2018 12:59
Для начала - фото Вашей платы БК, т.к. было 2 варианта схемы.
-
? dima83 - 03.01.2018 14:30
БК-0010-01 две микрухи возле магнитафонного реле, одна АП2 другая ир1
-
? dima83 - 03.01.2018 14:34
Еще один листинг, где происходит прием файла по команде "Л" из монитора. Обратите внимание, что вначале БК принимает произвлольный бай из линии, а затем возвращает его назад в линию.
¤
; -----------------------------
; ** 1. ЧТЕНИЕ ФАЙЛА С ЛИНИИ **
; -----------------------------
¤
PCTTLG: EMT PRBYT ; УСТАНОВКА СВЯЗИ
EMT PDBYT
¤
MOV #BUFSTA,R1 ; ПРИЕМ АДРЕСА И ДЛИНЫ
MOV #4,R2
EMT PRMAS
TST R5
BEQ 1$
MOV R5,BUFSTA
¤
1$: MOV BUFSTA,R1 ; ПРИЕМ МАССИВА
MOV BUFDL,R2
EMT PRMAS
JSR R5,PPCT ;- ПЕЧАТЬ СООБЩЕНИЯ
.WORD TFZ
¤
RTS PC
-
? BD - 03.01.2018 15:59
Уважаемый ММ, наверняка, определит чьи платы и т.п. использовались, и кто паял ))
http://storage6.static.itmages.ru/i/18/0103/h_1514983896_7069996_89a992dd72.jpg
http://storage1.static.itmages.ru/i/18/0103/h_1514983921_7449334_5e53ed3f4a.jpg
все работает, даж пленку не повредил при вскрытии ))
-
? dima83 - 03.01.2018 16:03
Вот моя плата: http://www.fincoins.spb.ru/oldpc/bk/kaz-board.jpg
-
? MM - 03.01.2018 16:21
dima83 - у Вас Казанская БКшка, надо выв. 02 1801РЕ2 соединить с Б20 разъема МПИ, и отключить всё от А15, Б15 разъема МПИ - так она станет совместима с БК от Э.
ну и на блоке МСТД - тоже вывести выв. 02 ИС ПЗУ на контакт Б20 разъема МПИ, отключив всё от А15, Б15.
Вывод сигнала RPLY на 15 выв. разъема МПИ - это диверсия инженеров из г. Казань, не ясно, чем конкретно мотивированная.
*
BD - у Вас восстановленная БК из крайней серии ДПП, еще западногерманского стеклотекстолита.
Конденсаторы, кстати, запаяны "с содержанием".
Т.к. пленки имеют крайний временной износ, любое их движение - не желательно, или запасайтесь клеем Контактол.
-
? BD - 03.01.2018 16:28
>> BD - у Вас восстановленная БК из крайней серии ДПП, еще западногерманского стеклотекстолита.
это от ugoalex, монтаж, кроме БИС - ручной, хорошего качества ))
-
? BD - 03.01.2018 16:36
присмотрелся - везде не заводской монтаж.. )_
-
? dima83 - 06.01.2018 08:49
ТЛГ протокол реализован на скорости 9600 бит/сек (даже чуть больше) всего по двум проводим ПРД и ПД между БК-0010-01 и PIC12f629. Доработка - подпаять провода от выв. 4 мс D12 до выв. B2 разъема XT5 (УП) и от выв. 13 мс D13 до выв. B3. Кроме этого с этого же разъема берется земля и +5 В для питания контроллера. "Загнана" простейшая программа:
¤
MOV #103,R0
Q: EMT 16
BR Q
¤
загрузка из монитора командой "L", запуск - командой "S"
Все работает.
-
? dima83 - 06.01.2018 10:19
Проблемма в переносе кодов программы в pic-контроллер заключается в неправильном отображении их в программаторе ic-prog, а именно при попытке загнать бинарник в область памяти данных отображается следующее:
¤
00 02 08 00 C0 15 43 00 0E 88 FE 01
¤
поэтому пришлось каждый байт прописывать вручную при помощи mirage
¤
как бы упростить эту задачу?
-
? Дмитрий - 06.01.2018 12:13
А что не так? Бинарник подразумевает формат "адрес, длина, данные". 00 02 - адрес загрузки, 08 00 - длина, далее код.
-
? dima83 - 06.01.2018 13:44
ну как мне из вот этих цифр "00 02" сляпать : "00000010 00000000" ведь читать то я планирую побайтно с самого первого байта!
-
? dima83 - 06.01.2018 13:47
кроме этого хотелось бы автозапуск без ввода "S". какой начальный адрес указать и вообще возможно ли это?
-
? Дмитрий - 06.01.2018 21:45
>> ну как мне из вот этих цифр "00 02" сляпать : "00000010 00000000"
Не понял - что из чего для чего? Для передачи нужно брать чистый код, без заголовка BIN.
¤
>> кроме этого хотелось бы автозапуск без ввода "S". какой начальный адрес указать и вообще возможно ли это?
Автозапуск подразумевает предварительно записать адрес запуска перед кодом и грузить файл надо не на 1000(8) адрес, а на 760(8) - значит код предварить 8 словами 1000(8). Или взять 720 адрес для верности - тогда 24 слова 1000(8). И грузить командой L<адрес>. В этом случае после загрузки произойдет автозапуск загруженного. Автозапуск таким образом подменяет в стеке адрес возврата на нужный нам.
¤
Но данный способ не сработает, если код будет загружаться не с адреса 1000, а, скажем, с 20000(8).
-
? dima83 - 07.01.2018 11:00
Да, Вы правы! Нужно читать как есть...т.е. сначала младший байт, затем старший и т.д. Вчера написал подправил прогу и теперь загоняю код бинарника непосредственно в EEPROM пика, но там всего 128 байт памяти, что не особо радует.
¤
А не проще ли просто подправить адрес в самом бинарнике?
-
? Дмитрий - 07.01.2018 14:57
Монитор БК не знает ни о каких бинарниках и их форматах, понятия не имеет об адресе в заголовке программы. Выполнена загрузка программы, происходит выход обратно в монитор. Если был автозапуск (подменен адрес возврата на адрес запуска программы), то произойдет запуск программы.
-
? dima83 - 07.01.2018 15:40
Так я ж собираюсь загнать бинарник по ТЛГ-каналу. Первые два байта будут содержать измененный адрес начальной ячейки памяти. Я пробовал изменять его на 760 и 720 ничего не запускается!
-
? dima83 - 07.01.2018 15:44
Вот конкретная программа, которая успешно загружается в БК с ТЛГ-канала и выполняется по команде "S".
¤
MOV #103,R0
Q: EMT 16
BR Q
¤
Первые 2 байта бинарного файла содержат адрес 1000(8).
Какой адрес мне нужно занести в эти 2 байта что бы произошел автозапуск?
-
? dima83 - 07.01.2018 16:03
Теперь мне нужно написать что то вроде загрузчика файлов и разобраться каким образом можно подключить usb-flash к пик контроллеру. Если кто что может подсказать буду рад выслушать.
-
? Дмитрий - 07.01.2018 16:26
Для автозапуска нужно записать не 2 байта адреса, а больше, т.к. мы не знаем, какой указатель стека был в момент вызова. Поэтому
¤
.WORD 1000,1000,1000,1000,1000,1000,1000,1000
MOV #103,R0
Q: EMT 16
BR Q
¤
и грузить такую программу надо на адрес 760(8). Но не факт, что указатель стека попадет в диапазон 760-776. Поэтому для верности адрес загрузки брали 732(8) или 720(8) и заполняли адресом запуска до кода программы.
-
? Alexander Tishin@ - 08.01.2018 18:49
При запуске из монитора -- попадёт. Такие адреса это паранойя в общем-то.
-
? BD@ - 08.01.2018 21:22
Как я понимаю, на данный момент, он pic может "запрограммировать", неким кодом для БК. А как через ТЛГ передать эту хрень еще не задумывался. Будет первым в космосе, наверное ))
-
? Дмитрий - 09.01.2018 17:43
>> При запуске из монитора -- попадёт. Такие адреса это паранойя в общем-то.
У меня в давние времена несколько раз автозапуск игр не срабатывал при адресе 760(8). Пришлось менять на 732(8). С ним работало всегда.
-
? dima83 - 10.01.2018 10:46
? BD@ - 08.01.2018 21:22
Как я понимаю, на данный момент, он pic может "запрограммировать", неким кодом для БК. А как через ТЛГ передать эту хрень еще не задумывался. Будет первым в космосе, наверное ))
¤
Уже запрограммировал и уже передал!
-
? dima83 - 10.01.2018 11:04
f0 01 89 32 00 02 00 02 00 02 00 02 00 02 00 02
00 02 00 02
¤
Вот фрагмент файла melman, который запускается автоматом
видно, что начальный адрес загрузки 01F0 т.е. 760
-
? dima83 - 10.01.2018 11:51
Интересный факт, что память данных пик-контроллера ограничивается емкостью 128 байт, тогда как память программ (Flash) - 1024 байта. Но при использовании памяти программ коды придется прописывать вручную или использовать подпрограмму табличной конвертации. Метод конечно сложный, но позволяет увеличить объем программы до 1536 байтов (три таблицы).
-
? BD@ - 10.01.2018 12:46
имей ввиду - автозапуск зло. ошибки то не обрабатываются при передаче. ковыряй MIRAGом значение указателя стека SP при удачной загрузке по ТЛГ.
-
? BD@ - 10.01.2018 13:12
офф. под новый год отправлять была плохая идея..
https://gdeposylka.ru/courier/russian-post/tracking/RO163039972RU
-
? dima83 - 10.01.2018 15:51
Написал версию для загрузки проги из программной памяти пика. Теперь максимальный объем загружаемой проги равен 765 байт.
-
? dima83 - 15.01.2018 10:52
LA.760
.WORD 1000,1000,1000,1000,1000,1000,1000,1000
MOV #103,R0
Q: EMT 16
BR Q
¤
Вот теперь она оттранслируется в начальный адрес 760 и будет запускаться автоматом!
-
? dima83 - 23.01.2018 14:30
Добрый день. Заметил, что при нажатии на клавишу "СТОП" после загрузки программы происходит самопроизвольная инициализация ТЛГ канала. Бк выдает произвольный байт в линию. Кто что может пояснить по этому вопросу?
- << Форум