Причины:
Достаточно одной - были установлены КР1534ИЕ1.
Жесты:
1. Ставим ATtiny2313A вместо 1-ой КР1534ИЕ1, вместо остальных 74HC595
2. Выкидываем ножку 1 разъёма XS1
3. Выкидываем диоды для формирования символа "У"
4. Рисуем прошивку с сохранением прежних функций + с сохранением значения
счётчика в энергонезависимой памяти.
Совместимость:
1. По уровням управляющих сигналов
2. По функционалу, т.е. кнопки работают как и раньше.
Добавлено относительно оригинала:
1. Сохранение значения счётчика в энергонезависимой
памяти, после 3-х секунд простоя подкатушечников и возвращение
значения при включении.
2. Отдельное питание счётчика не используется (XS1@1). По этому
значения набежавшего счёта не сбрасывается во время переключения
в режим "У".
3. Возможность подстройки счёта изменением разрядности младшего
(не отображаемого) разряда долей в пределах 0-255.
* - по умолчанию значение разрядности установлено ="12"(0x0C).
При этом на сторону 525-ой катушки набегает около "460"-и.
При ="10"(0x0A) набегает "600".
** - Адрес переменной в файле "Orbita_108_ind_02.eep" (далее EPP) -
строка 1@36-37. Подробнее о структуре EPP в файле "EEPROM&SRAM.xls".
4. Возможность изменять знакогенератор в файле EPP как для символов
счёта, так и для отображения символов в режиме "У".
5. Возможность подключения дополнительных сегментов через
регистры сдвига. Данные в 595-е регистры заталкиваются в следующем
порядке: доли (Part - самый младший разряд с возможностью
настройки разрядности, при ="0" игнорируется), знак ("+"
не отображается), тысячи, сотни (первый разряд), десятки (второй
разряд), единицы (третий разряд).
* - по умолчанию значение счётчика установлено равным "+1234.5".
** - можно подключить дополнительный 595-й регистр для вывода разряда тысяч,
следующий для знака, последний 6-ой для долей единиц (но при этом разрядность
лучше оставить =9(0-9), а набегающий максимум регулировать числом лопастей
крыльчатки).
Согласование по управляющим уровням:
Делитель напряжения из пары резисторов (для примера R2+R3) - получаем
"0В"/"+4.9В". Вероятно придётся подобрать значения резисторов R3,5,7,9,11,
для получения логической единицы на входах микроконтроллера, чуть ниже
напряжения питания (+5.0В).
Алгоритм МК:
В момент включения, МК получает стандартную задержку по RESET. После входа в рабочий режим, происходит инициализация (установка портов, определяются разрешения и режимы таймеров и прерываний, и копируются данных из EEPROM в SRAM, счёт и отображение только в/из SRAM),
устанавливается режим отображения режима "У" или счётчика (в зависимости от
сигнала на ножке PB3).
По завершении, фокус передаётся основной части программы, в которой крутится пустой бесконечный цикл. Какие-либо события обрабатываются прерываниями основного цикла.
Прерывание по INT0 (вывод 6 МК, счётный вход XS1@3):
задержка на время дребезга,
сброс набежавших лишних прерываний,
проверяем значение реверса и исходя из него инкрементируем или декрементируем
значение счётчика,
выводим на индикатор,
останавливаем 3-х секундный таймер (не важно работал он или нет),
сбрасываем набежавшее в таймере,
запускаем 3-х секундный таймер по-новой,
сравниваем значение счётчика со значением "ПАМЯТИ" и если они равны, то формируем "СТОП" на PD0 (вывод 11 МК, через R58, Q23 и R58 на XS1@11),
запускаем 8-и битный таймер на время 256*1024/4.0MHz=0,065536 секунды.
Этого времени достаточно для логики основной схемы, что бы перевести аппарат в
режим "СТОП",
выходим и бесконечный цикл.
Прерывание по переполнению таймера Timer1_OVF (16-бит, 3-х секундный):
если возникло это прерывание, значит изменилось значение счётчика и был запущен
этот таймер и он истёк,
останавливаем таймер,
сохраняем новое значение счётчика в EEPROM,
и выходим и бесконечный цикл.
Прерывание по переполнению таймера Timer0_OVF (8-бит, 65-и мили-секундный):
если возникло это прерывание, значит значение счётчика совпало с записанным ранее в SRAM по кнопке "ПАМЯТЬ" и он был запущен и истёк,
отключаем сигнал "СТОП" на XS1@11,
останавливаем таймер,
и выходим и бесконечный цикл.
Прерывание по PC_INT:
обслуживание событий по изменению уровня на выводах МК PB4 (вывод 16, XS1@4
сброс), PB3 (вывод 15, XS1@5 режим "У"), PB2 (вывод 14, XS1@7 "ПАМЯТЬ"),
формируем задержку на время дребезга,
сброс набежавших лишних прерываний,
замеряем PB2 и если нужно (кнопка нажата) сохраняем текущее значение счётчика
в SRAM,
замеряем PB3 и если нужно (было переключение в режим "У") включаем альтернативный вывод, т.е. выводим на индикатор значение из альтернативных ячеек (ячейки памяти для счёта не видны, но при этом полностью функциональны и могут вести счёт, при условии получение сигнала на счётный вход),
В отсутствии сигнала для режима "У", возвращаем отображение значений счётчика,
замеряем PB4 и если нужно (кнопка нажата) обнуляем значение счётчика,
выводим данные на индикатор.[свернуть]
Индикация:
Резисторы R35-55 нужны для гашения сегментов индикатора. Т.е. если закоротить ножку сегмента индикатора на землю, то она загорится и тем более от +5В.
Если выводить на СД-восьмёрки, то надо проверять яркость на предмет достаточности. Ток отдаваемый в ножку 595-ым регистром ограничен 20-ю мА, но при этом общий ток не может превышать 70 мА (естественно есть исключения). Тогда ток можно усилить транзисторами.
Требования для исполнения:
владение ЛУТ или иными средствами производста ПП,
виртуозное жонглирование не менее чем тремя паяльниками с одновременным укрощением слона, кита и тигра,
SPI программатор + софт для заливки "HEX" и "EPP".
Настройка:
Убедится в наличии +5.0В на выходе (вывод 2) Q1 (LM317L), иначе подобрать R60.
Подобрать значения резисторов R3,5,7,9,11, для получения логической единицы (+4.9В) на входах микроконтроллера 6,7,16,15,14, при логической единице на контактах разъёма XS1@3,2,4,5,7.
Фьюзы (если МК с заводскими настройками):
снять делитель на 8 (Divide clock by 8 internally [CKDIV8=0]),
выбрать внутрений генератор на 4 МГц (Int. RC Osc. 4 MHz; Start-up time: 14 CK + 65 ms; [CKSEL=0010 SUT=10]).
Очерёдность прошивки:
1. Orbita_108_ind_02.hex
2. Orbita_108_ind_02.eep
бл_инд_о108.rar - в RAR-архиве v.4.11 (82963 байта): fuse.txt + Orbita_108_ind_02.hex + Orbita_108_ind_02.epp + readme.txt + блок_индикации_05.lay6 (Sprint Layout 6.0) + блок_индикации_05.spl7 (sPlan 7.0) + EEPROM&SRAM.xls + Детали.xls (Excel 97-2003 и 5.0/95)
---------------
В "деталях.xls" забыл указать DD5 КР1534ПП4, с родной платы и по цене 0р. Надеюсь на амнистию, обещаю искупить и исправиться.
Социальные закладки