Ассемблер (ASM) для AVR в вопросах и ответах
- СКАЗОЧНИК
- Идёт направо - песнь заводит, Налево - сказку говорит.
- Сообщения: 5000
- Зарегистрирован: Чт апр 21, 2011 17:55:50
- Откуда: Иркутск
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Все правильно. Так я и считал тоже.
Схему доделал. Поставили на машину. Успешно работает. ))) Изменили только критерии (условия включения и выключения).
Теперь она включает свет туманок только если машина двигается (не важно как, главное, что импульсы от спидометра идут), при этом, включает их только после 5 секунд задержки. Если разогнались до 40 км/ч, то включает второй ближний. Выключает их одновременно, если мы 10 секунд никуда не двигались. Если в течение 10 секунд двигались, то они продолжают гореть.
Как показывает практика, даже в пробках по городу, автомобиль все равно катится чуток, чего вполне достаточно, чтобы не моргали фары.
Как-то так.
Если кому нужно, то выложу схему и исходник.
Схему доделал. Поставили на машину. Успешно работает. ))) Изменили только критерии (условия включения и выключения).
Теперь она включает свет туманок только если машина двигается (не важно как, главное, что импульсы от спидометра идут), при этом, включает их только после 5 секунд задержки. Если разогнались до 40 км/ч, то включает второй ближний. Выключает их одновременно, если мы 10 секунд никуда не двигались. Если в течение 10 секунд двигались, то они продолжают гореть.
Как показывает практика, даже в пробках по городу, автомобиль все равно катится чуток, чего вполне достаточно, чтобы не моргали фары.
Как-то так.
Если кому нужно, то выложу схему и исходник.
Станислав
-
Demiurg
- Это не хвост, это антенна
- Сообщения: 1480
- Зарегистрирован: Ср июн 25, 2008 15:19:44
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Зачем столько заморочек с фарами? Смысл вашего девайса?СКАЗОЧНИК писал(а):...
- СКАЗОЧНИК
- Идёт направо - песнь заводит, Налево - сказку говорит.
- Сообщения: 5000
- Зарегистрирован: Чт апр 21, 2011 17:55:50
- Откуда: Иркутск
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Заказ, за который я заработал немножко денежков. Подобные заказы на данный момент, практически основной мой источник доходов...
З.Ы. А практический смысл в том, что по вразумению того человека его ксеноновые фары в туманках в маленьком объеме будут греться. Если в движении они лучше остывают, а когда остановился, чтобы зря не горели и не забывать выключать их.
Станислав
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Хоть и оффтоп, но от такого дрыгания ксенону придёт трындец ещё быстрее.
Прибор, защищённый предохранителем, сгорает первым, защитив предохранитель. Закон Мерфи.
- СКАЗОЧНИК
- Идёт направо - песнь заводит, Налево - сказку говорит.
- Сообщения: 5000
- Зарегистрирован: Чт апр 21, 2011 17:55:50
- Откуда: Иркутск
Re: Ассемблер (ASM) для AVR в вопросах и ответах
А нет никакого дрыгания..
Он не выключается, пока не остановишься. А когда останавливаешься, обычно сам выключаешь его...
Станислав
- alex38779
- Потрогал лапой паяльник
- Сообщения: 386
- Зарегистрирован: Чт окт 31, 2013 10:54:32
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Хочу переходить по подпрограммам из таблицы по нажатию кнопки, но что то не выходит.
Для отладки сделал так первая - горит диод, вторая - мигает.
Изначально горит, нажимаю и держу кнопку- мигает, отпускаю -снова горит. Как сделать что бы осталась подпрограмма где мигает светодиод? В ручную вбиваю индекс подпрограммы - все переходит и работает.
регистры:
это в озу
таблица подпрограмм:
сам код
разобрался. не правильный ход алгоритма 
Для отладки сделал так первая - горит диод, вторая - мигает.
Изначально горит, нажимаю и держу кнопку- мигает, отпускаю -снова горит. Как сделать что бы осталась подпрограмма где мигает светодиод? В ручную вбиваю индекс подпрограммы - все переходит и работает.
регистры:
Код: Выделить всё
.def temp = r20
.def temp1 = r21Код: Выделить всё
;выбор подпрограммы
count_prog: .byte 1
count_prog1: .byte 1Код: Выделить всё
;таблица подпрограмм
table_prog:
.dw program_z, program_0, program_1, program_2, program_3Код: Выделить всё
main:
lds temp, count_prog
;выбор подпрограммы
in temp1, PINB ;кнопка, подтянута к плюсу
sbrс temp1, 3 ;если в ноль то пропуск след команды
rjmp main_1
inc temp
sts count_prog, temp
main_1:
;выбор из таблицы
lds temp, count_prog
lds temp1, count_prog1
ldi ZL, low(table_prog<<1)
ldi ZH, high(table_prog<<1)
lsl temp
clr temp1
add zl, temp
add zh, temp1
lpm temp, Z+
lpm temp1, Z
movw ZH:ZL, temp1:temp
ldi temp, 0
ldi temp1, 0
ijmp ;переход по адресу
rjmp mainRe: Ассемблер (ASM) для AVR в вопросах и ответах
Фонарик с включением-выключением нефиксированной кнопкой
и накачкой меандром (~100кГц) на at90s1200 написать на asm как можно ближе к следующему коду
DDRD=0x00;PORTD=0x01;
DDRB=0x1C;PORTB=0x00;
R28=1;
While(1)
{
if (PIND.1 ==0)
{ delay_200ms (+-50%)
if (PIND.1 ==0 )
{ if ( R28==0) R28=1;
else R28=0;
delay_200ms (+-50%)
}
}
if (R28==1)
{
PORTB=0x1C;
PORTB=0x1C;
PORTB=0x1C;
PORTB=0x1C;
PORTB=0x1C;
PORTB=0x0;
PORTB=0x0;
}
и накачкой меандром (~100кГц) на at90s1200 написать на asm как можно ближе к следующему коду
DDRD=0x00;PORTD=0x01;
DDRB=0x1C;PORTB=0x00;
R28=1;
While(1)
{
if (PIND.1 ==0)
{ delay_200ms (+-50%)
if (PIND.1 ==0 )
{ if ( R28==0) R28=1;
else R28=0;
delay_200ms (+-50%)
}
}
if (R28==1)
{
PORTB=0x1C;
PORTB=0x1C;
PORTB=0x1C;
PORTB=0x1C;
PORTB=0x1C;
PORTB=0x0;
PORTB=0x0;
}
ух ты.... показывает
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Писать эту лабуду не буду, но тут не соблюден баланс скобок: While (1) { не закрыт. Если писать на асме, нужно знать, как принимает параметр подпрограмма задержки. Или она рассчитана на тупо отмерить всегда 200ms ?
И вообще: что за странная задача - очередной курсач ? И что за бессмысленное пихание одной и той же инфы несколько раз в порт ?
И вообще: что за странная задача - очередной курсач ? И что за бессмысленное пихание одной и той же инфы несколько раз в порт ?
-
Demiurg
- Это не хвост, это антенна
- Сообщения: 1480
- Зарегистрирован: Ср июн 25, 2008 15:19:44
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Могу написать. За деньги. 1000 р на карту сбербанка. Предоплата.
Приведенный код никуда не годится.
Приведенный код никуда не годится.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Могу за бесплатно
, если спрошающий объяснит внятно, что должен делать этот бред сивой кобылы код и расставит скобки и ; . О том, что исходник д.быть читаемо отформатирован, и мечтать уж не приходится. 
Последний раз редактировалось Jack_A Вт апр 19, 2016 19:39:55, всего редактировалось 1 раз.
-
Demiurg
- Это не хвост, это антенна
- Сообщения: 1480
- Зарегистрирован: Ср июн 25, 2008 15:19:44
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Товарищ даже не потрудился сказать: мол, ребята, так и так, я полный лох чайник, помогите, пожалуйста, написать программу примерно такого плана "бла-бла".Jack_A писал(а):Могу за бесплатно, если спрошающий объяснит внятно, что должен делать этот бред сивой кобылы код .
Он просто поставил перед фактом. А ну-ка быстренько накидали мне на асме по моему невнятному ТЗ.
Все еще есть желание заняться бесплатным альтруизмом?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
DDRD=0x00;PORTD=0x01;
DDRB=0x1C;PORTB=0x00;
PowerOn=1;
while (1)
{
if (PIND.0 ==0)
{ PORTB=0x1C;
delay_ms(100);
PORTB=0x0;
if (PIND.0 ==0 )
{ if ( PowerOn==0) PowerOn=1;
else PowerOn=0;
delay_ms(100);
}
}
if (PowerOn==1)
{
PORTB=0x1C;
PORTB=0x1C;
PORTB=0x1C;
PORTB=0x1C;
PORTB=0x1C;
PORTB=0x1C;
PORTB=0x1C;
PORTB=0x1C;
PORTB=0x1C;
PORTB=0x1C;
PORTB=0x0;
}
}
вот рабочий код (tiny2313) хочу на асм (90s1200) PowerOn - любой РОН
собственно даже код не нужен
но duty cycle на выходе 40 -60%
второй оратор веселит .
сосбственно проще asm листинг подкорректировать под 1200 даже не вникая в джампы
стек в апаратный и все
смысл прост кнопкой без фиксации включаем-выключаем генератор накачки удвоитель или степап на светодиод
DDRB=0x1C;PORTB=0x00;
PowerOn=1;
while (1)
{
if (PIND.0 ==0)
{ PORTB=0x1C;
delay_ms(100);
PORTB=0x0;
if (PIND.0 ==0 )
{ if ( PowerOn==0) PowerOn=1;
else PowerOn=0;
delay_ms(100);
}
}
if (PowerOn==1)
{
PORTB=0x1C;
PORTB=0x1C;
PORTB=0x1C;
PORTB=0x1C;
PORTB=0x1C;
PORTB=0x1C;
PORTB=0x1C;
PORTB=0x1C;
PORTB=0x1C;
PORTB=0x1C;
PORTB=0x0;
}
}
вот рабочий код (tiny2313) хочу на асм (90s1200) PowerOn - любой РОН
собственно даже код не нужен
но duty cycle на выходе 40 -60%
второй оратор веселит .
сосбственно проще asm листинг подкорректировать под 1200 даже не вникая в джампы
стек в апаратный и все
смысл прост кнопкой без фиксации включаем-выключаем генератор накачки удвоитель или степап на светодиод
ух ты.... показывает
-
Demiurg
- Это не хвост, это антенна
- Сообщения: 1480
- Зарегистрирован: Ср июн 25, 2008 15:19:44
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Самим в лом написать, если вас ораторы веселят? Почему выбран такой древний МК, у которого аппаратный стек, и который снят с производства? У вас остался этот камушек? Вот и пишите сами программу под этот камень. Не хотите сами, выбросьте каку приведенный код, напишите нормальное ТЗ, без приведения сторонних кодов, которые только с толку сбивают. И просите нормально. А не ставьте перед фактом. Типа, запилите-ка мне программу на асме. За спасибо.12val12 писал(а):второй оратор веселит .
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Ну вот, уже баланс скобок появился. Все, оказывается, не так уж безнадежно. Вместо фиксированного delay200ms появился задающий время параметр. Теперь под пытками будет вытянуто: в чем он передается? Сама подпрограмма задержки будет библиотечная, и она сработает на 1200-м? Тогда в чем смысл переписки на асм? И сакральные мантры PORTB=0x1C; тоже имеют магический смысл?
Если бы в Радиокоте провели конкурс на самое замудомудренное описание самой простейшей задачки - вот кандидат на победителя.
Если бы в Радиокоте провели конкурс на самое замудомудренное описание самой простейшей задачки - вот кандидат на победителя.
-
Demiurg
- Это не хвост, это антенна
- Сообщения: 1480
- Зарегистрирован: Ср июн 25, 2008 15:19:44
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Многократный вывод в порт - аналог асм команд nop или rjmp PC+1. Только товарищ просит меандр, а по программе ни хрена не меандр.Jack_A писал(а):...
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Заработало можно сказать с НУЛЕВОГО раза т е мгновенно
скопировал аsm листинг main с кодевижена .
на всяк случай оставил инит выклченного компаратора. задержка с прошлого проекта
заполнение 55 % включается выключается . можно сказать меандр .
Все
подправил вторую задержку до 0.3 сек лучше срабатывает кнопка
спасибо тов akl за процедуру задержки .
скопировал аsm листинг main с кодевижена .
на всяк случай оставил инит выклченного компаратора. задержка с прошлого проекта
заполнение 55 % включается выключается . можно сказать меандр .
Все
подправил вторую задержку до 0.3 сек лучше срабатывает кнопка
Код: Выделить всё
.INCLUDE "1200def.inc"
.equ Fo=4000000
;NAME DEFINITIONS FOR GLOBAL VARIABLES ALLOCATED TO REGISTERS
.def COUNTER=R20
.DEF _PowerOn=R3
.CSEG
.ORG $0000
RJMP INIT ; Reset Handler
RJMP EXT_INT0 ; IRQ0 Handler
;.ORG $0006
.ORG $0002
CLI
EXT_INT0:
INIT:
; 0000 0071 // Analog Comparator initialization
; 0000 0072 // Analog Comparator: Off
; 0000 0073 // The Analog Comparator's positive input is
; 0000 0074 // connected to the AIN0 pin
; 0000 0075 // The Analog Comparator's negative input is
; 0000 0076 // connected to the AIN1 pin
; 0000 0077 ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
LDI R30,LOW(128)
OUT 0x8,R30
; 0000 0078 // Digital input buffer on AIN0: On
; 0000 0079 // Digital input buffer on AIN1: On
; 0000 007A DIDR=(0<<AIN0D) | (0<<AIN1D);
LDI R30,LOW(0)
OUT 0x1,R30
; 0000 007B
; 0000 007C
; 0000 007D
; 0000 007E
; 0000 007F DDRD=0x00;PORTD=0x01;
OUT 0x11,R30
LDI R30,LOW(1)
OUT 0x12,R30
; 0000 0080 DDRB=0x1C;PORTB=0x00;
LDI R30,LOW(28)
OUT 0x17,R30
LDI R30,LOW(0)
OUT 0x18,R30
; 0000 0081 PowerOn=1;
LDI R30,LOW(1)
MOV R3,R30
; 0000 0082 while (1)
_0x3:
; 0000 0083 {
; 0000 0084 if (PIND.0 ==0)
SBIC 0x10,0
RJMP _0x6
; 0000 0085
; 0000 0086 { PORTB=0x1C;
LDI R30,LOW(28)
OUT 0x18,R30
; 0000 0087 delay_ms(100);
; ------------------------
LDI R20,BYTE3(100*Fo/1000/5)
LDI R21,BYTE2(100*Fo/1000/5)
LDI R22,BYTE1(100*Fo/1000/5)
RCALL DELAY
; 0000 0088 PORTB=0x0;
LDI R30,LOW(0)
OUT 0x18,R30
; 0000 0089 if (PIND.0 ==0 )
SBIC 0x10,0
RJMP _0x7
; 0000 008A { if ( PowerOn==0) PowerOn=1;
TST R3
BRNE _0x8
LDI R30,LOW(1)
MOV R3,R30
; 0000 008B else PowerOn=0;
RJMP _0x9
_0x8:
CLR R3
; 0000 008C delay_ms(300);
_0x9:
LDI R20,BYTE3(300*Fo/1000/5)
LDI R21,BYTE2(300*Fo/1000/5)
LDI R22,BYTE1(300*Fo/1000/5)
RCALL DELAY
; 0000 008D }
; 0000 008E }
_0x7:
; 0000 008F if (PowerOn==1)
_0x6:
LDI R30,LOW(1)
CP R30,R3
BRNE _0xA
; 0000 0090 {
; 0000 0091 PORTB=0x1C;
LDI R30,LOW(28)
OUT 0x18,R30
; 0000 0092 PORTB=0x1C;
OUT 0x18,R30
; 0000 0093 PORTB=0x1C;
OUT 0x18,R30
; 0000 0094 PORTB=0x1C;
OUT 0x18,R30
; 0000 0095 PORTB=0x1C;
OUT 0x18,R30
; 0000 0096 PORTB=0x1C;
OUT 0x18,R30
; 0000 0097 PORTB=0x1C;
OUT 0x18,R30
; 0000 0098 PORTB=0x1C;
OUT 0x18,R30
; 0000 0099 PORTB=0x1C;
OUT 0x18,R30
; 0000 009A PORTB=0x1C;
OUT 0x18,R30
; 0000 009B PORTB=0x0;
LDI R30,LOW(0)
OUT 0x18,R30
; 0000 009C }
; 0000 009D }
_0xA:
RJMP _0x3
; 0000 009E
; 0000 009F }
_0xB:
RJMP _0xB
; .FEND
;
;
;-----------------------------
DELAY:
SUBI R22,BYTE1(1)
SBCI R21,BYTE2(1)
SBCI R20,BYTE3(1)
BRNE DELAY
RET
ух ты.... показывает
-
Demiurg
- Это не хвост, это антенна
- Сообщения: 1480
- Зарегистрирован: Ср июн 25, 2008 15:19:44
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Алгоритм работы:
1 - Ждем нажатия кнопки.
Если не нажато, то п. 1.
Если нажато, то п.2.
2 - Задержка 30-40 мс, по окончании задержки, если еще нажато, то п.3, если нет, то п. 1.
3 - Если флаг 0, то включаем генератор и флаг =1, если флаг=1, то выключаем генератор и флаг=0. Генератор-таймер в режиме ШИМ.
4 - Ждем отжатия кнопки.
Если не отжато, то п. 4.
Если отжато, то задержка 30-40 мс, по окончании задержки, если еще не отжато, то п. 4, если отжато, то п. 1.
1 - Ждем нажатия кнопки.
Если не нажато, то п. 1.
Если нажато, то п.2.
2 - Задержка 30-40 мс, по окончании задержки, если еще нажато, то п.3, если нет, то п. 1.
3 - Если флаг 0, то включаем генератор и флаг =1, если флаг=1, то выключаем генератор и флаг=0. Генератор-таймер в режиме ШИМ.
4 - Ждем отжатия кнопки.
Если не отжато, то п. 4.
Если отжато, то задержка 30-40 мс, по окончании задержки, если еще не отжато, то п. 4, если отжато, то п. 1.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Не нашёл, где задать свой вопрос, потому спрошу здесь.
Объясните, пожалуйста как работает статусный регистр, пользоваться я им умею и назначение всех его битов мне понятно. Не могу понять как он "привязывается" к регистру, как МК понимает, что именно в этом регистре отрицательное число или вот в том регистре флаг заёма?
И попутно 2й вопрос, какие служебные регистры можно использовать для своих целей? Например, USIBR при неиспользуемом USI?
Спасибо.
Объясните, пожалуйста как работает статусный регистр, пользоваться я им умею и назначение всех его битов мне понятно. Не могу понять как он "привязывается" к регистру, как МК понимает, что именно в этом регистре отрицательное число или вот в том регистре флаг заёма?
И попутно 2й вопрос, какие служебные регистры можно использовать для своих целей? Например, USIBR при неиспользуемом USI?
Спасибо.
-
Demiurg
- Это не хвост, это антенна
- Сообщения: 1480
- Зарегистрирован: Ср июн 25, 2008 15:19:44
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
После каждого выполнения каждой команды в регистре SREG в зависимости от команды устанавливаются или сбрасываются те или иные флаги. Есть команды, которые не влияют на регистр SREG.SatinS писал(а):Не нашёл, где задать свой вопрос, потому спрошу здесь.
Объясните, пожалуйста как работает статусный регистр, пользоваться я им умею и назначение всех его битов мне понятно. Не могу понять как он "привязывается" к регистру, как МК понимает, что именно в этом регистре отрицательное число или вот в том регистре флаг заёма?
Спасибо.
Если выполняются операции на регистрах, то после выполнение команды те или иные флаги относятся к тому регистру, на котором совершаются операции.
Установка или сброс флагов происходят внутри АЛУ (арифметико-логическое устройство). Это уже относится к схемотехнике цифровых устройств.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Вот мне и интересно - как происходит механизм запоминания, к какому именно регистру относится флаг, и сколько регистров с флагами можно обрабатывать, в даташите на авр я ничего об этом не нашёл.Demiurg писал(а):...
