програмирование AVR на АСЕМБЛЕРЕ для чайников
- xkp
- Опытный кот
- Сообщения: 781
- Зарегистрирован: Ср ноя 18, 2009 12:50:31
- Откуда: ковров
- Контактная информация:
Re: програмирование AVR на АСЕМБЛЕРЕ для чайников
появился вопросик: можно ли на tiny13 реализовать одновременно 3 независимых аппаратных ШИМа?
если можно то как?
P.S. наверное я замечтался...
если можно то как?
P.S. наверное я замечтался...
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
- Dmitry Dubrovenko
- Поставщик валерьянки для Кота
- Сообщения: 2349
- Зарегистрирован: Вс янв 09, 2011 16:51:39
- Откуда: Санкт-Ленинград
- Контактная информация:
Re: програмирование AVR на АСЕМБЛЕРЕ для чайников
Вот давно интересовал этот вопрос.DX168B писал(а):Возьмём строчку rjmp LABEL.
Вместо LABEL, в ПЗУ не вставляется адрес метки, а вставляется число со знаком, которое в результате складывается с текущим содержимым счётчика команд, либо отнимается от него.
Пишем-то мы всё-таки LABEL. Т.е. получается, что Ассемблер сам уже вычисляет сколько надо вставить в ПЗУ.
Так что ли?
ICQ нет, и, в ближайшее время, не будет.
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: програмирование AVR на АСЕМБЛЕРЕ для чайников
Аппаратных - нет. Только два...
Но я делал программный ШИМ 4 канала@8бит с частотой перебора 48Кгц от встроенного тактового генератора 4.8Мгц При этом период повторения импульсов составляет порядка 180Гц, что для светодиодов очень даже неплохо. Все делается в обработчике прерывания таймера который считает до 100 и на все 4 канала уходит порядка 60 тактов из 100, включая такты вызова прерывания(8 тактов на вызов прерывания) и выхода из него(4 такта).
Соответственно меняя битность можно увеличить частоту повторения импульсов или количество каналов. Собственно, больше чем 4 канала на тини 13 и не разместишь(если надо ко всему еще и 1 свободный вход).
Именно. и если написать rjmp PC-0x0001 то будет бесконечно выполнятся команда которая стоит непосредственно перед переходом, обычно это SBIC/SBIS или одна из BRxx
Но я делал программный ШИМ 4 канала@8бит с частотой перебора 48Кгц от встроенного тактового генератора 4.8Мгц При этом период повторения импульсов составляет порядка 180Гц, что для светодиодов очень даже неплохо. Все делается в обработчике прерывания таймера который считает до 100 и на все 4 канала уходит порядка 60 тактов из 100, включая такты вызова прерывания(8 тактов на вызов прерывания) и выхода из него(4 такта).
Соответственно меняя битность можно увеличить частоту повторения импульсов или количество каналов. Собственно, больше чем 4 канала на тини 13 и не разместишь(если надо ко всему еще и 1 свободный вход).
Ассемблер сам уже вычисляет сколько надо вставить в ПЗУ.
Именно. и если написать rjmp PC-0x0001 то будет бесконечно выполнятся команда которая стоит непосредственно перед переходом, обычно это SBIC/SBIS или одна из BRxx
- xkp
- Опытный кот
- Сообщения: 781
- Зарегистрирован: Ср ноя 18, 2009 12:50:31
- Откуда: ковров
- Контактная информация:
Re: програмирование AVR на АСЕМБЛЕРЕ для чайников
вот с програмным шим у меня проблемка... на осцилографе сопли рисует в момент перехода состояния. а текст программы не покажете? или подскажите как написать программный шим на 3 независимых канала.
вообще идея у меня такая: сделать РГБ мигалочку, только за место простого переключения цветов они бы менялись плавно, а скорость переключения менять от АЦП, скорость нарастания/спада - постоянная, либо тоже от ацп, либо от кнопочки.
вообще идея у меня такая: сделать РГБ мигалочку, только за место простого переключения цветов они бы менялись плавно, а скорость переключения менять от АЦП, скорость нарастания/спада - постоянная, либо тоже от ацп, либо от кнопочки.
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: програмирование AVR на АСЕМБЛЕРЕ для чайников
я делал 4-канальный ШИМ с управлением по последовательному интерфейсу.
вот собственно содержимое обработчика прерывания таймера:
регистры с именами LEDrV, LEDgV, LEDbV, LEDuV содержат необходимый уровень который нужно поддерживать на выходах, просто в программе меняешь значения этих регистров и все.
Еще одна маленькая особенность алгоритма - 0 - выключен полностью, 255 - на одну единицу не дотягивает до 100% яркости это составляет 0.5% и глазом незаметно.
вот собственно содержимое обработчика прерывания таймера:
Код: Выделить всё
#define led_r_on SBI PORTB, PINB2
#define led_r_off CBI PORTB, PINB2
#define led_g_on SBI PORTB, PINB1
#define led_g_off CBI PORTB, PINB1
#define led_b_on SBI PORTB, PINB0
#define led_b_off CBI PORTB, PINB0
#define led_u_on SBI PORTB, PINB4
#define led_u_off CBI PORTB, PINB4
TMR0INT:
; сохранить регистр статуса
IN SREG_INT, SREG
PUSH SREG_INT
INC cyclecount
; Проверяем совпадения c установленными уровнями яркости.
;----- начало блока проверок ------
; ==== КРАСНЫЙ ====
TSTLEDr:
CP cyclecount, LEDrV ; результат = cyclecount - LEDrV
BRSH TSTLEDr_off ; Переход больше или равно, cyclecount >= LEDrV
led_r_on
rjmp TSTLEDg
TSTLEDr_off:
led_r_off
; ==== ЗЕЛЕНЫЙ ====
TSTLEDg:
CP cyclecount, LEDgV ; результат = cyclecount - LEDrV
BRSH TSTLEDg_off ; Переход больше или равно, cyclecount >= LEDrV
led_g_on
rjmp TSTLEDb
TSTLEDg_off:
led_g_off
; ==== СИНИЙ ====
TSTLEDb:
CP cyclecount, LEDbV ; результат = cyclecount - LEDrV
BRSH TSTLEDb_off ; Переход больше или равно, cyclecount >= LEDrV
led_b_on
rjmp TSTLEDu
TSTLEDb_off:
led_b_off
; ==== ФИОЛЕТОВЫЙ ====
TSTLEDu:
CP cyclecount, LEDuV ; результат = cyclecount - LEDrV
BRSH TSTLEDu_off ; Переход больше или равно, cyclecount >= LEDrV
led_u_on
rjmp TSTLED_end
TSTLEDu_off:
led_u_off
TSTLED_end:
;----- конец блока проверок ------
; восстановить регистр статуса?
POP SREG_INT
OUT SREG, SREG_INT
RETIрегистры с именами LEDrV, LEDgV, LEDbV, LEDuV содержат необходимый уровень который нужно поддерживать на выходах, просто в программе меняешь значения этих регистров и все.
Еще одна маленькая особенность алгоритма - 0 - выключен полностью, 255 - на одну единицу не дотягивает до 100% яркости это составляет 0.5% и глазом незаметно.
- xkp
- Опытный кот
- Сообщения: 781
- Зарегистрирован: Ср ноя 18, 2009 12:50:31
- Откуда: ковров
- Контактная информация:
Re: програмирование AVR на АСЕМБЛЕРЕ для чайников
1. что такое cyclecount?
2. я так понимаю это значение какогото счетчика. где и как его считать?
3. это какой то стандартный регистр или назначеный?
4. если назначеный, нельзя ли в начале (или конце) прерываний поставить cyclecount + 1? и пусть себе считает
2. я так понимаю это значение какогото счетчика. где и как его считать?
3. это какой то стандартный регистр или назначеный?
4. если назначеный, нельзя ли в начале (или конце) прерываний поставить cyclecount + 1? и пусть себе считает
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: програмирование AVR на АСЕМБЛЕРЕ для чайников
Это обыкновенный регистр. Он и считает каждое прерывание.
- xkp
- Опытный кот
- Сообщения: 781
- Зарегистрирован: Ср ноя 18, 2009 12:50:31
- Откуда: ковров
- Контактная информация:
Re: програмирование AVR на АСЕМБЛЕРЕ для чайников
у меня частота получается примерно 18Гц (55ms/период)
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Re: програмирование AVR на АСЕМБЛЕРЕ для чайников
Ну все правильно
9600000 (тактовая частота по умолчанию) / 8 (CKDIV8 по умолчанию) / 256 (прерывание по переполнению) / 256 (cyclecount) = 18,310546875 Гц
Сними для начала фьюз CKDIV8. Получишь 146,484375 Гц.
9600000 (тактовая частота по умолчанию) / 8 (CKDIV8 по умолчанию) / 256 (прерывание по переполнению) / 256 (cyclecount) = 18,310546875 Гц
Сними для начала фьюз CKDIV8. Получишь 146,484375 Гц.
- xkp
- Опытный кот
- Сообщения: 781
- Зарегистрирован: Ср ноя 18, 2009 12:50:31
- Откуда: ковров
- Контактная информация:
Re: програмирование AVR на АСЕМБЛЕРЕ для чайников
ой спасибки спасибки, а то я уж было хотел замяукать это все в основной цикл программы. совсем забыл про фьюзики!
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: програмирование AVR на АСЕМБЛЕРЕ для чайников
Настрой таймер на счет до значения в регистре сравнения. Тогда можно считать до 100 а не до 255 и получишь частоту еще больше, хотя конечно ресурсов основному циклу достанется меньше. я в прерывании еще дополнительно признак выставляю что оно произошло - потом в программе можно использовать для подсчета задержек вместо того чтобы считать такты - считать определенное количество прерываний.
- xkp
- Опытный кот
- Сообщения: 781
- Зарегистрирован: Ср ноя 18, 2009 12:50:31
- Откуда: ковров
- Контактная информация:
Re: програмирование AVR на АСЕМБЛЕРЕ для чайников
я убухал туда ячейку памяти, в которой использую 3 бита (red, green, blue соответственно) в основной программе просто задаю нужные биты чеез задержки. в прерываниях смотрю, если соответствующий бит RED (0-бит ячейки памяти) установлен то по каждому переполнению cuclecount добаваляю 1 к яркости LEDrV, соответственно тоже самое для GrEEn (1-бит ячейки памяти) LEDgV и BLUE (2-бит ячейки памяти) LEDbV. добавляю пока не достигнет значения cuclecount, если достиг то не прибавляю. аналогично если битики RGB сброшены, только убавляю до 0.
ДА! прерывания получились больше основной программы, и надо сказать что нарастание (или спад) яркости от 0 до 255 (255-0) длится в районе 0.7 сек. теперь туда надо замяукать несколько табличек с последовательностью зажигания цветов и прикошачить кнопочку
ДА! прерывания получились больше основной программы, и надо сказать что нарастание (или спад) яркости от 0 до 255 (255-0) длится в районе 0.7 сек. теперь туда надо замяукать несколько табличек с последовательностью зажигания цветов и прикошачить кнопочку
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
- xkp
- Опытный кот
- Сообщения: 781
- Зарегистрирован: Ср ноя 18, 2009 12:50:31
- Откуда: ковров
- Контактная информация:
Re: програмирование AVR на АСЕМБЛЕРЕ для чайников
модераторам. просьба перенести в Ассемблер (ASM) для AVR в вопросах и ответах
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
- xkp
- Опытный кот
- Сообщения: 781
- Зарегистрирован: Ср ноя 18, 2009 12:50:31
- Откуда: ковров
- Контактная информация:
Re: програмирование AVR на АСЕМБЛЕРЕ для чайников
что то ни как не вспомню как таблицу засумонить
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
- xkp
- Опытный кот
- Сообщения: 781
- Зарегистрирован: Ср ноя 18, 2009 12:50:31
- Откуда: ковров
- Контактная информация:
Re: програмирование AVR на АСЕМБЛЕРЕ для чайников
ну вот как то так получилось
планирую скорость менять от АЦП и кнопочкой выбирать режимы.
планирую скорость менять от АЦП и кнопочкой выбирать режимы.
- Вложения
-
- Текстовый документ.txt
- (5.21 КБ) 253 скачивания
Последний раз редактировалось xkp Вт фев 21, 2012 22:04:42, всего редактировалось 1 раз.
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: програмирование AVR на АСЕМБЛЕРЕ для чайников
Ох, зря наверно ты запихнул все в прерывание... менять значение яркости можно и в основном цикле, и не по одному такту за раз. Так оно ведь и получается ... что от нуля до максимума досчитает примерно за 65000 прерываний таймера.
А зачем таблицу цветов? Советую сделать ГСЧ на основе 32бит регистра сдвига и использовать случайные значения в качестве таблицы. Скорость наростания/спада яркости можно легко регулировать при помощи целочисленной арифметики - считаем числа как 16 битные, но результат берем только старший байт. В результате чего можно к байту прибавлять числа от 255 за такт до 1/255 за такт(одна единица за 255 тактов!) случайным числом выбирать индивидуально направление роста значения и его скорость для каждого цвета в отдельности.
Хорошая идея?
А зачем таблицу цветов? Советую сделать ГСЧ на основе 32бит регистра сдвига и использовать случайные значения в качестве таблицы. Скорость наростания/спада яркости можно легко регулировать при помощи целочисленной арифметики - считаем числа как 16 битные, но результат берем только старший байт. В результате чего можно к байту прибавлять числа от 255 за такт до 1/255 за такт(одна единица за 255 тактов!) случайным числом выбирать индивидуально направление роста значения и его скорость для каждого цвета в отдельности.
Хорошая идея?
- xkp
- Опытный кот
- Сообщения: 781
- Зарегистрирован: Ср ноя 18, 2009 12:50:31
- Откуда: ковров
- Контактная информация:
Re: програмирование AVR на АСЕМБЛЕРЕ для чайников
Alexeyslav писал(а):ГСЧ на основе 32бит
мы уже с другом думали по поводу ГСЧ и пришли к выводу что на МК возможен лишь генератор ПСЕВДО случайных чисел. ведь именно для ГСЧ нужен генератор белого шума замяукивать на ОУ, и уже с ОУ брать на МК.
таблица нужна для того что бы эффекты сочинять самому. первые три бита отвечают за цвета... ммм... где то это я уже писал... ну а спад/нарастание происходит автоматом 1 в бите - наращиваем до 255, 0 - убавляем до 0.
регулировать скорость спада/нарастания мне не нужно, а вот скорость переключения цветов нужно менять.
ГСЧ/ГПСЧ мне не нужен, так как изначально идея стояла что бы мигало так как задано и установлено
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: програмирование AVR на АСЕМБЛЕРЕ для чайников
Жаль, а у меня руки никак не дойдут. Так бы совместными усилиями выработали бы куски кода в копилку. Вот у меня есть разработанный когда-то алгоритм ГСЧ(коенчно же псевдо... однако для таких целей можно считать случайными числами) 32 бит на ассемблере Z80 процессора. Можно было бы использовать кнопку включения как источник начального состояния регистра - просто инкрементировать память занятую регистром пока кнопка нажата.
- xkp
- Опытный кот
- Сообщения: 781
- Зарегистрирован: Ср ноя 18, 2009 12:50:31
- Откуда: ковров
- Контактная информация:
Re: програмирование AVR на АСЕМБЛЕРЕ для чайников
ну с кнопкой можно и ГСЧ. у меня в копилке лежит электронный кубик на 13 тини. пока держиш кнопку он перебирает все комбинации с частотой примерно 3мГц. кнопу отпускаеш и загораются соответствующие светодиодики. там же в программе можно задать какие комбинации будут попадаться чаще, какие реже. но у меня стоят поровну. КСТАТИ, проект не доделан, планировал сделать электронную игру "кости" со всеми правилами на мега8 или тини261, а сделал только тестовый кубик на 13 тиньке
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
- xkp
- Опытный кот
- Сообщения: 781
- Зарегистрирован: Ср ноя 18, 2009 12:50:31
- Откуда: ковров
- Контактная информация:
Re: програмирование AVR на АСЕМБЛЕРЕ для чайников
так. ладно. с мелкими поделками закончили. все таки до нового года еще долго, что б мигалки городить.
у кого нито есть описание на асме как подключить клавиатуру (PS2 или USB) к АВРу, хотя АВРка навряд ли поттянет USB. ну хотя бы PS2. гугль не помогает, все что я там нашел все на СИ.
у кого нито есть описание на асме как подключить клавиатуру (PS2 или USB) к АВРу, хотя АВРка навряд ли поттянет USB. ну хотя бы PS2. гугль не помогает, все что я там нашел все на СИ.
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic