
Сообщение от
blackmirror
частота процессора 4МГц
Я делаю для БК0010 3 МГц.

Сообщение от
blackmirror
Допустим волны длительность 50мкс
Слишком оптимистично. 50 мкс - это 20 КГц (почти ультразвук). 20000 колебаний в секунду. При частоте дискретизации 40000 КГц это 1,0,1,0,1,0... Такой сигнал просто не считается. А скорее всего, потеряется ещё на этапе передачи.

Сообщение от
blackmirror
прочитать короткую полуволну мы успеваем 10 раз
Больше похоже на низкую частоту дискритизации, в районе 18 КГц. Подобной скорости мы уже достигли для стандартной подпрограммы чтения из ПЗУ.
Максимум чего мне удалось добиться при частоте дискритизации 36235 Гц:
ноль кодируем последовательностью 1,0,0
единицу кодируем последовательностью 1,1,1,0,0
Получаем в среднем 4 отсчёта на бит. Итого 9059 бод.
Можно сократить кодирующие последовательности (уменьшить число отсчётов), но для этого придётся снижать частоту дискретизации. Причём, снижать кратно определённым значениям.
На частоте 36235 Гц один отсчёт в WAVе соответствует двум циклам чтения в нашей программе (и не забываем, что иногда случаются ошибки +/- один цикл чтения). Если мы хотим замедлить WAV до трёх циклов чтения, частоту придётся опустить примерно до 24156 Гц.
Допустим, за счёт снижения частоты нам удалось сократить последовательности до 1,0 и 1,1,0 - это в среднем 2,5 отсчёта на бит. Тогда для частоты 24156 Гц получаем 9662 бод (сейчас мы уже умеем 9059 бод с более длинной, а значит более надёжной последовательностью).
Рискнуть с частотой 24156 можно, но это долгий эксперимент - заново ловить и подгадывать. Может быть завтра попробую. Затея кажется рискованной.
Update: Простое изменение частоты с 36235 Гц на 40000 Гц дало ровно 10000 бод, успешно читается той же программой (правда, контрольную сумму не сверял). Думаю, на этом цель достигнута, эксперименты можно прекращать и переходить к производству.
Подпрограмма чтения такая (можно оптимизировать размер, но пока не факт, что лишний BR не отразится на надёжности чтения):
Код:
MOV #177716,R4
MOV #40,R5
MOV #10,R3
SIZE: MOV #24000,R0 ; size
DATA: MOV R3,R2 ; read 8 bits
2: BIT R5,(R4) ; wait for high level
BEQ 2
; high level detected
3: BIT R5,(R4)
BEQ 5
BIT R5,(R4)
BEQ 5
BIT R5,(R4)
BEQ 5
4: BIT R5,(R4) ; wait for high level end
BNE 4
SEC ; 1
RORB (R1) ; load bit C
SOB R2,2
INC R1 ; next byte
SOB R0,DATA
BR CHECK
5: CLC ; 0
RORB (R1) ; load bit C
SOB R2,2
INC R1 ; next byte
SOB R0,DATA
CHECK: