Инверсия

Обсуждаем контроллеры компании Atmel.
Ответить
Родился
Сообщения: 6
Зарегистрирован: Сб май 17, 2014 23:55:09

Сообщение Denis17 »

Привет всем. Есть программа для двух бегущих огоньков. В АВР Студио работает, но при подключении к схеме происходит не последовательное загорание диодов а последовательное гашение. Я так понимаю необходимо сделать инверсию, но не обладаю достаточными знаниями. Помогите кто чем может, спасибо.
Текст программы:
.nolist
.include "8515def.inc"
.list
.equ DelayValue=10
ldi R31 , high (RAMEND)
out SPH, R31
ldi R31 , low(RAMEND)
out SPL, R31
ldi R16 ,0b11111111
out DDRB, R16
Label: ldi R16,0b00000011
MainLoop :
out PORTB, R16
rcall Delay
cpi R16,0b11000000
breq Label
lsl R16
rjmp MainLoop
Delay :
ldi R24 , low( DelayValue )
ldi R25 , high ( DelayValue )
DelayLoop :
sbiw R24 , 1
brne DelayLoop ;
ret
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18787
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

схемка-то у вас, небось, такая: катод светодиода на пин МК, а анод - на пиатние через резистор :) вот у вас и гашение вместо загорания. переставьте светодиоды: анод через резистор на пин МК, а катод - на общий, и будет вам загорание вместо гашения :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Сообщение ИС-пытатель »

Код: Выделить всё

 .nolist 
.include "8515def.inc" 
.list 
.equ DelayValue=10
ldi R31 , high (RAMEND)
out SPH, R31
ldi R31 , low(RAMEND)
out SPL, R31
ldi R16 ,0b11111111
out DDRB, R16
Label: ldi R16,0b11111100
MainLoop :
out PORTB, R16
rcall Delay
cpi R16,0b00111111
breq Label
lsl R16
inc r16
rjmp MainLoop 
Delay :
ldi R24 , low( DelayValue )
ldi R25 , high ( DelayValue )
DelayLoop :
sbiw R24 , 1
brne DelayLoop ;
ret
Друг Кота
Аватара пользователя
Сообщения: 15776
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Чтобы не иметь проблем по поводу выходной полярности используй т для промежуточного накопления и обработки не сам регистр порта, а промежуточный буфер-регистр из регистрового файла. Затем при операции вывода из буфера в порт можно вствить и инверсию и маскирование (по необходимости) а не "курочить" всю программу обработки данных.
:)
Реклама
Эиком - электронные компоненты и радиодетали
Родился
Сообщения: 6
Зарегистрирован: Сб май 17, 2014 23:55:09

Сообщение Denis17 »

В том и суть, что я не имею права трогать схему, моя задача-изменить программу..
Реклама
Родился
Сообщения: 6
Зарегистрирован: Сб май 17, 2014 23:55:09

Сообщение Denis17 »

За ответ спасибо ИС-пытатель..на неделе проверю работоспособность, в программе работает как задумывалось
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Сообщение ИС-пытатель »

BOB51 писал(а):Чтобы не иметь проблем по поводу выходной полярности используй т для промежуточного накопления и обработки не сам регистр порта, а промежуточный буфер-регистр из регистрового файла.
BOB51, так у него и так через r16 все сделано.
Друг Кота
Аватара пользователя
Сообщения: 15776
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Вот тут и "прикол" - R16 в данном фрагменте - основной рабочий регистр, а не буфер вывода. :)
Для внесения исправлений по инверсии потребуется в нескольких местах код править (хотя-бы минимум замена LSL на ROL с CY=1).
Ежли использовать дополнительный буфер - потребуется делать манипуляцию только с результатом.
8)
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Сообщение ИС-пытатель »

Можно и через "буфер", это более правильный подход. Но в такой маленькой программе это чрезмерно. Буфер - это всегда дополнительный расход процессорного времени и памяти. Проще, чем я написал, уж некуда.
Ответить

Вернуться в «AVR»