Свежие обсуждения
Микроконтроллеры

3 канальный ШИМ на Tiny15L?

1 4 5

smg123, если возникла проблема с тем, что что-то не успеваете обработать, нужно переносить обработку прерывания T0 в основную программу. В обработчике T0 просто взводите какой-нибудь бит, а в основной программе анализируете его, и , если он взведен, то а). сбрасываете его, и б). выполняете то, что раньше делали в обработчике прерываний T0. Фоновый процесс (основная программа) выполняется с разрешенными прерываниями, так что время ее выполнения для обработчика ШИМа совершенно некритично. Почему переполняется счетчик команд, сказать не могу, возможно (не в обиду будь сказано) Вы просто забыли зациклить программу Выложите исходник, поглядим.

 

Рискую оказаться белой вороной, т.к. исходник в формате Algorithm Builder. Или выкладывать в виде рисунков?

 

Не на китайском же Поймем как-нибудь

 

Вот варианты.

121082.rar

 

smg123, в ХОРОШЕМ2 не совсем понял манипуляции с T и Tick. В обработчике прерываний не нужно делать ++, нужно просто сделать Tick=1, и точно так же в основном цикле не нужно делать T++, нужно просто сделать Tick=0 (или как это там делается в Builder-е). Поскольку AB реальный код скрывает (видели, наверное, что некоторые строки в пошаговом режиме "выполняются" по несколько раз), лучше не делать предположений о том, как будет работать та же самая ++. И еще момент - при входе в прерывание регистр состояния в AB как-то сохраняется? Если да, то куда именно, не пересекается ли он с Вашими назначениями на регистры. Сишные компиляторы для AVR любят для таких манипуляций регистры r0 и r1, не исключено, что AB тоже "взлюбил" какой-то из регистров. Если регистр состояния при входе в обработчик не сохраняется, а при выходе - не восстанавливается, работа программы будет абсолютно непредсказуемой - тогда позаботьтесь о нем "руками". В остальном код, на мой взгляд, вполне адекватный. Переполнения счетчика команд у себя не обнаружил В обработчике прерываний T1, судя по "щелчкам", выполняется в среднем 15 команд + еще 3..4 надо накинуть на вызов обработчика, притом что для заданной тактовой частоты длина обработчика не должна быть более 32-4=28 команд. Так что засовывать в обработчик T0 что-то отличное от установки флага даже не пытайтесь.

 

Затыкается при попытке прочитать адрес 1F2, команда LPM .Вы выходите за границу своей таблицы(непонятно, какое его дело) Если заменить в Z на 1F1 то все проходит.
chav1961: Поскольку AB реальный код скрывает
Не не скрывает, тик в тик,если конечно,правильно писать, а то он исправляет ошибки, но молча, собака.

chav1961: AB тоже "взлюбил" какой-то из регистров
16 и17 используются в макрокомандах, и если он захочет что-нить исправить то использует их.
chav1961: И еще момент - при входе в прерывание регистр состояния в AB как-то сохраняется?
Если вы позаботитесь.

 

Alexey: Если вы позаботитесь.
smg123, стало быть, надо заботиться

 

chav1961: не совсем понял манипуляции с T и Tick
Это на будущее была задумка, может и не пригодится.

Alexey: Вы выходите за границу своей таблицы
Если я добавлю в работающий основной алгоритм небольшую п\п тоже может заткнуться. Уже в другом месте.
Если проект переведу на Tiny13 и вначале отведу под стек все ОЗУ - будет работать.
Alexey: Если вы позаботитесь.
Какой регистр и куда нужно сохранять в 15 тиньке?

 

smg123: Если я добавлю в работающий основной алгоритм небольшую п\п тоже может заткнуться. Уже в другом месте.

В тайни15 стоит аппаратный 3-х уровневый стек. Видимо, вы исчерпали его лимит, т.е.неправильно вложили ваш ваучер .

 

GM: ...аппаратный 3-х уровневый стек... лимит...
Варианты решения?