Страница 10 из 17 Первая ... 89101112 ... Последняя
Показано с 181 по 200 из 335

Тема: Самодельная замена процессора ЛПМ для SONY TC-K730ES

  1. #1 Показать/скрыть первое сообщение.
    Завсегдатай
    Автор темы
    Аватар для Turbo_man
    Регистрация
    06.04.2010
    Адрес
    Moscow
    Сообщений
    5,722

    По умолчанию Самодельная замена процессора ЛПМ для SONY TC-K730ES

    Поскольку разбирать этот аппарат я раздумал, то решил попробовать себя на ниве процессоро-строения.
    Точнее построению функционального аналога MB88517B-228N. Так сказать набраться опыта.
    Пока заводскую плату решил сохранить полностью.
    Заменил только кварц X701 на 8МГц. И ещё вакуумный дисплейчик счётчика ленты тоже дал дуба (перегретая нить накала). Его пока временно заменил на 4-х строчный LCD дисплей. В окончательном варианте думаю поставить 2-х строчный OLED (2х16). По размерам примерно подходит.
    Тут удачно пригодился проект линейного счётчика ленты из другой темы.

    ---------- Сообщение добавлено 21:04 ---------- Предыдущее сообщение было 21:01 ----------

    ЛПМ уже работает, счётчик считает.
    Из новых плюшек можно упомянуть сохранение состояния счётчика и RT при выключении питания.

    ---------- Сообщение добавлено 21:06 ---------- Предыдущее сообщение было 21:04 ----------

    Ещё сделал снятие с ПАУЗЫ кнопками PLAY или PAUSE. Давно хотел, чтобы так было.
    Автостоп, конечно, уже работает.

    ---------- Сообщение добавлено 21:09 ---------- Предыдущее сообщение было 21:06 ----------

    Кнопки управления режимами ЛПМ сохранены заводские. Т.е. с помощью АЦП считывается напряжение с управляемого делителя.

    ---------- Сообщение добавлено 21:12 ---------- Предыдущее сообщение было 21:09 ----------

    В данном ЛПМ нашёлся режим поиска по паузам. Это когда после включения обоих электромагнитов ЛПМ (HEAD PM и BRAKE PM) обесточить первый из них. Т.е. головки и прижимные ролики отводятся немного. Так что этого мне уже не избежать. Будет поиск.

    ---------- Сообщение добавлено 21:23 ---------- Предыдущее сообщение было 21:12 ----------

    Нажмите на изображение для увеличения. 

Название:	sony1.jpg 
Просмотров:	1282 
Размер:	190.7 Кб 
ID:	402351
    Нажмите на изображение для увеличения. 

Название:	sony3.jpg 
Просмотров:	1165 
Размер:	250.6 Кб 
ID:	402348
    Нажмите на изображение для увеличения. 

Название:	sony2.jpg 
Просмотров:	1180 
Размер:	251.0 Кб 
ID:	402352
    Нажмите на изображение для увеличения. 

Название:	proc_zam1.jpg 
Просмотров:	1241 
Размер:	162.5 Кб 
ID:	402349
    Нажмите на изображение для увеличения. 

Название:	proc_zam2.jpg 
Просмотров:	1180 
Размер:	171.3 Кб 
ID:	402350

    ---------- Сообщение добавлено 21:24 ---------- Предыдущее сообщение было 21:23 ----------

    Поскольку случай единичный, то специальную плату делать не планирую.
    Процессор взят из тумбочки, тоже никуда был не нужен. Уже раритет, но по количеству ног сгодился.

    ---------- Сообщение добавлено 21:29 ---------- Предыдущее сообщение было 21:24 ----------

    Осталось сделать функционал записи и REC_MUTE.
    И красивые менюшки.
    Потом хотелось бы сюда же и ATRS добавить, но ног уже не хватает. Возможно потребуется какой-то расширитель. Свободной памяти ещё вагон.

    Аппараты из этой темы и другой про счётчик разные. Один 700ES другой 730ES. Чтобы не было вопросов.

    ---------- Сообщение добавлено 21:45 ---------- Предыдущее сообщение было 21:29 ----------

    Три скорости ведущего вала думаю сделать здесь упрощённо. Просто коммутировать 3 разных кварца. Счётчик к 3-м скоростям уже адаптирован.

    ---------- Сообщение добавлено 21:52 ---------- Предыдущее сообщение было 21:45 ----------

    Переменную скорость перемотки тоже надо попробовать. Сейчас в режиме перемотки примерно 5,5В. Думаю до 9 поднять в начале процесса.

    ---------- Сообщение добавлено 22:04 ---------- Предыдущее сообщение было 21:52 ----------

    При попытке включения REC с выломанным язычком блокировки REC_LED быстро мигает в течении 2 сек и гаснет.

    ---------- Сообщение добавлено 13.08.2021 в 10:37 ---------- Предыдущее сообщение было 12.08.2021 в 22:04 ----------

    Провел опыт повышения питания мотора перемотки до 9В. Одна сторона кассеты С-110 стала перематываться за 1:50. А было 2:50. Солидная экономия.

    ---------- Сообщение добавлено 10:45 ---------- Предыдущее сообщение было 10:37 ----------

    При соотношении т/т=2.0 напряжение возвращал к штатному, чтобы не порвать ракорд. Считаю можно ещё поднять ступенями до 12В. Также ступенями потом и понижать. В соответствии с показаниями т/т.
    Последний раз редактировалось Turbo_man; 21.08.2021 в 17:45.

  2. #181
    Старый знакомый Аватар для DrLithium
    Регистрация
    24.12.2006
    Адрес
    SPb
    Сообщений
    664

    По умолчанию Re: Самодельная замена процессора ЛПМ для SONY TC-K730ES

    Цитата Сообщение от Leoniv Посмотреть сообщение
    Не тень на плетень, а ликвидация тьмы Вашей безграмотности.
    Начинается!
    А безграмотность тут при чём? Вы сами за меня написал то, что я не говорил, а то что я говорил к вам отношения не имело ни какого!


    Цитата Сообщение от Leoniv Посмотреть сообщение
    Такты не имеют никакого отношения к необходимому смещению для пропуска команды. Например, RCALL выполняется за 3 цикла, RJMP - за 2, но для их перешагивания надо использовать одинаковое смещение, равное 2. Потому что для вычисления смещения надо брать размер команды в байтах, а не время выполнения в циклах.
    Просто чушь! Снова говорю вам "грамотею", просто проверьте, если мне не верите! Вы ошиблись, вам было указано чётко на проблему, вы продолжаете упираться? Зачем?


    Цитата Сообщение от Leoniv Посмотреть сообщение
    Оголяете незнание. Время выполнения - это не размер команды в байтах.
    Откуда вы это притянули? Какое время? Где говорил про время? Что за манера говорить за других то, что ими не было сказано? Подтасовкой не занимайтесь, вы же взрослый человек! Да и какие байты? Где байты? Что с вашей памятью? Парити чек еррор?
    В третий раз: проверьте по шагам! И да разверзнуться очи ваши.


    Цитата Сообщение от Leoniv Посмотреть сообщение
    Вряд ли Вы вообще имеете дело с серьезным железом с такими знаниями.
    Режим Ванги ON?

    Теперь я кжись понял смысл вашей фразы:
    Цитата Сообщение от Leoniv Посмотреть сообщение
    Лет 15 назад упорно не хотел переходить на Си. Теперь могу уверенно сказать - был дурак. Сейчас ассемблер практически не использую.
    На СИ убежали, что асм не смогли победить?

    А если серьёзно, то я вам задал простой вопрос. Вы на него ответили? Проверили? Зачем нужно упираться, если не правы?... Куда попадёт? А? Что такое "PC" есть понимание? А что такое атомарность?

  3. #182
    Завсегдатай
    Автор темы
    Аватар для Turbo_man
    Регистрация
    06.04.2010
    Адрес
    Moscow
    Сообщений
    5,722

    По умолчанию Re: Самодельная замена процессора ЛПМ для SONY TC-K730ES

    DrLithium, давайте больше конструктива.
    Поделитесь искусством создания и использования макросов со мной. Я бы хотел тут подрасти.

    ---------- Сообщение добавлено 12:33 ---------- Предыдущее сообщение было 12:27 ----------

    Цитата Сообщение от DrLithium Посмотреть сообщение
    А бы как работает и ладно.
    А голова для того и дана, чтобы потом сделать лучше. А для начала и это сгодится. Через некоторое время уже всё сам будешь делать, если захочешь. Или сходу уже поправишь.

  4. #183
    Завсегдатай
    Регистрация
    20.04.2016
    Адрес
    Minsk
    Возраст
    22
    Сообщений
    5,588

    По умолчанию Re: Самодельная замена процессора ЛПМ для SONY TC-K730ES

    Цитата Сообщение от DrLithium Посмотреть сообщение
    А безграмотность тут при чём? Вы сами за меня написал то, что я не говорил, а то что я говорил к вам отношения не имело ни какого!
    Ок, цитирую:

    SBIC и SBIS - работают с портами ввода-вывода.
    Это сказано безграмотно, эти команды работают не только с портами, а с любыми регистрами в адресном пространстве IO и адресом до 1F.

    Цитата Сообщение от DrLithium Посмотреть сообщение
    Просто чушь! Снова говорю вам "грамотею", просто проверьте, если мне не верите! Вы ошиблись, вам было указано чётко на проблему, вы продолжаете упираться? Зачем?
    Я не ошибся, смещение для "перепрыгивания" через команду зависит от ее длины, а не времени выполнения.

    Цитата Сообщение от DrLithium Посмотреть сообщение
    Откуда вы это притянули? Какое время? Где говорил про время?
    Ок, снова цитирую:

    Здесь загвоздка м.б. в том, что команда которую надо перепрыгнуть может выполняться не за один такт, а больше. RCALL = 3, CALL = 4, RJMP = 2, JMP = 3.
    Вы говорите "может выполняться не за один такт, а больше", т.е. речь о времени выполнения. Но на самом деле надо брать длину команды. Из Вашего же примера, чтобы "перескочить" через RCALL с временем выполнения 3 цикла и через RJMP с временем выполнения 2 цикла, требуется одно и то же смещение 2. Для CALL и JMP требуется одинаковое смещение 3.

    Цитата Сообщение от DrLithium Посмотреть сообщение
    Что за манера говорить за других то, что ими не было сказано? Подтасовкой не занимайтесь, вы же взрослый человек!
    Ваши цитаты я привел, так что не надо выкручиваться.

    Цитата Сообщение от DrLithium Посмотреть сообщение
    Да и какие байты? Где байты?
    Вот где байты:

    Нажмите на изображение для увеличения. 

Название:	jmp.gif 
Просмотров:	66 
Размер:	14.1 Кб 
ID:	405763

    Для JMP длина в байтах 4 (в словах - 2). А выполняется она за 3 цикла. Смещение для пропуска команды вычисляется следующим образом: если задать PC+1, то будет выполнена следующая команда, никакого пропуска не будет. Если надо команду пропустить, то вместо +1 надо написать смещение, большее на длину пропускаемой команды. Память программ в AVR адресуется словами, поэтому при вычислении смещения надо добавлять длину в словах. Команда JMP имеет длину 4 байта (2 слова), поэтому требуется смещение 1 + 2 = 3. Для всех команд длиной 2 байта (1 слово) надо задавать смещение 1 + 1 = 2.

    Цитата Сообщение от DrLithium Посмотреть сообщение
    На СИ убежали, что асм не смогли победить?
    Победить - это как? На ассемблере писал многие годы, есть много законченных проектов. Но зря долго не переходил на Си, работать на нем эффективней.

    Цитата Сообщение от DrLithium Посмотреть сообщение
    А если серьёзно, то я вам задал простой вопрос. Вы на него ответили? Проверили?
    А что там проверять? Я и так знаю, что RJMP или NOP можно перешагнуть задав PC+2, а JMP - PC+3. И что количество циклов их выполнения тут ни при чем.

    Цитата Сообщение от DrLithium Посмотреть сообщение
    Зачем нужно упираться, если не правы?
    В чем?

    Цитата Сообщение от DrLithium Посмотреть сообщение
    Что такое "PC" есть понимание?
    Есть.

    Цитата Сообщение от DrLithium Посмотреть сообщение
    А что такое атомарность?
    Атомарная операция - это когда она выполняется целиком и не может быть прервана и выполнена частично.

    ---------- Сообщение добавлено 13:48 ---------- Предыдущее сообщение было 13:45 ----------

    Цитата Сообщение от Turbo_man Посмотреть сообщение
    Поделитесь искусством создания и использования макросов со мной. Я бы хотел тут подрасти.
    Присоединил некоторые примеры макросов:

    ---------- Сообщение добавлено 18:22 ---------- Предыдущее сообщение было 13:48 ----------

    Еще добавлю - в AVRStudio можно сделать подсветку своих макросов, как и других ключевых слов. Для этого их имена надо внести в файл AvrStudio_asm.ini, пример присоединил.
    Вложения Вложения
    Последний раз редактировалось Leoniv; 03.10.2021 в 14:26.

  5. #184
    Старый знакомый Аватар для DrLithium
    Регистрация
    24.12.2006
    Адрес
    SPb
    Сообщений
    664

    По умолчанию Re: Самодельная замена процессора ЛПМ для SONY TC-K730ES

    Цитата Сообщение от Turbo_man Посмотреть сообщение
    DrLithium, давайте больше конструктива.
    Поделитесь искусством создания и использования макросов со мной. Я бы хотел тут подрасти.
    Да не вопрос, но я не спец и один раз попал на отжерание программной памяти так, что прога в 2,5 раза больше стала весить (взял из сети чужое), сильно злоупотреблять нельзя. Токмо для избежания грабель и сбережения времени на отладку.

    А по сути, всё что мне нужно, работа по сбережению стэка (после вызова функции сразу PUSHF, перед выходом POPF) + задержки (для отладки просто убрать первые // для закоментирования, и не забыть вернуть перед компиляцией для прошивки):

    пишем сразу после .list
    Код:
    ;------------------------------------------------------------------------------------------------------
    ; МАКРОСЫ РЕГИСТРОВ
    ;------------------------------------------------------------------------------------------------------
    .MACRO PUSHF
    	PUSH R16
    	PUSH R17
    	IN R17,SREG
    	PUSH R17
    	PUSH R18
    .ENDM
    
    .MACRO POPF
    	POP	R18
    	POP	R17
    	OUT	SREG,R17
    	POP	R17
    	POP	R16
    .ENDM
    
    ;------------------------------------------------------------------------------------------------------
    ; МАКРОС ЗАДЕРЖКИ
    ;------------------------------------------------------------------------------------------------------
    .macro DELAY_MS ; Вызов: "DELAY_MS 1-1610612" (37 байт на вызов и макрос+функция = 62 байта кода)
    // /*
    	LDI   Delay4,BYTE4(@0*XTAL/1000/6)
    	LDI   Delay3,BYTE3(@0*XTAL/1000/6)
    	LDI   Delay2,BYTE2(@0*XTAL/1000/6)
    ; НАСТРОЙКА
    ;	LDI   Delay1,BYTE1(@0*XTAL/1000/6-2) ; для 4*000*000 Гц (-2) + 5 nop в функции (10мС=40000)
    ;	LDI   Delay1,BYTE1(@0*XTAL/1000/6-2) ; для 8*000*000 Гц (-2) + 3 nop в функции (10мС=80000)
    	LDI   Delay1,BYTE1(@0*XTAL/1000/6-2) ; для 16*000*000 Гц (-2) + 5 nop в функции (10мС=160000)
    ;	LDI   Delay1,BYTE1(@0*XTAL/1000/6-1) ; для 16*000*000 Гц (-1) + 0 nop в функции (10мС=160001)
    	call DELAY_M_S
    // */
    .endm
    Delay.inc (цепляем в *.asm, после переменных и констант .include "Datas.inc")
    Код:
    ;------------------------------------------------------------------------------------------------------
    ; ФУНКЦИЯ ЗАДЕРЖКИ
    ;------------------------------------------------------------------------------------------------------
    
    DELAY_M_S:
    GO_DEL:
       SUBI   Delay1,BYTE1(1)
       SBCI   Delay2,BYTE2(1)
       SBCI   Delay3,BYTE3(1)
       SBCI   Delay4,BYTE4(1)
       BRNE   GO_DEL
    ; НАСТРОЙКА
    ; nop-ы для точной настройки
    nop
    nop
    nop
    nop
    nop
       ret

    Остальное это так, для упрощения жизни можно надёргать в сети. Леонид кжись, тоже вам что-то давал.

    Цитата Сообщение от Leoniv Посмотреть сообщение
    Это сказано безграмотно, эти команды работают не только с портами, а с любыми регистрами в адресном пространстве IO и адресом до 1F.
    SBIC - Skip if Bit in I/O Register Cleared, SBIS - Skip if Bit in I/O Register is Set. Что тут ещё выдумывать? I/O - видим? Понимаем? Описанию верим? Какая тут безграмотность, если это в даташите написано? Демагогией не занимайтесь!

    , а не времени выполнения.
    Может уже хватит обсуждать то, о чём не было ни какого упоминания? Время вами притянуто за уши с потолка!

    Вы говорите "может выполняться не за один такт, а больше", т.е. речь о времени выполнения.
    В каком месте вам показалось, что я тут говорю о каком-то времени? Фантазия буйствует? "Больше" значит, за больше число тактов! Не врите, не красиво!


    Offтопик:
    Ваши цитаты я привел, так что не надо выкручиваться.


    Offтопик:

    Я? Рили? Цитаты? Да вы даже подтасовать факты не в состояние без ошибок. Не ужели вы не понимаете, что другие то же читают и видят вас насквозь?


    Вот где байты:

    Вложение 405763
    Я вам перевожу вопрос, если вы не в состоянии понять его верно. Где я, что-либо упомянул от байтах? Я вёл подобные речи? Вводил в заблуждение? Приплетал лишнее, что б запутать, а после использовать как лазейку для отмазки? Нет! Я указал вам на вашу вопиющую ошибку, которой пытаетесь подставить уважаемого человека. В результате чего, он при разном стечении обстоятельств получит разное исполнение программы:
    Нажмите на изображение для увеличения. 

Название:	2j96vevgcq.jpg 
Просмотров:	63 
Размер:	65.5 Кб 
ID:	405797

    А что там проверять? Я и так знаю, что RJMP или NOP можно перешагнуть задав PC+2, а JMP - PC+3. И что количество циклов их выполнения тут ни при чем.
    Атомарная операция - это когда она выполняется целиком и не может быть прервана и выполнена частично.
    Отлично, а вы что делаете своим PC+2? У вас компилятор на "Relative branch out of reach" начнёт ругаться, что делать будете? RJMP на JMP смените, RCALL на CALL... и смещение PC+... измените. А Turbo_man что делать будет, он точно догадается? Или всё же не поймёт, что ваш PC+2 править тоже надо? А, горе-учитель? Вы "знаете", а я вас исправляю, по этому и писал:

    Стабильно избежать проблему можно пользуясь метками:
    Код:
    brne Next_99
    jmp ReStart
    Next_99:
    Теперь вам ясен ваш прокол? Надеюсь больше объяснять ни чего не придётся? На сём давайте оставим полемику и продолжим по теме.

  6. #185
    Завсегдатай
    Автор темы
    Аватар для Turbo_man
    Регистрация
    06.04.2010
    Адрес
    Moscow
    Сообщений
    5,722

    По умолчанию Re: Самодельная замена процессора ЛПМ для SONY TC-K730ES

    Про PC+3 узнал только сегодня (у ПИКов с таким не сталкивался ещё). Спасибо, что обратили моё внимание. Как я понял, это касается лишь двух команд jump и call, но их и нет в ATmega88. С метками мне неудобно, особенно когда их надо делать много.Типа как тут:
    Код:
    ;**************************************
    DECODE:
    DEC_SONY:
    ;**************************************
    	cbr		FLAG,(1<<EST_ADR_OK)
    	clr		VIHOD_B
    	clr		VIHOD_C
    ;**************************************
    ;---------------Port B-----------------
    DECODE_CMD_MD:
    	sbrs	RC_OK,EST_RC_MD
    	rjmp	DECODE_CMD_VHS
    ;-----------
    	cpi		RC_CMD,0x8a		; STOP
    	brne	PC+2
    	sbr		VIHOD_B,(1<<STOP)
    ;-----------
    	cpi		RC_CMD,0xaa		; PLAY
    	brne	PC+2
    	sbr		VIHOD_B,(1<<PLAY)
    ;-----------
    	cpi		RC_CMD,0xea		; REW
    	brne	PC+2
    	sbr		VIHOD_B,(1<<REW)
    ;-----------
    	cpi		RC_CMD,0x9a		; FF
    	brne	PC+2
    	sbr		VIHOD_B,(1<<FF)
    ;-----------
    	cpi		RC_CMD,0x82		; <<<
    	brne	PC+2
    	sbr		VIHOD_B,(1<<REW)
    ;-----------
    	cpi		RC_CMD,0xc2		; >>>
    	brne	PC+2
    	sbr		VIHOD_B,(1<<FF)
    ;-----------
    	cpi		RC_CMD,0xca		; PAUSE
    	brne	PC+2
    	sbr		VIHOD_B,(1<<PAUSE)
    ;--------------Port C------------------
    	cpi		RC_CMD,0xda		; REC
    	brne	PC+2
    	sbr		VIHOD_C,(1<<REC)
    ;-----------
    	cpi		RC_CMD,0x86		; T.REC---REC_MUTE
    	brne	PC+2
    	sbr		VIHOD_C,(1<<REC_MUTE)
    ;-----------
    	cpi		RC_CMD,0xf8		; RESET Counter
    	brne	PC+2
    	sbr		VIHOD_C,(1<<C_RESET)
    ;-----------
    	cpi		RC_CMD,0xb2		; REPEAT--C.MEMORY
    	brne	PC+2
    	sbr		VIHOD_C,(1<<C_MEMORY)
    	rjmp	OUT_VIHOD2
    ;**************************************
    ---------- Сообщение добавлено 22:33 ---------- Предыдущее сообщение было 22:26 ----------

    Цитата Сообщение от DrLithium Посмотреть сообщение
    Я указал вам на вашу вопиющую ошибку, которой пытаетесь подставить уважаемого человека.
    Не надо горячиться. Я сам первым это употребил, т.к. в ПИКовском исходнике так и было. Только там PC заменено на $. И я очень давно так делаю. Проблем не было ни разу.
    Код:
    ;-----------------------------------------------------
    NET_PLAY_STOP_REC
    			btfss		EST_RC_MD
    			goto		$+.3
    			btfss		MD_OK
    			goto		BYPASS_OUT		
    ;-----------
    			btfss		EST_RC_VHS
    			goto		$+.3
    			btfss		VHS_OK
    			goto		BYPASS_OUT		
    ;-----------
    			btfss		EST_RC_DAT
    			goto		$+.3
    			btfss		DAT_OK
    			goto		BYPASS_OUT		
    ;-----------
    			btfss		EST_RC_CD
    			goto		$+.3
    			btfss		CD_OK
    			goto		BYPASS_OUT
    ---------- Сообщение добавлено 22:44 ---------- Предыдущее сообщение было 22:33 ----------


    Offтопик:
    Кстати, а напишите на СИ это. Сравним.


    ---------- Сообщение добавлено 22:50 ---------- Предыдущее сообщение было 22:44 ----------

    Нужно переходить к третьему пункту моего плана. Внедрить весь этот код про ДУ в тело основной программы по ЛПМ.
    Цитата Сообщение от Turbo_man Посмотреть сообщение
    В общем тактику дальнейших действий я вижу такую:
    1. в отдельном PIC-е PIC16F1823 отлаживаю весь алгоритм по работе с тремя четырьмя (можно подумать будет об увеличении) пультами ДУ SONY с возможностью их дистанционно активировать/деактивировать. Этот PIC можно будет предложить тем, кому это нужно в своих проектах.
    2. переношу весь этот функционал в нынешнюю ATmega88, которая сейчас только делит клок 15,750 МГц на 3, 4 и 6. Что позволяет рассчитывать на успех и получить опыт написания софта для АТмег.
    3. попытаюсь впихнуть весь новый функционал ДУ в нынешний PIC16F877A, что позволит получить доп. опыт в интеграции многофунциональных устройств в одном МК, и в перспективе иметь возможность заменить ATmega88 на что-то иное.
    Предчувствую солидную битву. Первых 2 пункта плана потребовали 9 дней.

  7. #186
    Завсегдатай
    Регистрация
    20.04.2016
    Адрес
    Minsk
    Возраст
    22
    Сообщений
    5,588

    По умолчанию Re: Самодельная замена процессора ЛПМ для SONY TC-K730ES

    Цитата Сообщение от DrLithium Посмотреть сообщение
    один раз попал на отжерание программной памяти так, что прога в 2,5 раза больше стала весить
    Макросы подобны inline-функциям Си, тело макроса вставляется целиком. В отличие от вызова подпрограммы памяти расходуется больше. Но зато и скорость выполнения выше, нет расходов на call/ret. Извечная борьба между размером кода и скоростью.

    Объемных макросов я никогда не применял, а мелкие довольно сильно упрощают жизнь. Например, загрузка регистровых пар непосредственным операндом (ldx, ldy, ldz), чтение/сохранение в памяти пары регистров (ldsx, stsx и т.д.), сложение с непосредственным операндом (addi), загрузка адреса таблицы в Z умноженным на 2 адресом (table) и прочее.

    Цитата Сообщение от DrLithium Посмотреть сообщение
    А по сути, всё что мне нужно, работа по сбережению стэка (после вызова функции сразу PUSHF, перед выходом POPF)
    Штука полезная, но очень специальная, сохраняется только конкретный набор регистров. Можно, конечно, написать несколько вариантов этого макроса.

    Цитата Сообщение от DrLithium Посмотреть сообщение
    + задержки
    Подобного вида задержку лучше реализовать вызовом подпрограммы (он есть и в макросе), а параметр вычислять препроцессором по формуле, заданной с помощью define. В ней должна фигурировать частота кварца.

    Цитата Сообщение от DrLithium Посмотреть сообщение
    SBIC - Skip if Bit in I/O Register Cleared, SBIS - Skip if Bit in I/O Register is Set. Что тут ещё выдумывать? I/O - видим? Понимаем? Описанию верим? Какая тут безграмотность, если это в даташите написано? Демагогией не занимайтесь!
    Описанию верю. Но не вижу в нем слова "port". Вы же писали, цитирую: "SBIC и SBIS - работают с портами ввода-вывода." Вот я и возразил, что не только с портами, в с любыми регистрами в адресном пространстве I/O и адресом до 1F.

    Цитата Сообщение от DrLithium Посмотреть сообщение
    В каком месте вам показалось, что я тут говорю о каком-то времени?
    Вот в этом, цитирую: "Здесь загвоздка м.б. в том, что команда которую надо перепрыгнуть может выполняться не за один такт, а больше. RCALL = 3, CALL = 4, RJMP = 2, JMP = 3." Что измеряют в тактах? Время выполнения команд. Вы сказали, что проблема в том, что оно разное. А я возразил, что проблема в другом. Не во времени выполнения, а в разной длине команд в байтах. Именно длина команды определяет нужное смещение для ее перепрыгивания.

    Цитата Сообщение от DrLithium Посмотреть сообщение
    Где я, что-либо упомянул от байтах? Я вёл подобные речи? Вводил в заблуждение? Приплетал лишнее, что б запутать, а после использовать как лазейку для отмазки? Нет!
    Да. Вы зачем-то приплели количество тактов на команду и пытались ввести людей в заблуждение, что оно определяет смещение, необходимое для пропуска данной команды.

    Цитата Сообщение от DrLithium Посмотреть сообщение
    Отлично, а вы что делаете своим PC+2? У вас компилятор на "Relative branch out of reach" начнёт ругаться, что делать будете? RJMP на JMP смените, RCALL на CALL... и смещение PC+... измените. А Turbo_man что делать будет, он точно догадается? Или всё же не поймёт, что ваш PC+2 править тоже надо? А, горе-учитель? Вы "знаете", а я вас исправляю, по этому и писал:

    Стабильно избежать проблему можно пользуясь метками:
    Думаю, что Turbo_man прекрасно понимает (upd: выше он подтвердил это), что для команд разной длины понадобятся разные смещения. А про метки я писал раньше. У них тоже есть минусы - для них надо придумывать уникальные имена, да и выглядит такой код некрасиво. В большинстве случаев достаточно перехода RJMP, поэтому вполне можно использовать смещение. А самый лучший вариант я тоже советовал - использовать макрос.

    ---------- Сообщение добавлено 23:35 ---------- Предыдущее сообщение было 23:15 ----------

    Цитата Сообщение от Turbo_man Посмотреть сообщение
    Кстати, а напишите на СИ это. Сравним.
    Типа так:

    Код:
    Flag_EST_ADR_OK = 0;
    Out_B = 0;
    Out_C = 0;
    if(RC_Ok & EST_RC_MD)
    {
      switch(RC_Cmd)
      {
        case CMD_STOP:   Out_B |= M_STOP;   break;
        case CMD_PLAY:   Out_B |= M_PLAY;   break;
        case CMD_REW1:
        case CMD_REW2:   Out_B |= M_REW;    break;
        case CMD_FF1:
        case CMD_FF2:    Out_B |= M_FF;     break;
        case CMD_PAUSE:  Out_B |= M_PAUSE;  break;
        case CMD_REC:    Out_C |= M_REC;    break;
        case CMD_MUTE:   Out_C |= M_MUTE;   break;
        case CMD_RESET:  Out_C |= M_RESET;  break;
        case CMD_MEMORY: Out_C |= M_MEMORY; break;
      }
    }
    P.S. Не используйте в коде такого безобразия, как cpi RC_CMD,0x8a. Числовые константы надо определить заранее:

    Код:
    .equ	CMD_STOP	= 0x8A		;RC command "Stop"
    .equ	CMD_PLAY	= 0xAA		;RC command "Play"
    ...
    Последний раз редактировалось Leoniv; 03.10.2021 в 23:51.

  8. #187
    Завсегдатай
    Автор темы
    Аватар для Turbo_man
    Регистрация
    06.04.2010
    Адрес
    Moscow
    Сообщений
    5,722

    По умолчанию Re: Самодельная замена процессора ЛПМ для SONY TC-K730ES

    Цитата Сообщение от Leoniv Посмотреть сообщение
    Числовые константы надо определить заранее
    Почти всегда так и делаю. Но тут было лень, т.к. почти все команды не совпадают. Т.е. придётся писать MD_STOP = 0x8a CD_STOP = 0x8e и так 40 раз. Мой разум возмутился.

  9. #188
    Старый знакомый Аватар для DrLithium
    Регистрация
    24.12.2006
    Адрес
    SPb
    Сообщений
    664

    По умолчанию Re: Самодельная замена процессора ЛПМ для SONY TC-K730ES

    Цитата Сообщение от Leoniv Посмотреть сообщение
    Объемных макросов я никогда не применял, а мелкие довольно сильно упрощают жизнь.
    Согласен. Мне нравиться тут, то что кол-во ошибок по невнимательности резко падает.


    Цитата Сообщение от Leoniv Посмотреть сообщение
    Подобного вида задержку лучше реализовать вызовом подпрограммы (он есть и в макросе), а параметр вычислять препроцессором по формуле, заданной с помощью define. В ней должна фигурировать частота кварца.
    Раньше так и делал, но когда столкнулся с диаграммой задержек в той же прошивке 052 для LM6204, понял, надо что-то менять. Тут ассемблер подводит именно так как вы на него и справедливо ругаетесь - долго и нудно это вычислять каждый раз. А этот макрос+функция позволяет малой кровью решить вопрос навсегда, одна строка с аргументом как на СИ.


    Цитата Сообщение от Leoniv Посмотреть сообщение
    Вот я и возразил, что не только с портами, в с любыми регистрами в адресном пространстве I/O и адресом до 1F.
    Ладно, пусть так, но мне за 14 лет ни разу не пригодилось использовать иначе. Да и в примерах видел применение только для портов. На эксперименты времени точно не хватит.


    Цитата Сообщение от Leoniv Посмотреть сообщение
    Что измеряют в тактах? Время выполнения команд.
    Звучит красиво, но по сути такт резиновый, а время обычно понятие точное. Я стараюсь не связывать время и такты для МК, т.к. время в данном случае абстрактно. Можно сказать "время исполнения уменьшается", но я предпочту "тактов потребуется меньше".

    Цитата Сообщение от Leoniv Посмотреть сообщение
    Время выполнения команд. Вы сказали, что проблема в том, что оно разное.
    Гдя я такое сказал? Ссылку приведите. Я по прежнему утверждаю, что команды выполняются за разное кол-во тактов!

    Цитата Сообщение от Leoniv Посмотреть сообщение
    А я возразил, что проблема в другом. Не во времени выполнения, а в разной длине команд в байтах. Именно длина команды определяет нужное смещение для ее перепрыгивания.
    Вы за меня сказали и сами ответили. Зачем так делать?
    Именно я вам и указал на то, что PC+2 может не хватить! Посмотрите уже в даташите колонку "Operation". А на картинке показал последствия того, что происходит, если вы попадаете внутрь длиной команды. По этому указал на то, что PC+2 плохая идея. А если есть желание понять, то можно посмотреть соответствующий код исполняемому, в lss файле. Есть смысл вам мне рассказывать то, что я и так знаю? Наверное уже хватит об этом в 10-й раз.

    Цитата Сообщение от Leoniv Посмотреть сообщение
    Да. Вы зачем-то приплели количество тактов на команду и пытались ввести людей в заблуждение,...
    Уймитесь, а? Преплёл? А вы не поняли зачем? Ввёл в заблуждение, что б избежать ошибки с вашей стороны. Да просто, что б вы поняли наконец, что короткие команды можно перепрыгнуть без проблем, а длинные нет! Что тут не ясного? Попросил по-человечески проверьте код на исполнение - вы встали в позу.

    Цитата Сообщение от Leoniv Посмотреть сообщение
    ...что оно определяет смещение, необходимое для пропуска данной команды.
    Где я такое писал? Смещение = кол-во тактов? Цитату в студию! Я обратил ваше внимание на то, что можно вашими глупым действием попасть внутрь части команды! Наглядно привёл на картинке то, куда попадает фокус программы. Что тут не понятного? Снова врёте? Вы адекватный человек?


    Offтопик:
    Леонид, может хватит уже? Это троллинг? Для чего вам это нужно?

  10. #189
    Завсегдатай
    Регистрация
    20.04.2016
    Адрес
    Minsk
    Возраст
    22
    Сообщений
    5,588

    По умолчанию Re: Самодельная замена процессора ЛПМ для SONY TC-K730ES

    Цитата Сообщение от Turbo_man Посмотреть сообщение
    Почти всегда так и делаю. Но тут было лень, т.к. почти все команды не совпадают. Т.е. придётся писать MD_STOP = 0x8a CD_STOP = 0x8e и так 40 раз. Мой разум возмутился.
    Раз так, то может архитектуру программы изменить? Например, коды каждого пульта по своей таблице перекодировать во внутренние коды программы вида CODE_STOP, CODE_PLAY и т.д. Тогда в программе будет всего один фрагмент с анализом этих кодов и матрицей переходов. А табличная перекодировка - это всего несколько строчек программы. Именованных констант для каждой кнопки каждого пульта тогда вообще не потребуется. Я даже имея только один пульт всегда делаю такую перекодировку. Нигде в программе не использую сырые коды пульта, а использую свои внутренние коды. Местная клавиатура тоже их использует. Тогда сменить пульт очень просто - меняется лишь таблица.

    Цитата Сообщение от DrLithium Посмотреть сообщение
    но по сути такт резиновый
    Это что-то новенькое... Такт всегда точный, это один период тактовой частоты контроллера.

    Цитата Сообщение от DrLithium Посмотреть сообщение
    Я стараюсь не связывать время и такты для МК
    А как тогда вычисляете время? В документации количество тактов на команду указывается как раз для того, чтобы вычислять время выполнения. Это делает и симулятор, там время индицируется, оно равно количеству тактов, умноженному на период тактовой частоты.

    Если говорить совсем корректно, то надо употреблять не слово "такт", а слово "цикл". Потому что командный цикл у разных процессоров может содержать разное количество тактов. Например, в классических 8051 было 12 тактов, у PIC, по-моему, 4. Но для AVR эти понятия идентичны, у него командный цикл равен одному периоду тактового сигнала.

    Цитата Сообщение от DrLithium Посмотреть сообщение
    Именно я вам и указал на то, что PC+2 может не хватить!
    Верно, может не хватить. Но не по той причине, которую указали Вы (что команды выполняются за разное количество тактов). А потому, что команды имеют разную длину в памяти. Длина команд в байтах (или словах) не равна количеству тактов. При вычислении смещения надо брать длину команд, а не количество тактов.

    Цитата Сообщение от DrLithium Посмотреть сообщение
    По этому указал на то, что PC+2 плохая идея.
    Идея нормальная, вполне можно использовать. Особенно в макросах. Конечно, требует внимательности, как всё в ассемблере.

    Цитата Сообщение от DrLithium Посмотреть сообщение
    Да просто, что б вы поняли наконец, что короткие команды можно перепрыгнуть без проблем, а длинные нет!
    Это я прекрасно понимаю. Но понятия "длинные" и "короткие" у Вас неправильные. Здесь имеет значение длина команды в байтах, а не в тактах. А это разные значения. Например, длина команд RCALL и RJMP в тактах разная, а в байтах - одинаковая, и перепрыгиваются они одинаково. Хоть и выполняются разное количество тактов.

    Цитата Сообщение от DrLithium Посмотреть сообщение
    Где я такое писал? Смещение = кол-во тактов?
    Такого Вы не писали. Зато писали другое: "Здесь загвоздка м.б. в том, что команда которую надо перепрыгнуть может выполняться не за один такт, а больше. RCALL = 3, CALL = 4, RJMP = 2, JMP = 3." На самом деле, загвоздка совсем не в этом, а в разной длине команд в памяти.

    Никто не спорит с тем, что перепрыгивать разные команды надо с помощью разного смещения. Но количество тактов команды к этому делу не имеет никакого отношения, Вы их приплели ошибочно, но упорно не хотите это признать. Упорство, конечно, хорошее качество, помогает достичь цели, но в подобных случаях оно чести не делает.

  11. #190
    Старый знакомый Аватар для DrLithium
    Регистрация
    24.12.2006
    Адрес
    SPb
    Сообщений
    664

    По умолчанию Re: Самодельная замена процессора ЛПМ для SONY TC-K730ES

    Цитата Сообщение от Leoniv Посмотреть сообщение
    Это что-то новенькое... Такт всегда точный, это один период тактовой частоты контроллера.
    Такт это зависимая от частоты переменная. Что тут не понятного? Что тут нового? Почему каждый раз надо всё разжёвывать?

    Цитата Сообщение от Leoniv Посмотреть сообщение
    А как тогда вычисляете время?
    Просто считаю как все нормальные люди.
    Цитата Сообщение от Leoniv Посмотреть сообщение
    Если говорить совсем корректно, то надо употреблять не слово "такт", а слово "цикл".
    Тогда уже сразу "период" или "командный период", "цикл" в общении будет путать с функцией. Да и о какой корректности можно вести речи, если пол ютьюба говрит ай-ту-си, вместо ай-квадрат-си? Видят на логотипе символ "квадрата", а произносят "ту" или "два"!

    Цитата Сообщение от Leoniv Посмотреть сообщение
    ...у PIC, по-моему, 4
    Слышал об этом давно. Тут лучше сам Владимир раскажет. Как я понял, в какой-то момент они подтянулись до 1:1.

    Цитата Сообщение от Leoniv Посмотреть сообщение
    Но не по той причине, которую указали Вы (что команды выполняются за разное количество тактов). А потому, что команды имеют разную длину в памяти.
    Я не называл ни каких причин, вообще. Только указал "жирность" команды и предлагал проверить в отладчике. А вам даже коммент в коде написал, куда и что попадает, или вы этого не видели? Где вы эти невидимые и несказанные связи постоянно находите? Ясен пень, что б адресовать тот же JMP к 16-битному адресному пространству нужно более одного такта, т.к. команда 16-и битная, а ядро 8-и, приходится разбивать и в lss это красноречиво видно. Это разве не ясно? Вы на это всю дорогу намекали? Зачем? Все и так знают. Хватит писать очевидное. Давайте поставим точку.


    Цитата Сообщение от Leoniv Посмотреть сообщение
    Идея нормальная, вполне можно использовать.
    А после годового перерыва, вы в состоянии будете вспомнить, что надо будет исправлять и это? Я нет. У меня подобные тонкости часто атрофируются, приходится рубить на корню.


    Цитата Сообщение от Leoniv Посмотреть сообщение
    Но понятия "длинные" и "короткие" у Вас неправильные. Здесь имеет значение длина команды в байтах, а не в тактах. А это разные значения. Например, длина команд RCALL и RJMP в тактах разная, а в байтах - одинаковая, и перепрыгиваются они одинаково. Хоть и выполняются разное количество тактов.
    Написал об этом выше. Я ни где не указывал, что они перепрыгивают по разному - это ваши фантазии и не верное толкование прочитанного. А наоборот предлагал убедиться в этом предоставив кусок кода! Хватит, уже пора прекратить переливать из пустого в порожнее, по 20-му кругу!
    Это троллинг? Вам время девать некуда?


    Цитата Сообщение от Leoniv Посмотреть сообщение
    Такого Вы не писали. Зато писали другое: "Здесь загвоздка м.б. в том, что команда которую надо перепрыгнуть может выполняться не за один такт, а больше. RCALL = 3, CALL = 4, RJMP = 2, JMP = 3." На самом деле, загвоздка совсем не в этом, а в разной длине команд в памяти.
    Это клоки в даташите, просто проверьте, они там точно такие. А вот где я указал, что для "JMP" нужно всегда делать "PC+3", а "CALL" "PC+4", что-то не вижу. Может вы найдёте? Продолжу смою мысль из цитаты: ...По этому очевидно, что команды исполняемая за больше количество клоков могут быть двух-байтные. Не дописал мысль, но думал это и так всем понятно или не интересно в данном случае. "Умный не скажет, дурак не поймёт" - но тут оказались вы. Длинное исполнение команды даёт повод проверить сколько надо добавлять к программному счётчику, и дал код для проверки, для корректной перепрыжки. В даташите явно не пишется какая команда двух-байтная и новичку это не ясно. Указал на признак - кол-во клоков. И пусть это упущение с моей стороны, но ваше пресловутое "PC+2" - просто ни в какие ворота! Это порождение бага который в состоянии отъесть недели поиска ошибки! Я всего лишь обратил внимание на проблему, вам же надо было копать и быть занудой до последнего. Ух и устал я от вас. Раскопки закончили? Вывели меня на чистую воду? Довольны?

    ====================

    Теперь по делу.
    Таки заработала перемотка+запись = отложенное воспроизведение при достижении нуля, в LM6402A-052. Правда ещё придётся повозиться, т.к. F.REW.+REC отрабатывает, а F.F.+REC, капризничает даже на родном. М.б. дело в тормозах? Вариант, после замены движка скорость чуть упала и нет гарантированного перехода через ноль в "0001" или чуть больше по счётчику, т.к. должна отработать обратная перемотка до точного нуля. Проверю...

    А так оказалось, остальное сделал верно. Проблема же была в таймингах исходящих сигналов. Оказалось, что сигнал "Memory PLAY" и светодиод "STOP" надо менять одновременно с точностью до единиц миллисекунд! Для выявления пришлось ваять на базе ардуино нано 16-и битный Логический Анализатор + конвертор данных под Excel. Получился дремучий и тем не менее достаточный девайс, т.к. старый у меня имел максимальное время измерения 0,7 секунды. Новый ЛА заказывать для разового замера как-то жаль.

  12. #191
    Завсегдатай Аватар для Pyku_He_oTTyda
    Регистрация
    22.06.2005
    Адрес
    Москва
    Возраст
    52
    Сообщений
    4,563

    По умолчанию Re: Самодельная замена процессора ЛПМ для SONY TC-K730ES

    http://www.powergraph.ru/
    я часто этой софтиной пользуюсь, когда что то посмотреть не быстое
    Андрей

  13. #192
    Старый знакомый Аватар для DrLithium
    Регистрация
    24.12.2006
    Адрес
    SPb
    Сообщений
    664

    По умолчанию Re: Самодельная замена процессора ЛПМ для SONY TC-K730ES

    Цитата Сообщение от Pyku_He_oTTyda Посмотреть сообщение
    я часто этой софтиной пользуюсь, когда что то посмотреть не быстое
    Спасибо за наводку.
    У меня вопрос был в том, как 16-ь каналов проконтроллить на коленке. Уровни TTL и защиту не делал, навесил по 330 ом на входы. Определил: формат данных в памяти 4-е байта на замер, два - данные с портов + два - номер периода = 200 замеров, для 800-а байт ОЗУ (остальные отдал проге, массивы там всякие), придумал формат файла и собственно набросал макрос в Excel-е. Разница между родным 6402 и репликой видна, состояний замеров единиц 50 получаю. Задавал период 1мс + 64000 циклов. Фигня по сравнению брендовыми, но скорость отслеживания проблемы поднялась в разы.

  14. #193
    Завсегдатай
    Автор темы
    Аватар для Turbo_man
    Регистрация
    06.04.2010
    Адрес
    Moscow
    Сообщений
    5,722

    По умолчанию Re: Самодельная замена процессора ЛПМ для SONY TC-K730ES

    Цитата Сообщение от Leoniv Посмотреть сообщение
    Раз так, то может архитектуру программы изменить?
    Согласен, при удобном случае так и сделаю. Особенно если понадобится код сжать или добавить новые пульты ДУ SONY.
    Правда новую переменную Nom_DU придётся вводить, иначе как по табличкам прыгать?
    Табличками у себя в ПИКах пользуюсь постоянно, но в Атмеловском проекте ещё не пробовал.

    ---------- Сообщение добавлено 12:52 ---------- Предыдущее сообщение было 12:50 ----------


    Offтопик:
    DrLithium, мне тоже показалось, что у вас прозвучала зависимость длины перескока от числа тактов. Давайте считать это опиской, или добросовестным заблуждением. И закончим на этом.


    ---------- Сообщение добавлено 12:55 ---------- Предыдущее сообщение было 12:52 ----------


    Offтопик:
    Цитата Сообщение от DrLithium Посмотреть сообщение
    Здесь загвоздка м.б. в том, что команда которую надо перепрыгнуть может выполняться не за один такт, а больше.
    Вот эта фраза на это намекала.


    ---------- Сообщение добавлено 16:44 ---------- Предыдущее сообщение было 12:55 ----------

    Цитата Сообщение от DrLithium Посмотреть сообщение
    Таки заработала перемотка+запись = отложенное воспроизведение при достижении нуля
    может перемотка+воспроизведение?

    ---------- Сообщение добавлено 16:46 ---------- Предыдущее сообщение было 16:44 ----------

    Цитата Сообщение от DrLithium Посмотреть сообщение
    Правда ещё придётся повозиться, т.к. F.REW.+REC отрабатывает, а F.F.+REC, капризничает даже на родном. М.б. дело в тормозах?
    Не знаком с вашим ZX-9. Там именно запись нажимать нужно? Если да, то это не очень логичное решение у Наковцев.

    ---------- Сообщение добавлено 16:56 ---------- Предыдущее сообщение было 16:46 ----------

    И впрямь.
    Нажмите на изображение для увеличения. 

Название:	zx9.jpg 
Просмотров:	53 
Размер:	53.8 Кб 
ID:	405874

  15. #194
    Старый знакомый Аватар для DrLithium
    Регистрация
    24.12.2006
    Адрес
    SPb
    Сообщений
    664

    По умолчанию Re: Самодельная замена процессора ЛПМ для SONY TC-K730ES


    Offтопик:
    Цитата Сообщение от Turbo_man Посмотреть сообщение
    Offтопик:
    DrLithium, мне тоже показалось, что у вас прозвучала зависимость длины перескока от числа тактов. Давайте считать это опиской, или добросовестным заблуждением. И закончим на этом.
    Я мог бы явно написать PC+... для каждой команды и ввести в заблуждение, но в даташите другой информации дающей точное представление на сколько единиц надо увеличивать счётчик, нет. Для перепрыжки через CALL я должен был бы написать PC+5? А я это сделал? По этому дал то, что было, что б можно было понять, на что надо обратить внимание, что команда больше обычной. При этом просил проверить код самим и сделать выводы. Зная мою дотошность я бы так и написал "вот, мол, значения для PC+... берите тупо из даташита" - вот тогда бы я ввёл в заблуждение. Извините, но лучшего предложить не мог. При этом каждый сам мог открыть даташить и увидеть название колонки #clocks. Решение проблемы дал, принимать его или нет каждый решает сам для себя.

    Цитата Сообщение от Turbo_man Посмотреть сообщение
    Вот эта фраза на это намекала.
    Намекала на то, что б проверить, а сколько надо? Просто пройтись по шагам и увидеть для какой команды сколько надо, я даже подписал два варианта, остальные вы сами! Или мне надо было пройтись по каждой команде и дать значение? Я же понимал, что будет не соответствие, дай я вам PC+4 или PC+5 явно! Схалтурил, бывает или написал это специально, что б увидеть результат: станут проверять или нет? Но на такой "взрыв бомбы" я ни как не рассчитывал - просто польстило.



    Цитата Сообщение от Turbo_man Посмотреть сообщение
    может перемотка+воспроизведение?
    Цитата Сообщение от Turbo_man Посмотреть сообщение
    И впрямь.
    Точно перемотка+запись и да, в разделе "Auto Play Feature".

    Цитата Сообщение от Turbo_man Посмотреть сообщение
    Не знаком с вашим ZX-9. Там именно запись нажимать нужно? Если да, то это не очень логичное решение у Наковцев.
    Возможно не логичное, но мало кнопок, а функций хотелось больше. Как я понял со счётчика выделен отдельный сигнал "UP" для взведения триггера... вне МК и это... IC309 на MAIN P.C.B., т.е. вообще на другой плате! Вокруг аж 12-ь диодов! До конца я вникать не стал, можно было бы в протэусе набросать и посмотреть. Тут же реализован возврат к нулю после теста ленты по кнопке "RESET". Почему это не сделано внутри того же счётчика, не понятно. Не ужели динамическая индикация и сам счёт, у Японцев заняли столько места? В счётчике используется та же LM6402A.

  16. #195
    Завсегдатай
    Автор темы
    Аватар для Turbo_man
    Регистрация
    06.04.2010
    Адрес
    Moscow
    Сообщений
    5,722

    По умолчанию Re: Самодельная замена процессора ЛПМ для SONY TC-K730ES

    Удалось-таки в симуляторе "скрестить ужа с ежом". Т.е. ИК ДУ с полнофункциональным процессором ЛПМ и линейным счётчиком ленты с часами реального времени. Но пока с ограничениями. Пока приходится запрещать прерывания от подкассетников и ещё двух таймеров на время приёма посылки ИК ДУ. Теперь буду думать как оптимизировать исполнение кода, чтобы можно было не делать такого запрета.

    Сейчас использую 6 разных прерываний: 3 от 3-х таймеров, 2 от схем захвата и 1 от смены состояния входа ИК-приёмника.

    ---------- Сообщение добавлено 10:44 ---------- Предыдущее сообщение было 10:07 ----------

    Кстати, в этой версии ещё поправил код сравнения адресов и команд ДУ. Теперь коды команд пультов выбираются таблично. И все адреса пультов имеют определения в заголовке. Код сократился на 55 команд. Про таблицы я ошибся. Их не 10, как сперва думал, а 12, т.к. 2 дополнительных от синонимов кнопок добавились.

    ---------- Сообщение добавлено 11:45 ---------- Предыдущее сообщение было 10:44 ----------


    Offтопик:
    Цитата Сообщение от DrLithium Посмотреть сообщение
    Я же понимал, что будет не соответствие, дай я вам PC+4 или PC+5 явно!
    Это неверно. Для RJMP и RCALL надо PC+2, а для JMP и CALL надо PC+3. Или я опять неправильно вас понял? Вы излагаете свои мысли неоднозначно и как-то витиевато.


    ---------- Сообщение добавлено 11:51 ---------- Предыдущее сообщение было 11:45 ----------


    Offтопик:
    Цитата Сообщение от DrLithium Посмотреть сообщение
    Схалтурил, бывает или написал это специально, что б увидеть результат: станут проверять или нет?
    Там нечего проверять. Леонид прав. А упоминание циклов тактов всё только запутало. На них и вовсе необязательно смотреть. Только для рассчётов времени нужно это делать при выравнивании времени исполнения по разным веткам. Мне это не нужно. У меня таких задач и нет.


    ---------- Сообщение добавлено 12:44 ---------- Предыдущее сообщение было 11:51 ----------

    Забыл написать, вчера заменил платку с PIC-ом (ДУ) и платку с простой программой для ATmega88 (делитель кварца) на другую платку с ATmega88 с новой программой ДУ+делитель.
    Проверка показала полную работоспособность всех функций.
    Последний раз редактировалось Turbo_man; 05.10.2021 в 12:12.

  17. #196
    Завсегдатай
    Регистрация
    20.04.2016
    Адрес
    Minsk
    Возраст
    22
    Сообщений
    5,588

    По умолчанию Re: Самодельная замена процессора ЛПМ для SONY TC-K730ES

    Цитата Сообщение от DrLithium Посмотреть сообщение
    но в даташите другой информации дающей точное представление на сколько единиц надо увеличивать счётчик, нет.
    В datasheet приведено лишь краткое описание команд. Чтобы просто знать, какие команды поддерживает данный кристалл. А полное описание команд находится в документе от Atmel "AVR Instruction Set Manual" и в Help от AVRStudio. Там для каждой команды указана ее длина в словах и байтах. Поэтому совершенно четко известно, какое смещение требуется для пропуска любой команды - это ее длина в словах +1.

    Нажмите на изображение для увеличения. 

Название:	call.gif 
Просмотров:	51 
Размер:	28.5 Кб 
ID:	405969

    Смысл +1 тоже предельно ясен - это смещение программного счетчика на начало следующей команды относительно начала текущей. Мы используем для перехода команды типа breq, brne и подобные, а они имеют длину 1 слово. Вот и добавляем 1, это длина самой команды перехода. Если бы мы хотели пропустить команду с помощью jmp (что на практике бессмысленно), то пришлось бы добавлять 2.
    Последний раз редактировалось Leoniv; 05.10.2021 в 13:54.

  18. #197
    Завсегдатай
    Автор темы
    Аватар для Turbo_man
    Регистрация
    06.04.2010
    Адрес
    Moscow
    Сообщений
    5,722

    По умолчанию Re: Самодельная замена процессора ЛПМ для SONY TC-K730ES

    В общем первое приближение софта готово. Завтра попробую вживую потестить. Но прежде придётся изменить разводку перемычек у ножек ПИКа. Т.к. сейчас вход INT у него занят и его нужно освободить. Изначально не думал, что буду и ДУ сюда впихивать. Заодно и ножки для шины I2C тоже освобожу для связи с ADAU1701 и USART до кучи.

  19. #198
    Старый знакомый Аватар для DrLithium
    Регистрация
    24.12.2006
    Адрес
    SPb
    Сообщений
    664

    По умолчанию Re: Самодельная замена процессора ЛПМ для SONY TC-K730ES


    Offтопик:
    Цитата Сообщение от Turbo_man Посмотреть сообщение
    Это неверно. Для RJMP и RCALL надо PC+2, а для JMP и CALL надо PC+3. Или я опять неправильно вас понял? Вы излагаете свои мысли неоднозначно и как-то витиевато.
    Почему так случилось... Я хорошо помню, что была проблема. Странная и не понятная. Пришлось потратить время на поиски того, что же случилось, т.к. учебнику по которому я изучал ассемблер, то же давал PC+2. Вопрос: c какой силой врезается в память такая проблема? При этом сопутствующие детали затмеваются, на фоне основной проблемы. За давностью события, твёрдо всего в мелочах помнить не возможно и особенно при постоянной работой над другими проектами. Ранее писал, что у меня редкое (по событиям) атрофируется за не надобностью. Позже, мне пришлось приложить усилия, что б вспомнить что, как и почему. Я написал на какой-то момент времени лишь то, что всплыло в памяти и именно по этому не писал высосанного из пальца. Я помнил что было, но как оно связано точно не помнил. На фоне проблемы не придал значения связям и уточнениям (теперь текст поправил). Согласитесь, что основной приоритет был в том, что б другие не потратили времени, на грабли на которые наступил я. А если б наступили другие, то стали бы ругать ассемблер по круче Леонида. Вопрос я решил, а позже получаю обвинение в том, что не понимаю того, что я решил! Если б я ошибался, то на момент решения, то пропускал в силу не понимания... целые команды! Что согласитесь, было бы более чем странно. Заметили не логичность в изложении, спасибо. Исправил, теперь д.б. понятнее.

    Цитата Сообщение от Turbo_man Посмотреть сообщение
    Там нечего проверять. Леонид прав. А упоминание циклов тактов всё только запутало. На них и вовсе необязательно смотреть. Только для рассчётов времени нужно это делать при выравнивании времени исполнения по разным веткам. Мне это не нужно. У меня таких задач и нет.
    Тут вообще не понял. Я то писал "такты" и ни каких "циклов тактов", подразумевая равенство шагу "Cycle counter". Это так сильно путает? Тут для меня нет разницы, т.к. не работал на PIC-ах. А на AVR tiny, с чего начинал, нет CALL и JMP, т.ч. команды исполнялись за один шаг "Cycle counter", по этому крепко засело в мозгу. Или вы о чём-то другом? Всегда же можно прямо спросить: "Что вы имеете ввиду под тактами?" - я реально тут не вижу проблемы для понимания. Просто привычка так говорить.

    Цитата Сообщение от Leoniv Посмотреть сообщение
    Поэтому совершенно четко известно, какое смещение требуется для пропуска любой команды - это ее длина в словах +1.
    Разумеется есть чёткое указание в документе, но он у вас м.б. под рукой, а у новичка в AVR ассемблере? А правильный вопрос у него сформируется? Вот у меня хелп студии пишет "На данном компьютере содержимое не найдено.". А в книге на его столе об это точно где-то написано? Т.е. придти к этой информации можно, но не сразу. Только где говорят, что вам будет надо для изучения в полном объёме? Только на форумах помогут, если ещё и спрашивать правильно. Согласитесь, что приходится выцарапывать и спотыкаться?

    Я думаю проблему обсосали со всех сторон и расставили точки над i. Я был не точен в изложении, исправил текст и был излишне горяч, возраст, нервы и характер портится. Соррь, не со зла. Жаль только то, что каша толком не варится, две страницы крайне не нужных обсуждений (по крайней мере для меня). Просто жаль тратить свою жизнь на подобное. Вопрос решался корректным уточнением, в размере одного-двух предложений.


    ========================

    Проверил догадку о не отработке воспроизведения после "перемотка вперёд+запись". После запланированной остановки при нуле и после пробегания нулевого значения по инерции, должна включаться противоположная перемотка. Но перемотка запускается и при нулевом значении... Т.е. счётчик не ушел с нулевой отметки и перемотка не останавливается, т.к. алгоритм счётчика ожидает повторного достижения нуля чего уже произойти не может.

    Счётчик останавливается на нуле из-за меньшей скорости перемотки после замены движка. Стоило в момент срабатывания "STOP" на нуле зубочисткой чуть прокрутить датчик до значения "0001", тут же всё сработало корректно.

    Странно, но "перемотка назад+запись" иногда срабатывает корректно при нуле на счётчике, а иногда на нуле срабатывает... "перемотка назад". Видимо условие срабатывает по знаку, т.е. меньше нуля, а не значению+знак.

    Не думаю что эта проблема не будет проявляться с родном движком, но счётчик слегка разочаровал. Надо описание на него составить и описать этот момент.

    Попутно, пока подключен ЛА сниму сигналограммы и для других режимов, PLAY/REС при включении, откат к нулю после теста ленты и перемотка до нуля. Надо увидеть в деле сигналы "Memory STOP 1", "Memory STOP 2". Ещё до конца не ясно назначение "Motor Slow". Ясно, что сигнал связан с "CUE", перемоткой и наличием импульсов. Вероятно в "CUE" сигнал пропадает, а в перемотке есть. Но не понятно зачем нужно различать, счёт вести надо в обоих случаях.

  20. #199
    Завсегдатай
    Регистрация
    20.04.2016
    Адрес
    Minsk
    Возраст
    22
    Сообщений
    5,588

    По умолчанию Re: Самодельная замена процессора ЛПМ для SONY TC-K730ES


    Offтопик:
    Цитата Сообщение от DrLithium Посмотреть сообщение
    стали бы ругать ассемблер по круче Леонида.
    Да я ругаю не ассемблер, а себя, что слишком долго им пользовался и не переходил на Си.

    Цитата Сообщение от DrLithium Посмотреть сообщение
    Я то писал "такты" и ни каких "циклов тактов"
    Для AVR это одно и то же. В подробном описании команд и в хелпе используют "Cycles", в datasheet используют "#Clocks".

    Цитата Сообщение от DrLithium Посмотреть сообщение
    Разумеется есть чёткое указание в документе, но он у вас м.б. под рукой, а у новичка в AVR ассемблере?
    Описание системы команд - это базовый документ, который новичку нужен в обязательном порядке. В те времена, когда я писал на ассемблере, использовал AVRSudio 4, ее хелп был постоянно открыт. Эти Cycles и Words (Bytes) были всегда перед глазами.

    Цитата Сообщение от DrLithium Посмотреть сообщение
    был излишне горяч, возраст, нервы и характер портится
    Спешу Вас утешить - чем лучше специалист, тем хуже у него характер. И портится он не от старости, а от опыта. Если человек - добряк, значит тупой, как пробка.

    Цитата Сообщение от DrLithium Посмотреть сообщение
    две страницы крайне не нужных обсуждений (по крайней мере для меня). Просто жаль тратить свою жизнь на подобное. Вопрос решался корректным уточнением, в размере одного-двух предложений.
    Очень полезное обсуждение. Одно-два предложения есть и в документации, но сказанное кратко обычно пропускают мимо ушей. А форумная баталия, лучше всего с оскорблениями, переходами на личность и прочими выпадами, очень хорошо врезается в память. Это самый эффективный способ обучения. Думаю все, кто заходил в ветку, на всю жизнь запомнят, как правильно делать переходы со смещением. Это очень востребовано при написании макросов. Так что всё не зря.

  21. #200
    Завсегдатай
    Автор темы
    Аватар для Turbo_man
    Регистрация
    06.04.2010
    Адрес
    Moscow
    Сообщений
    5,722

    По умолчанию Re: Самодельная замена процессора ЛПМ для SONY TC-K730ES

    Цитата Сообщение от DrLithium Посмотреть сообщение
    сниму сигналограммы и для других режимов, PLAY/REС при включении, откат к нулю после теста ленты и перемотка до нуля. Надо увидеть в деле сигналы "Memory STOP 1", "Memory STOP 2". Ещё до конца не ясно назначение "Motor Slow". Ясно, что сигнал связан с "CUE", перемоткой и наличием импульсов. Вероятно в "CUE" сигнал пропадает, а в перемотке есть. Но не понятно зачем нужно различать, счёт вести надо в обоих случаях.
    Да, и мне интересно. Буду ждать подробностей.

Страница 10 из 17 Первая ... 89101112 ... Последняя

Социальные закладки

Социальные закладки

Ваши права

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