КР1816ВЕ35, К1816ВЕ48 и внедрение
Moderator: Shaos
-
Shaos
- Admin
- Posts: 24636
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: КР1816ВЕ35, К1816ВЕ48 и внедрение
Уменьшил гигантскую картинку дисковода в начале предыдущей страницы...
-
askfind
- Devil
- Posts: 866
- Joined: 04 Jan 2016 09:15
- Location: Russia, S.- Peterburg
Re: КР1816ВЕ35, К1816ВЕ48 и внедрение
Активный фильтры на операционных для модема
В архиве обнаружил аналоговую плату ретро-проекта модема V23.
Прямой канал передачи данных 1200 бит/сек и обратный канал передачи данных 75 бит/сек.
Необходимо было разработать фильтры высоких порядкой, чтобы уметь по телефонной линии обеспечить дуплексный режим работы.
Это была первый проект (в 1992 году) по созданию аналоговых фильтров для модема.
Спаяю и исследую характеристики из будущего в прошлом, когда на многие вопросы трудно было найти ответы и решения.
В архиве обнаружил аналоговую плату ретро-проекта модема V23.
Прямой канал передачи данных 1200 бит/сек и обратный канал передачи данных 75 бит/сек.
Необходимо было разработать фильтры высоких порядкой, чтобы уметь по телефонной линии обеспечить дуплексный режим работы.
Это была первый проект (в 1992 году) по созданию аналоговых фильтров для модема.
Спаяю и исследую характеристики из будущего в прошлом, когда на многие вопросы трудно было найти ответы и решения.
You do not have the required permissions to view the files attached to this post.
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)
-
askfind
- Devil
- Posts: 866
- Joined: 04 Jan 2016 09:15
- Location: Russia, S.- Peterburg
Re: КР1816ВЕ35, К1816ВЕ48 и внедрение
В проекте разработки модема стандарта V.23 была задача создания фильтров для прямого канала обмена данными 1200 бит/сек и обратного канала 75 бит/сек.
Для частотной модуляции FSK необходимо было разделить каналы.
Одно из требований к активному фильтру было его настройка фильтра 8-порядка при производстве. Обычные резисторы использовалсь как подстроечные. Напильником стачивался слой графита, и после этой операции, покрывался лаком. Необходимо было внедрить методику настройки с использованием измерителя фазы сигналов на входе и выходе фильтров 2-порядка.
Ддя создания полосового активного фильтра была настольной книга:
Оставалось много вопрос по синтезу электронной схемы фильтра для модема частотно-модулированными сигналами.
Решил вернуться к проекту из 1992 года. Осталась плата аналоговой части модема.
Исследовать в программе моделиования LTSpice характеристики полосовых фильтров.
Список литературы:
1) Знаменский А. Е., Теплюк И. Н., Активные RC-фильтры — М.: Связь, 1970. — 280 с, ил.
2) Мошиц Г., Хорн П., Проектирование активных фильтров: Пер. с англ.— М.: Мир, 1984. — 320 с, ил.
3) Яшкардин В., Bell 202. Спецификация интерфейса для передачи двоичных данных методом частотной манипуляции FSK. - http://softelectro.ru/bell202.html
4) ГОСТ 20855-83 (1983г.), Издатель: СССР. Государственный комитет по стандартам.
Название:Устройства преобразования сигналов аппаратуры передачи данных для коммутируемых и некоммутируемых каналов тональной частоты
Для частотной модуляции FSK необходимо было разделить каналы.
Одно из требований к активному фильтру было его настройка фильтра 8-порядка при производстве. Обычные резисторы использовалсь как подстроечные. Напильником стачивался слой графита, и после этой операции, покрывался лаком. Необходимо было внедрить методику настройки с использованием измерителя фазы сигналов на входе и выходе фильтров 2-порядка.
Ддя создания полосового активного фильтра была настольной книга:
В книге была распечатка на языке Basic расчёта фильтра 2-порядка. Самое важное - рассмотрена методика проектирования фильтров высокопорядка и приведены таблицы различных типов фильтров: Баттеворта-Томсона Чебышева, Бесселя,Мошиц Г., Хорн П.
Проектирование активных фильтров: Пер. с англ.— М.: Мир, 1984. — 320 с, ил.
Книга специалистов из Швейцарии представляет собой справочное пособие по методам практического проектирования и настройки активных фильтров, находящих широкое применение в современной радиоаппаратуре Для выбора параметров фильтров предусмотрено использование разнообразных вычислительных устройств — от программируемых карманных калькуляторов до мини-ЭВМ с программированием на языках Фортран или Бейсик. Приведены соответствующие программы. Для разработчиков, радиолюбителей, аспирантов и студентов соответствующих специальностей вузов.
Редакция литературы по новой технике
Copyright 1981 by John Wiley & Sons, Inc. All rights reserved. Autorized translation from English language edition published by John Wiley & Sons, Inc.
© Перевод на русский язык с дополнением, «Мир», 1984
Оставалось много вопрос по синтезу электронной схемы фильтра для модема частотно-модулированными сигналами.
Решил вернуться к проекту из 1992 года. Осталась плата аналоговой части модема.
Исследовать в программе моделиования LTSpice характеристики полосовых фильтров.
Список литературы:
1) Знаменский А. Е., Теплюк И. Н., Активные RC-фильтры — М.: Связь, 1970. — 280 с, ил.
2) Мошиц Г., Хорн П., Проектирование активных фильтров: Пер. с англ.— М.: Мир, 1984. — 320 с, ил.
3) Яшкардин В., Bell 202. Спецификация интерфейса для передачи двоичных данных методом частотной манипуляции FSK. - http://softelectro.ru/bell202.html
4) ГОСТ 20855-83 (1983г.), Издатель: СССР. Государственный комитет по стандартам.
Название:Устройства преобразования сигналов аппаратуры передачи данных для коммутируемых и некоммутируемых каналов тональной частоты
You do not have the required permissions to view the files attached to this post.
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)
-
dk1spb
- Novelist
- Posts: 41
- Joined: 13 Jan 2016 11:07
Re: КР1816ВЕ35, К1816ВЕ48 и внедрение
А зачем?askfind wrote: 14 Nov 2024 03:02 С дисков 720 КБайт CP/M 2.2 частично удаётся прочитать дорожки. Вот и необходимо убедиться, что дисковод исправен.
Не проще сразу прочитать на заведомо исправном дисководе?
Если что - обращайтесь.
-
askfind
- Devil
- Posts: 866
- Joined: 04 Jan 2016 09:15
- Location: Russia, S.- Peterburg
Re: КР1816ВЕ35, К1816ВЕ48 и внедрение
ИИ (AI) пишет программный код для ретро микроконтроллеров в CP/M-80
Девиз простой: “Мы отдыхаем - компьютер работает!” (C)
Двадцать лет назад замахивался на создание робота-программиста https://www.islife.ru/post/pub00062
Пару недель исследую применение ИИ чатов для создания программных проектов. В помощники призвал deepseek.com
За два вечера удалось создать полностью работающее приложение на языке программирования С++. Arduino проект размером 2629 строк!
Конечно же, хотелось дать задание на чистом ассемблере в операционной системе CP/M-80. Получить радость и "ощупывание" наступившего будущего программиста микроконтроллеров.
Чат с AI:
Для компиляции запуска компиляра XASM48.COM использовал эмулятор 'cpm' - https://github.com/jhallen/cpm.git
```
>$ cpm XASM48 EDU_AI.ASM
VOCET SYSTEMS 8048 CROSS-ASSEMBLER, VERSION 1.64
END STATEMENT MISSING
LAST ADDRESS USED IN THIS ASSEMBLY IS: 0163
NEXT SYMBOL ADDRESS IS: 334E
*****180 LINES CONTAINED ERRORS *****
8048 ASSEMBLY COMPLETE
```
Ошибки есть. Нужно потрениовать AI, чтобы справился без ошибок.
Кстати, необходимо использовать кодироваку KOI-8.
bash script:
Девиз простой: “Мы отдыхаем - компьютер работает!” (C)
Двадцать лет назад замахивался на создание робота-программиста https://www.islife.ru/post/pub00062
Пару недель исследую применение ИИ чатов для создания программных проектов. В помощники призвал deepseek.com
За два вечера удалось создать полностью работающее приложение на языке программирования С++. Arduino проект размером 2629 строк!
Конечно же, хотелось дать задание на чистом ассемблере в операционной системе CP/M-80. Получить радость и "ощупывание" наступившего будущего программиста микроконтроллеров.
Чат с AI:
было несколько попытокю AI использовал в метках символ подчёркивания '_' . Ретро компилятор не смог понять 'CALL LABEL_01' . Пришлось разобраться и предложить в чате исправить все метки.Напиши мне программу для ассемблера AVOCET SYSTEMS 8048 CROSS-ASSEMBLER, VERSION 1.64, операционная система CP/M-80.
- Микроконтроллер i8035
- Чтение матричной клавиатуры 4x4, вывод на 7-сегментные индикаторы
- Сложение чисел с плавающей точкой: c = a + b
Для компиляции запуска компиляра XASM48.COM использовал эмулятор 'cpm' - https://github.com/jhallen/cpm.git
Компиляция:$ cpm --help
cpm [options] [CP/M command]
Options:
--help Show this help
--nobdos Do not emulate BDOS: only emulate BIOS
Real disk images will be used.
--trace_bdos Trace BDOS calls
```
>$ cpm XASM48 EDU_AI.ASM
VOCET SYSTEMS 8048 CROSS-ASSEMBLER, VERSION 1.64
END STATEMENT MISSING
LAST ADDRESS USED IN THIS ASSEMBLY IS: 0163
NEXT SYMBOL ADDRESS IS: 334E
*****180 LINES CONTAINED ERRORS *****
8048 ASSEMBLY COMPLETE
```
Ошибки есть. Нужно потрениовать AI, чтобы справился без ошибок.
Кстати, необходимо использовать кодироваку KOI-8.
bash script:
Code: Select all
#!/bin/bash
# Проверяем наличие аргументов
if [[ "$#" -ne 2 ]]; then
echo "Использование: $0 input_file output_file"
exit 1
fi
INPUT_FILE="$1"
OUTPUT_FILE="$2"
# Конвертируем файл из UTF-8 в KOI-7
#iconv -f UTF-8 -t KOI-7 "$INPUT_FILE" > "$OUTPUT_FILE"
#iconv -f UTF-8 -t CP866//IGNORE "$INPUT_FILE" > "$OUTPUT_FILE"
iconv -f UTF-8 -t KOI-8//IGNORE "$INPUT_FILE" > "$OUTPUT_FILE"
echo "Файл успешно преобразован."
Code: Select all
; Программа для i8035
; Чтение матричной клавиатуры 4x4, вывод на 7-сегментные индикаторы
; Сложение чисел с плавающей точкой: c = a + b
; Регистры и порты
PORT1 EQU 01H ; Порт 1 для строк клавиатуры и индикаторов
PORT2 EQU 02H ; Порт 2 для столбцов клавиатуры
BUS EQU 00H ; Шина для 7-сегментных индикаторов
TEMP EQU 08H ; Временный регистр
KEYCODE EQU 09H ; Код нажатой клавиши
DIGIT1 EQU 0AH ; Первая цифра для отображения
DIGIT2 EQU 0BH ; Вторая цифра для отображения
; Память данных для чисел с плавающей точкой
ASIGN EQU 20H ; Знак числа a
AEXP EQU 21H ; Экспонента числа a
AMANTH EQU 22H ; Старший байт мантиссы a
AMANTL EQU 23H ; Младший байт мантиссы a
BSIGN EQU 24H ; Знак числа b
BEXP EQU 25H ; Экспонента числа b
BMANTH EQU 26H ; Старший байт мантиссы b
BMANTL EQU 27H ; Младший байт мантиссы b
CSIGN EQU 28H ; Знак результата c
CEXP EQU 29H ; Экспонента результата c
CMANTH EQU 2AH ; Старший байт мантиссы c
CMANTL EQU 2BH ; Младший байт мантиссы c
; Константы
MASKH EQU 0F0H ; Маска для старшего полубайта
MASKL EQU 0FH ; Маска для младшего полубайта
ORG 0000H ; Начало программы
START:
MOV SP, #60H ; Инициализация указателя стека
; Инициализация переменных
CALL INITVARS
MAINLOOP:
; Чтение клавиатуры
CALL READKEYBOARD
MOV A, KEYCODE
JZ NOKEY ; Если ключ = 0, клавиша не нажата
; Преобразование кода клавиши в две шестнадцатеричные цифры
CALL KEYTOHEX
; Отображение цифр на индикаторах
CALL DISPLAYDIGITS
NOKEY:
; Выполнение сложения чисел с плавающей точкой
CALL FLOATADD
; Задержка для антидребезга
CALL DELAY
JMP MAINLOOP
; Инициализация переменных
INITVARS:
; Инициализация числа a (пример: 2.5)
MOV A, #00H ; Положительное число
MOV ASIGN, A
MOV A, #82H ; Экспонента для 2.5
MOV AEXP, A
MOV A, #20H ; Мантисса 2.5
MOV AMANTH, A
MOV A, #00H
MOV AMANTL, A
; Инициализация числа b (пример: 1.25)
MOV A, #00H ; Положительное число
MOV BSIGN, A
MOV A, #81H ; Экспонента для 1.25
MOV BEXP, A
MOV A, #0A0H ; Мантисса 1.25
MOV BMANTH, A
MOV A, #00H
MOV BMANTL, A
RET
; Чтение матричной клавиатуры 4x4
READKEYBOARD:
MOV KEYCODE, #0 ; Сброс кода клавиши
MOV R0, #4 ; Счетчик столбцов
; Цикл по столбцам
COLLOOP:
; Сброс всех столбцов
MOV A, #0FFH
OUTL P2, A ; Используем OUTL для порта 2
; Активация текущего столбца
MOV A, R0
DEC A
ORL A, #0F0H ; Сохраняем строки в 1
OUTL P2, A ; Активируем текущий столбец
; Чтение строк с порта 1
IN A, P1
ANL A, #0FH ; Маска для строк
; Проверка нажатых клавиш в текущем столбце
MOV R1, #4 ; Счетчик строк
ROWLOOP:
RRC A ; Проверка бита строки
JNC KEYFOUND ; Если бит = 0, клавиша нажата
; Переход к следующей строке
INC KEYCODE
DJNZ R1, ROWLOOP
; Следующий столбец
DJNZ R0, COLLOOP
RET
KEYFOUND:
; Код клавиши уже в KEYCODE
RET
; Преобразование кода клавиши (0-15) в две шестнадцатеричные цифры
KEYTOHEX:
MOV A, KEYCODE
ANL A, #0FH ; Только младшие 4 бита
; Сохранение для первой цифры
MOV DIGIT1, A
; Для второй цифры используем код + 1 (пример)
INC A
ANL A, #0FH
MOV DIGIT2, A
RET
; Отображение двух цифр на 7-сегментных индикаторах
DISPLAYDIGITS:
; Отображение первой цифры
MOV A, DIGIT1
CALL HEXTO7SEG
OUTL BUS, A ; Вывод на шину индикаторов
MOV A, #01H ; Выбор индикатора 1
OUTL P1, A ; Активация через порт 1
CALL DELAYSHORT
; Отображение второй цифры
MOV A, DIGIT2
CALL HEXTO7SEG
OUTL BUS, A ; Вывод на шину индикаторов
MOV A, #02H ; Выбор индикатора 2
OUTL P1, A ; Активация через порт 1
CALL DELAYSHORT
RET
; Преобразование шестнадцатеричной цифры (0-F) в 7-сегментный код
HEXTO7SEG:
INC A ; Увеличиваем для корректного смещения
MOVP A, @A ; Чтение из таблицы по адресу (PC+A)
RET
; Таблица кодов 7-сегментного индикатора
DB 3FH ; 0
DB 06H ; 1
DB 5BH ; 2
DB 4FH ; 3
DB 66H ; 4
DB 6DH ; 5
DB 7DH ; 6
DB 07H ; 7
DB 7FH ; 8
DB 6FH ; 9
DB 77H ; A
DB 7CH ; B
DB 39H ; C
DB 5EH ; D
DB 79H ; E
DB 71H ; F
; Сложение чисел с плавающей точкой: c = a + b
FLOATADD:
; Проверка на ноль числа a
MOV A, AEXP
JZ AZERO
; Проверка на ноль числа b
MOV A, BEXP
JZ BZERO
; Выравнивание экспонент
CALL ALIGNEXP
; Сложение мантисс с учетом знаков
CALL ADDMANTIS
; Нормализация результата
CALL NORMALIZE
RET
AZERO:
; Если a = 0, результат = b
MOV A, BSIGN
MOV CSIGN, A
MOV A, BEXP
MOV CEXP, A
MOV A, BMANTH
MOV CMANTH, A
MOV A, BMANTL
MOV CMANTL, A
RET
BZERO:
; Если b = 0, результат = a
MOV A, ASIGN
MOV CSIGN, A
MOV A, AEXP
MOV CEXP, A
MOV A, AMANTH
MOV CMANTH, A
MOV A, AMANTL
MOV CMANTL, A
RET
; Выравнивание экспонент
ALIGNEXP:
MOV A, AEXP
CLR C
SUBB A, BEXP
JZ EXPEQUAL ; Экспоненты уже равны
JC BGREATER ; Экспонента b больше
; Экспонента a больше, сдвигаем мантиссу b
MOV R0, A ; Разница экспонент
SHIFTB:
MOV A, BMANTH
RRC A ; Сдвиг вправо через перенос
MOV BMANTH, A
MOV A, BMANTL
RRC A
MOV BMANTL, A
DJNZ R0, SHIFTB
; Установка экспоненты b равной a
MOV A, AEXP
MOV BEXP, A
RET
BGREATER:
; Экспонента b больше, сдвигаем мантиссу a
CPL A
INC A ; Получаем положительную разницу
MOV R0, A
SHIFTA:
MOV A, AMANTH
RRC A ; Сдвиг вправо через перенос
MOV AMANTH, A
MOV A, AMANTL
RRC A
MOV AMANTL, A
DJNZ R0, SHIFTA
; Установка экспоненты a равной b
MOV A, BEXP
MOV AEXP, A
EXPEQUAL:
RET
; Сложение мантисс
ADDMANTIS:
MOV A, ASIGN
XRL A, BSIGN
JZ SAMESIGN ; Знаки одинаковые
; Знаки разные, выполняем вычитание
CALL SUBMANTIS
RET
SAMESIGN:
; Знаки одинаковые, выполняем сложение
MOV A, AMANTL
ADD A, BMANTL
MOV CMANTL, A
MOV A, AMANTH
ADDC A, BMANTH
MOV CMANTH, A
; Проверка на переполнение
JNC NOOVERFLOW
; Сдвиг вправо и увеличение экспоненты
MOV A, CMANTH
RRC A
MOV CMANTH, A
MOV A, CMANTL
RRC A
MOV CMANTL, A
MOV A, AEXP
INC A
MOV CEXP, A
NOOVERFLOW:
MOV A, ASIGN
MOV CSIGN, A
RET
; Вычитание мантисс (когда знаки разные)
SUBMANTIS:
; Сравнение мантисс
MOV A, AMANTH
CLR C
SUBB A, BMANTH
JC BGMANT
; Мантисса a больше или равна
MOV A, AMANTL
CLR C
SUBB A, BMANTL
MOV CMANTL, A
MOV A, AMANTH
SUBB A, BMANTH
MOV CMANTH, A
MOV A, ASIGN
MOV CSIGN, A
JMP SUBDONE
BGMANT:
; Мантисса b больше
MOV A, BMANTL
CLR C
SUBB A, AMANTL
MOV CMANTL, A
MOV A, BMANTH
SUBB A, AMANTH
MOV CMANTH, A
MOV A, BSIGN
MOV CSIGN, A
SUBDONE:
RET
; Нормализация результата
NORMALIZE:
MOV A, CMANTH
JNZ CHECKNORM
; Если старший байт мантиссы = 0, результат = 0
MOV CEXP, #00H
MOV CSIGN, #00H
RET
CHECKNORM:
ANL A, #80H ; Проверка старшего бита
JNZ NORMALIZED ; Уже нормализовано
; Сдвиг влево до нормализации
MOV R0, #0 ; Счетчик сдвигов
NORMLOOP:
MOV A, CMANTH
RLC A
MOV CMANTH, A
MOV A, CMANTL
RLC A
MOV CMANTL, A
INC R0
MOV A, CMANTH
ANL A, #80H
JZ NORMLOOP ; Продолжаем пока не нормализуется
; Коррекция экспоненты
MOV A, CEXP
CLR C
SUBB A, R0
MOV CEXP, A
NORMALIZED:
RET
; Задержка для антидребезга
DELAY:
MOV R2, #100
DELAYLOOP1:
MOV R3, #200
DELAYLOOP2:
DJNZ R3, DELAYLOOP2
DJNZ R2, DELAYLOOP1
RET
; Короткая задержка для динамической индикации
DELAYSHORT:
MOV R4, #50
DELAYSHORTLOOP:
DJNZ R4, DELAYSHORTLOOP
RET
END
You do not have the required permissions to view the files attached to this post.
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)
