Спасибо, буду разбиратьсяChipKiller писал(а):reti нужен в конце любого прерывания - стек и улетает из-за его отсутствия
Ассемблер (ASM) для AVR в вопросах и ответах
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Полный чайник.
- Реклама
Re: Ассемблер (ASM) для AVR в вопросах и ответах
А можно каким-то образом вручную обнулить значение таймера TCNT0? Не регистр же 
Полный чайник.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Просто перед ждампом сделай РОР (два раза вроде, т.к. адрес двухбайтный) для выдёргивания адреса возврата из стека.neoneon писал(а): Спасибо, буду разбираться
Прибор, защищённый предохранителем, сгорает первым, защитив предохранитель. Закон Мерфи.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Ставил, после третьего нажатия на кнопку в протеусе почему-то пропадает напряжение почти на всех ножках и 0 реакции. И сообщения: Push program stack: SP is not initializedSeriyvolk писал(а):Просто перед ждампом сделай РОР (два раза вроде, т.к. адрес двухбайтный) для выдёргивания адреса возврата из стека.neoneon писал(а): Спасибо, буду разбираться
Полный чайник.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
В общем, я сделал по-человечески, т.е.создал переменную (типа флага), на какое прерывание нужно переходить, reti после каждого прерывания. Но такая неприятная штука: показывает на переполнение стека по адресу 3c. Постоянно на этот адрес, даже если там программа закончилась...
В протеусе довольно странная зависимость получилась - если число, с которым сравнивается значение циклов, меньше 0x0f, то более-менее работает, хоть иногда и косяки в виде пропадания напряжения. Чем меньше число, тем стабильнее. (0f - секунд 7 горит, зависимость примерно линейная). Но если записать число для 3х минут - 0xCE0, то пропадает напряжение через 20 секунд, еще секунд через 10 ошибки Writing to memory location (число) outside of memory size 0xA0
Ни черта не понимаю, может, косяк самого протеуса? Хотя в дебаггере тоже переполнение 
В протеусе довольно странная зависимость получилась - если число, с которым сравнивается значение циклов, меньше 0x0f, то более-менее работает, хоть иногда и косяки в виде пропадания напряжения. Чем меньше число, тем стабильнее. (0f - секунд 7 горит, зависимость примерно линейная). Но если записать число для 3х минут - 0xCE0, то пропадает напряжение через 20 секунд, еще секунд через 10 ошибки Writing to memory location (число) outside of memory size 0xA0
Полный чайник.
- Реклама
- ChipKiller
- Сверлит текстолит когтями
- Сообщения: 1163
- Зарегистрирован: Ср янв 05, 2011 16:25:15
Re: Ассемблер (ASM) для AVR в вопросах и ответах
... по-человечески на прерывание не переходят - вход в прерывание происходит аппаратно .... косяк не у протеуса - советую в начале выучить матчасть.я сделал по-человечески, т.е.создал переменную (типа флага), на какое прерывание нужно переходить, reti после каждого прерывания
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Я имел ввиду, в какой из видов сна переходит при соответствующем прерыванииChipKiller писал(а):по-человечески на прерывание не переходят - вход в прерывание происходит аппаратно.
Полный чайник.
- Andrew Martin
- Вымогатель припоя
- Сообщения: 606
- Зарегистрирован: Вт июн 25, 2013 18:45:07
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Для начала таблицу прерываний нормально сделай, лучше всего сдери с даташита.
Что это за адреса такие?????
.cseg ; выбор сегмента - программный код
.org $000
rjmp nach ; (reset)
.org $001
rjmp Knopka ; появление 0 на PB1
.org $002
reti
.org $003
rjmp timer ; Timer\counter overflow
Что это за адреса такие?????
.cseg ; выбор сегмента - программный код
.org $000
rjmp nach ; (reset)
.org $001
rjmp Knopka ; появление 0 на PB1
.org $002
reti
.org $003
rjmp timer ; Timer\counter overflow
- Andrew Martin
- Вымогатель припоя
- Сообщения: 606
- Зарегистрирован: Вт июн 25, 2013 18:45:07
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Кто так сравнивает двухбайтовые слова???
;проверка на достижение 3296
sei
cp srh, zh; сравниваем
brlo bla ; переход, если srh<zl
cp srl,zl ;
brlo bla ; переход если srl<zl
Для многобайтовых операций есть комманды adc, sbc, sbci, cpc.
Сравнить можно так:
cp srl,zl
cpc srh,zh
brlo bla
Если не видел - почитай справку.
;проверка на достижение 3296
sei
cp srh, zh; сравниваем
brlo bla ; переход, если srh<zl
cp srl,zl ;
brlo bla ; переход если srl<zl
Для многобайтовых операций есть комманды adc, sbc, sbci, cpc.
Сравнить можно так:
cp srl,zl
cpc srh,zh
brlo bla
Если не видел - почитай справку.
- Вложения
-
- AVRASM.ZIP
- (321.54 КБ) 172 скачивания
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Я исправил, конечно, но проблема та же осталась 
Скопировал текст программы в другой проект - ошибки исчезли О_о Но в протеусе так же пропадает напряжение через 20 сек.
Скопировал текст программы в другой проект - ошибки исчезли О_о Но в протеусе так же пропадает напряжение через 20 сек.
Полный чайник.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Странно. По мне, эта программа вообще не должна работать как задумано. Попробуйте
Спойлер
Код: Выделить всё
.INCLUDE "tn13def.inc"
; ****************************
; Дата: 14.02.2015 ПРОВЕРКА ДРУГОЙ СТРУКТУРЫ
; Для AVR: ATtiny13A
; Тактовая частота: 4.8 МГц
; Выполняемые функции: включение светодиода на 3 минуты, двойное энергосбережение
; =========
; объявления
.equ Fo=4800000
.def temp=r16;
.def flag=r19;
; =========
.cseg ; выбор сегмента - программный код
.org $000
rjmp nach ; (reset)
.org $001
rjmp Knopka ; появление 0 на PB1
.org $002
reti
.org $003
Timer: ; Timer\counter overflow
SBIW ZH:ZL,1
BRNE BLA
ldi temp,0b00000011 ; выкл LED
out PortB, temp ;
out TIMSK0,R0 ; запрещ прерыв таймера
ldi flag,0
reti
; =========
Bla:
cpi flag,1
brlo PC+3; переход, если flag=0
ldi temp,0b00100000 ; разрешение sleep (5 бит), idle (4-3 биты)
out MCUCR, temp ; сон для таймера
RETI
; обработка прерывания
Knopka:
out GIMSK,R0 ; запрещение прерывания от INT0
LDI R22,1<<SE
OUT MCUCR,R22 ; режим работы SLEEP IDLE
ldi temp,0b00000010 ; вкл LED
out PortB, temp ;
ldi temp,0b00000010 ;
out TIMSK0, temp ;разрешение прерыв по переполнению
; очистка счетчика
ldi temp,0b0000001 ; для проверки clk/1!!!!!!!!!
; ldi temp,0b0000101 ;
out TCCR0B,temp ; clk/1024 - tccr0b=xxxx x101
; тут счетчик начал считать
ldi flag,$01 ; флаг=1 -> переход в bla
reti
; =========
; =========
; =========
Nach:
SBI ACSR,ACD ; выключить аналоговый компаратор
; =========
; инициализация портов и периферии
ldi temp,0b11111111 ;
out DDRB,temp ;
ldi temp,0b00000011 ;
out PortB, temp ;
CBI DDRB,1 ; лапу INT0(PB1) на вход с подтяжкой
LDI ZH,HIGH(3*60*Fo/256/1024)
LDI ZL,LOW(3*60*Fo/256/1024) ; загрузка значения 3 минуты
; ldi zh,$0C ;для числа 3296: zl=$E0, zh=$0C
; ldi zl,$E0 ;
CLR R0
OUT TCNT0,R0
ldi temp,0b00110000 ; разрешение sleep (5 бит), power down (4-3 биты),
out MCUCR, temp ; просыпается от низкого уровня на INT0 (1-0 биты)
ldi temp,0b01000000 ; разрешение прерывания от INT0
out GIMSK, temp ;
OUT GIFR,temp
sei
WAIT:
SLEEP
; Основное тело программы
; flag=1? да - к таймеру. нет - спать
CPI flag,1
BREQ WAIT; переход, если flag=1
rjmp Nach
.exit
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Почему?По мне, эта программа вообще не должна работать как задумано.
Ошибок нет. Получилась зависимость времени(сек) от коэф. деления: 2(1), 11(8), 90(64), 360(256).Попробуйте
Поставил коэф. 64, изменил множитель в LDI ZH,HIGH(3*120*Fo/256/1024). Всё работает идеально
1. Почему PB1 изменили на вход? Ведь прерывание работает независимо от того, на вход или выход работает ножка
2. ZH,HIGH(3*60*Fo/256/1024). F/1024=столько сделает подсчетов таймер за секунду. Делим еще на 256, получается 18,31... раз переполнится за секунду таймер. Умножаем на 180, получаем количество прерываний за 3 минуты. Но почему тогда светодиод выключился за 1.5 минуты?
3. Для чего установили флаг прерывания INT0 в GIFR в инициализации?
4. Если PB1 на вход, R вкл, то Pin.1=0. Если PB1 на вход, R вкл., затем вручную установить снова на вход, то Pin.1=0. Но! если PB1 на выход, R вкл., вручную установить на вход, то Pin.1=1. Почему так?
Понял, что я сильно замудрил
Полный чайник.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
1. Вы, в дальнейшем, переходите в POWER DOWN и чтобы прерывание по низкому уровню! сработало нужно какое-то время (не менее 6 тактов) для возникновения генерации RC-генератора.
2. Думаю, что тактирование осуществляется от 9,6МГц
3. Сброс флагов требования прерываний осуществляется записью 1.
4. Эти манипуляции сделаны только для проверки в студии.
2. Думаю, что тактирование осуществляется от 9,6МГц
3. Сброс флагов требования прерываний осуществляется записью 1.
4. Эти манипуляции сделаны только для проверки в студии.
- СКАЗОЧНИК
- Идёт направо - песнь заводит, Налево - сказку говорит.
- Сообщения: 5000
- Зарегистрирован: Чт апр 21, 2011 17:55:50
- Откуда: Иркутск
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Привет всем еще раз. )
Возник у меня очередной тупой вопрос.
Есть некое число, которое представлено 25ю байтами в оперативке (может во флеше) МК АТТИНИ2313. Можно ли с ним делать операции сдвига? Как вообще нормально с ним работать?
Цель, сделать бегущий огонь. Описание его здесь:
http://radiokot.ru/forum/viewtopic.php? ... 7#p2304817
Как в итоге узнавать, что в конце числа уже есть единица? Как делать сдвиг 200 битового числа, чтобы последняя единица (единицы) не вываливались?
З.Ы. хочу обратить внимание, что ИМЕННО 200 светодиодов в линию и именно 25 регистров распаяно для их управления. Бежит огонек от одного конца к другому только ОДИН. остается в конце строки. ЗА ним следующий падает на первый и тоже остается уже вторым с конца. За ними третий. и т.д. до заполнения всей строки.
З.З.Ы. Спасибо. Уже сам все победил. Осталось только по таймеру выровнять.
Если у кого-то будут интересные предложения, обязательно выслушаю. А пока я сделал свой извращенный алгоритм и он работает в железе, не занимая оперативки. Все на циклах и числа в 200 бит как такового не существует...
Возник у меня очередной тупой вопрос.
Есть некое число, которое представлено 25ю байтами в оперативке (может во флеше) МК АТТИНИ2313. Можно ли с ним делать операции сдвига? Как вообще нормально с ним работать?
Цель, сделать бегущий огонь. Описание его здесь:
http://radiokot.ru/forum/viewtopic.php? ... 7#p2304817
Как в итоге узнавать, что в конце числа уже есть единица? Как делать сдвиг 200 битового числа, чтобы последняя единица (единицы) не вываливались?
З.Ы. хочу обратить внимание, что ИМЕННО 200 светодиодов в линию и именно 25 регистров распаяно для их управления. Бежит огонек от одного конца к другому только ОДИН. остается в конце строки. ЗА ним следующий падает на первый и тоже остается уже вторым с конца. За ними третий. и т.д. до заполнения всей строки.
З.З.Ы. Спасибо. Уже сам все победил. Осталось только по таймеру выровнять.
Если у кого-то будут интересные предложения, обязательно выслушаю. А пока я сделал свой извращенный алгоритм и он работает в железе, не занимая оперативки. Все на циклах и числа в 200 бит как такового не существует...
Станислав
- Engineer_Keen
- Друг Кота
- Сообщения: 3872
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Ассемблер (ASM) для AVR в вопросах и ответах
LSL, LSR - сдвиг влево и вправо, выдвинутый бит остается в С, с обратной стороны задвигается 0.
ROL , ROR - тоже самое, но задвигаемый бит берется как раз из С, так можно двигать влево-вправо числа любой битности.
ROL , ROR - тоже самое, но задвигаемый бит берется как раз из С, так можно двигать влево-вправо числа любой битности.
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
- СКАЗОЧНИК
- Идёт направо - песнь заводит, Налево - сказку говорит.
- Сообщения: 5000
- Зарегистрирован: Чт апр 21, 2011 17:55:50
- Откуда: Иркутск
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Понял. Знаю такие команды.
Однако на данный момент, сделал по своему. и неоптимизированный вариант эффекта не занимает оперативной и флеш памяти. Используются только регистры. Сам эффект при компиляции 116 Байт. И 56 Байт начальная конфигурация МК. Я доволен.
Однако на данный момент, сделал по своему. и неоптимизированный вариант эффекта не занимает оперативной и флеш памяти. Используются только регистры. Сам эффект при компиляции 116 Байт. И 56 Байт начальная конфигурация МК. Я доволен.
Станислав
- Flash.#13
- Держит паяльник хвостом
- Сообщения: 965
- Зарегистрирован: Сб апр 12, 2014 23:46:03
- Откуда: Киев
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Хелп, полез в ШИМ с "точной фазой", (Phase Correct PWM) и дело не пошло (ATMega8). По описанию ШИМ в данном режиме меняет состояние ножки доходя до регистра сравнения, и затем счетчик реверсируется, и вновь меняет состояние ножки дойдя нули и обратно. В таком режиме вроде можно получить ровные прямоугольные колебания, их надо для пищалки, для звука будильника типа "пи". Обычный режим "быстрый ШИМ" запускается нормально, но с "точной фазой" чего-то не стартует. Нужна помощь, чего не так делаю:
Вписал WGM13_10 1001 (Phase and Freguensy Correct PWM, с OCR1A), но ножка OC1A не меняет состояние 
Код: Выделить всё
sbi DDRB, 1 ;ножка OC1A вкл.
ldi R16, 0x00
out OCR1AH, R16
ldi R16, 0xFF
out OCR1AL, R16 ;вписали задержку 00FF в OCR1A
ldi R16, 0b11000001
out TCCR1A, R16 ;настройка
ldi R16, 0b00010001
out TCCR1B, R16 ;настройка и пуск
Немного файлов по зажиганию: ФУОЗ 2.2 + программа правки таблиц 0.987, монтажка
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18644
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
для звука будильника типа "пи" сойдет и Fast PWM с "неточной фазой" 
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Flash.#13
- Держит паяльник хвостом
- Сообщения: 965
- Зарегистрирован: Сб апр 12, 2014 23:46:03
- Откуда: Киев
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Неа, Fast PWM плохо звучит и плохо регулируется. Почти день мучил этот будильник, в результате увидел что даже с транзистором в режиме эмиттерного повторителя он слишьком тихий, было принято решение выковырять пищалку с ее обвязкой с "дешевого китайского будильника", и использовать МК как ее включатель. 
Немного файлов по зажиганию: ФУОЗ 2.2 + программа правки таблиц 0.987, монтажка
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18644
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
извиняюсь за оффтоп, но может у вас со слухом что-то не то? я делал полифонический "звонок" на тиньке с FastPWM на 15 кГц - звук был отличный! а ШИМ с "корректной фазой" будет в2 раза меньше по частоте, следовательно заведомо хуже по тембру.
однако, для звука "пи" тембр малокритичен и скорее будет определяться типом излучателя, чем симметрией фазы ШИМ...
однако, для звука "пи" тембр малокритичен и скорее будет определяться типом излучателя, чем симметрией фазы ШИМ...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!


