Продолжение к предыдущему посту...
Sep. 1st, 2017 07:34 amКак говорится, вшивый всё про баню. Тут текст в общем-то для себя...
Философский момент, который меня поражает больше всего:
у всякой проблемы можно найти решение...
Вопрос конечно не очень принципиальный - данные можно передавать по нескольким проводам или по одному.
У широкой шины большая пропускная способность. Как правило, если все грамотно.
Передача по одному проводу с RC цепочками немного напоминает
искусство из 60-х прошлого века с "линиями задержки" и даже памяти на них.
Цифровая память в виде сигнала бегающего по кругу.
Тоже гениальное изобретение доцифровой эпохи.
Основное преимущество цифровых технологий в том, что все смертно, кроме
цифр и математики. Вечность существует, даже если наша Вселенная не вечна...
Что с ней происходит на голографической поверхности "черных дыр"?..
Так вот как сигнал на одном проводе формирует сигнал на трех ножках
shift register 74HC595: clock, data и output latch.
Основной сигнал clock сидит на основном канале. Но поскольку
никаких требований к его временным характеристикам нет, то сигналы
на остальные каналы формируются динамически с помощью RC цепочек, которые
тоже напоминают технологии 60-х - динамическая аналоговая память.
На канале Data единица кодируется с помощью задержки и накоплению заряда в первой
RC-цепочке, а ноль соответственно задержкой и разрядом.
Но интересный момент возникает - как еще эффективно закодировать сигнал
для третьего канала - Output latch?
Data кодируется только в моменты, когда на основном канале 1
или в момент перехода 1 -> 0.
Потому, что в этот момент можно менять Data. Так собственно устроен
data/clock протокол.
Так вот третий канал формируется второй RC цепочкой, когда
сигнал 1 продолжительное время ее заряжает до срабатывания.
Но проблема в том, что в то время пока ты суетишься передавая
clock-data - 8 битов, заряд на этой цепочке тоже растет.
Поэтому приходится ее замедлять, а значит и скорость
всего процесса. Получается, что полезная информация передается всего 10%
времени. Что как-то обидно.
Причем если использовать много регистров и передавать не 8, а 16, 24
и больше битов данных ситуация только ухудшается.
Оказывается есть интересный выход из этого тупика -
добавить один диод для автоматической разрядки конденсатора
последней цепочки и поддержания его на низком уровне пока идет передача данных.
А когда она закончилась, заряд можно подтянуть за время всего в 2-3
раза большее, чем время формирования одного бита для data.
Получается даже для 8 битов эффективность подскакивает
с 10% до 70%, т.е. в 7 раз, а для 16 бит и того больше.
Ради чего я с этим повозился - чтобы опять удивиться,
что для каждой проблемы есть решение!..
Философский момент, который меня поражает больше всего:
у всякой проблемы можно найти решение...
Вопрос конечно не очень принципиальный - данные можно передавать по нескольким проводам или по одному.
У широкой шины большая пропускная способность. Как правило, если все грамотно.
Передача по одному проводу с RC цепочками немного напоминает
искусство из 60-х прошлого века с "линиями задержки" и даже памяти на них.
Цифровая память в виде сигнала бегающего по кругу.
Тоже гениальное изобретение доцифровой эпохи.
Основное преимущество цифровых технологий в том, что все смертно, кроме
цифр и математики. Вечность существует, даже если наша Вселенная не вечна...
Что с ней происходит на голографической поверхности "черных дыр"?..
Так вот как сигнал на одном проводе формирует сигнал на трех ножках
shift register 74HC595: clock, data и output latch.
Основной сигнал clock сидит на основном канале. Но поскольку
никаких требований к его временным характеристикам нет, то сигналы
на остальные каналы формируются динамически с помощью RC цепочек, которые
тоже напоминают технологии 60-х - динамическая аналоговая память.
На канале Data единица кодируется с помощью задержки и накоплению заряда в первой
RC-цепочке, а ноль соответственно задержкой и разрядом.
Но интересный момент возникает - как еще эффективно закодировать сигнал
для третьего канала - Output latch?
Data кодируется только в моменты, когда на основном канале 1
или в момент перехода 1 -> 0.
Потому, что в этот момент можно менять Data. Так собственно устроен
data/clock протокол.
Так вот третий канал формируется второй RC цепочкой, когда
сигнал 1 продолжительное время ее заряжает до срабатывания.
Но проблема в том, что в то время пока ты суетишься передавая
clock-data - 8 битов, заряд на этой цепочке тоже растет.
Поэтому приходится ее замедлять, а значит и скорость
всего процесса. Получается, что полезная информация передается всего 10%
времени. Что как-то обидно.
Причем если использовать много регистров и передавать не 8, а 16, 24
и больше битов данных ситуация только ухудшается.
Оказывается есть интересный выход из этого тупика -
добавить один диод для автоматической разрядки конденсатора
последней цепочки и поддержания его на низком уровне пока идет передача данных.
А когда она закончилась, заряд можно подтянуть за время всего в 2-3
раза большее, чем время формирования одного бита для data.
Получается даже для 8 битов эффективность подскакивает
с 10% до 70%, т.е. в 7 раз, а для 16 бит и того больше.
Ради чего я с этим повозился - чтобы опять удивиться,
что для каждой проблемы есть решение!..