Проверил в железе на tiny2313 (Т1 не отличается mega16, встроенный генератор 4МГц). Вывод OC1A на PB3. Действительно, низкий уровень на OC1A представляет собой волос, которого хватает только для запуска осциллографа. Работает только программа с переключением.
В самый первый проход цикла все нормально - "0" держится на OC1A, пока счетчик не досчитает до конца. В конце цикла производится остановка таймера/счетчика, OC1A сбрасывается в "0", возврат в начало цикла, новая инициализация и запуск. И вот тут "1" появляется сразу же. Может есть какой-то порядок запуска/остановки T/C1? Последовательность действий, которую я не соблюдаю. Может, паузу давать надо после остановки и до нового запуска, или еще что...
Думаю, отключить COM не значит изменить память его состояния. Поэтому, когда вновь разрешается COM на лапу выводится запомненное состояние??? Переключения лапы PB3/OC1A (PD5 для mega16) добился явным указанием режима работы на сброс при сравнении. Спойлер
Код:
.include "tn2313adef.inc"
.equ Fo=4000000 ;***** Определения портов В/В ***** ;Port D:
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Я вот такое придумал. Устанавливаю счетчик как обычно (OC1A=0), он считает 0.3 сек и переключает OC1A в 1. Потом задержка ~0.3 сек. Потом счетчик перенастраиваю так, чтобы при совпадении он обнулил OC1A (для этого предделитель ставлю CK/1 и OCR1AL=1 - чтоб он быстро все это сделал). Потом возврат в начало и опять считает до появления "1". Завтра буду проверять.
Спойлер
Код:
.CSEG
.equ Fo=4000000
;***** Определения портов В/В ***** ;Port D:
.equ DIRD =0b00100000 .equ PUPD =0b00000100
;***** Векторы Прерываний *****
.CSEG .org $000 rjmp RESET ;Сброс вектор
.org $002 reti .org $004 reti .org $006 reti .org $008 reti .org $00A reti .org $00C reti .org $00E reti .org $010 reti .org $012 reti .org $014 reti .org $016 reti .org $018 reti .org $01A reti .org $01C reti .org $01E reti .org $020 reti .org $022 reti .org $024 reti .org $026 reti .org $028 reti
;***** Программное выполнение начинается здесь *****
RESET: ldi r16,high(RAMEND) ;назначить стек out SPH,r16 ldi r16,low(RAMEND) out SPL,r16
;********************* ;Установка портов В/В:
ldi r16,DIRD out DDRD,r16 ;установка направления PORTD ldi r16,PUPD out PORTD,r16 ;инициализация PORTD
;*********************
START:
;Установка таймера Cycle: ldi r16,HIGH(3*Fo/10/64-1) ;(3*Fo/10/64-1) = 0.3 секунды out OCR1AH,r16 ldi r16,LOW(3*Fo/10/64-1) out OCR1AL,r16
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Кому-то удалось затактировать модуль USI от таймера T0? В режиме I2C в симуляторе вроде и 4-бит счетчик считает и на прерывание уходит, вроде как и сдвиговый регистр сдвигает данные к выходу. Но нога SCK не дрыгается, на ноге DATA данных тоже нет. В железе так же. Такое ощущение, что выходные драйверы отвязаны от пинов в режиме тактирования от таймера. Может, оно только для режима SPI предназначено? Самое что мурррргрюмое, в дашике ни слова о том, как связаны регистры PORT и модуль USI.
А почему в ATtiny2313 (таймер №1) канал совпадения “A” генерит прерывания многократно, а “B” генерит только единожды? Традиционно-тинийские удешевления?
Да, забыл добавить, что режим CTC - сброс при совпадении (не ШИМ, не вэйв). Сделал секундное мигание светодиодом (подпрога меняет Т-флаг и порт) от "A" мигает, от "B" только зажигается и горит...
Хм..., но код то не меняю, меняю только выбор железа "A" или "B". Может контрик "битый"? И в даташите (стр.106, таблица 46) мод 4, прописано только OCR1A... (а не OCRnA или CTCn, как в более мощных контриках)
Последний раз редактировалось Серый_ Вт дек 25, 2018 14:39:26, всего редактировалось 1 раз.
если мне не изменяет память, у 2313 в режиме стс верхней границей всегда является OCR1A (нет для этого отдельного регистра). А когда с "Б" работаешь в "А" что записано?
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
...верхней границей всегда является OCR1A (нет для этого отдельного регистра). А когда с "Б" работаешь в "А" что записано?
Да и в "A" и в "B" подсовываю делитель "15625", в любой незаюзанный из них = ничего не залито (временно 1 МГц внутка, предмасштабатор /64, /15625 получим 1 сек.)
т.к. тор=ocr1a, то делитель надо записывать в "а" в любом случае.
Добавлено after 3 minutes 4 seconds: либо тор=icr1 (режим 12) и делитель записать в icr (только ногу захвата придется заземлить, иначе делитель собьётся) в этом случае регистры "а" и "б" будут равнозначными (если оно тебе надо).
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
В таблице написано значение MAX (что не есть значение TOP). Получается в "A" можно/нужно записывать значение FFFF или не меньшее чем в "B" (15625)? Иначе говоря, если "B" запустили, но "A" уже нельзя использовать "вольно" или с меньшим значением?
в режиме СТС, ТОР=OCR1A на скорость хода твоих часов может повлиять только значение в "а", значение в "б" может повлиять только на фазу (опережение/отставание прерывания б от прерывания а) если "б" меньше или равно "а". если б>а то прерывание б вообще не будет вызываться.
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Нда, ребят, вот вам и "2 равноценно независимых..." Практика показала, включаем только "B", в "A" просто лежит...: 1) ...делитель тоже что и в "B" = светодиод мигает посекундно/нормально 2) ...FFFF = светодиод мигает с интервалом в несколько секунд 3) ...меньше чем в "B" = процесс не идёт Спс за разъяснения. Я бы это назвал функцией "удешевлённо-битого контроллера"...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 55
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения