непонимаю как бегущий огонь сделать

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Сообщение TamTam » 25 фев 2007, 12:37

Да именно так.  :)
TamTam
 
Сообщения: 10
Зарегистрирован: 16 фев 2007, 20:30
Откуда: г.Воронеж

Сообщение Myp » 25 фев 2007, 13:08

вот ассемблерный листинг
прога моргает светиком
Код: Выделить всё

171 while (1)
_0xA:
;     172       {
;     173       // Place your code here
;     174
;     175         delay_ms(100);
   LDI  R30,LOW(100)
   LDI  R31,HIGH(100)
   RCALL SUBOPT_0x0
;     176         PORTB.4 = 0;
   CBI  0x18,4
;     177         delay_ms(100);
   LDI  R30,LOW(100)
   LDI  R31,HIGH(100)
   RCALL SUBOPT_0x0
;     178         PORTB.4 = 1;
   SBI  0x18,4
;     179      
;     180        
;     181       };
   RJMP _0xA
;     182 }
_0xD:
   RJMP _0xD

чёта файл не аттачицца воттекст короче
действительно компилятор устанавливает и сбрасывает биты
PORTB.4 = 0;
CBI  0x18,4

PORTB.4 = 1;
SBI  0x18,4

непонимаю...
вот лежит у меня МК и дрыгает лапками=)
одной через PORTB и другой лапкой через PINB


       
Код: Выделить всё
delay_ms(500);
       PORTB.4 = 0;
       PINB.0 = 0;
       delay_ms(500);
       PORTB.4 = 1;
       PINB.0 = 1;

вот этот код даёт интереснеййший эффект=)

11
01
10
00


тоесть светик на ноге 4 (который PORTB)успевает 4 раза моргнуть а светик на ноге 0 (который PINB)моргает 2 раза
асм:
Код: Выделить всё
while (1)
_0xA:
;     172       {
;     173       // Place your code here
;     174
;     175         delay_ms(500);
   LDI  R30,LOW(500)
   LDI  R31,HIGH(500)
   RCALL SUBOPT_0x0
;     176         PORTB.4 = 0;
   CBI  0x18,4
;     177         PINB.0 = 0;
   CBI  0x16,0
;     178         delay_ms(500);
   LDI  R30,LOW(500)
   LDI  R31,HIGH(500)
   RCALL SUBOPT_0x0
;     179         PORTB.4 = 1;
   SBI  0x18,4
;     180         PINB.0 = 1;  
   SBI  0x16,0
;     181        
;     182        
;     183       };
   RJMP _0xA
;     184 }

всё крайне прилично=)
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Сообщение avr123.nm.ru » 25 фев 2007, 14:33

TamTam писал(а):Да именно так.  :)


что-то не бегуть !  только 2 светодиода перемигиваются и усё.
Вложения
led_no_run.rar
(5.18 КиБ) Скачиваний: 36
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Сообщение avr123.nm.ru » 25 фев 2007, 14:38

Myp писал(а):вот этот код даёт интереснеййший эффект=)


Слава богу в симуляторе все в норме.
Вложения
all_good.rar
(5.14 КиБ) Скачиваний: 44
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Сообщение TamTam » 25 фев 2007, 14:41

товарищи побойтесь бога ну самито хоть что нибудь ручками поменяйти, там для двух бит выполняется полная таблица истености. поменяв пару символов можно на весь порт сделать..
TamTam
 
Сообщения: 10
Зарегистрирован: 16 фев 2007, 20:30
Откуда: г.Воронеж

Сообщение avr123.nm.ru » 25 фев 2007, 15:08

TamTam писал(а):товарищи побойтесь бога ну самито хоть что нибудь ручками поменяйти, там для двух бит выполняется полная таблица истености. поменяв пару символов можно на весь порт сделать..


дак чтож ты написал

TamTam писал(а):Да именно так.  :)


???
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Сообщение avr123.nm.ru » 25 фев 2007, 15:09

Вот не мудурствуя лукаво сделал по-быстрому:

Бегущие огонек - решение "В ЛОБ"
Горят 7 светодиодов а бежит 1 не горящий.

Светодиоды подключены между выводами PORTA
и питанием МК через резисторы.  симуляция в VMLAB (файл z2_vm.prj)

Виртуальный осциллограф показывает сигналы - ЛЯПОТА ...

Компилятор CodeVisionAVR  МК  ATmega16
Вложения
led_run.rar
(5.59 КиБ) Скачиваний: 50
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Сообщение D-M » 25 фев 2007, 15:18

а я по ламерски сделал зато более понятно :wink:
Код: Выделить всё
#define LED  PORTD

while(1){
LED = 0b11111110;
delay
LED = 0b11111101;
delay
LED = 0b11111011;
delay
LED = 0b11110111;
delay
LED = 0b11101111;
delay
LED = 0b11011111;
delay
LED = 0b10111111;
delay
LED = 0b01111111;
delay
}
Аватара пользователя
D-M
 
Сообщения: 486
Зарегистрирован: 28 мар 2006, 17:28
Откуда: Пенза

Сообщение avr123.nm.ru » 25 фев 2007, 15:53

еще делэй задефайнить бы.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Сообщение D-M » 25 фев 2007, 16:03

ну заместо делэя надо написать нужную нам задержку
и поместить это в главную функцию и инициализировать порты :lol:
Аватара пользователя
D-M
 
Сообщения: 486
Зарегистрирован: 28 мар 2006, 17:28
Откуда: Пенза

Сообщение TamTam » 25 фев 2007, 16:22

avr123.nm.ru писал(а):
TamTam писал(а):товарищи побойтесь бога ну самито хоть что нибудь ручками поменяйти, там для двух бит выполняется полная таблица истености. поменяв пару символов можно на весь порт сделать..


дак чтож ты написал

TamTam писал(а):Да именно так.  :)


???



Я не совсем правильено понял, набо было 1 огоньком по порту бегать а я вам дал таблицу истенности в целом это вам не подойдет, а ежеле вам надо просто бег огонь так там еще проще просто делайте сдвиг.
TamTam
 
Сообщения: 10
Зарегистрирован: 16 фев 2007, 20:30
Откуда: г.Воронеж

Сообщение avr123.nm.ru » 25 фев 2007, 17:38

TamTam писал(а):ежеле вам надо просто бег огонь так там еще проще просто делайте сдвиг.


я и сделал сдвиг в примере в прицепе выше.

TamTam писал(а):ежеле вам надо просто бег огонь.


я думал что бегущий огонь это и есть "просто бег огонь"   :lol:
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Сообщение avr123.nm.ru » 07 мар 2007, 04:28

Myp писал(а):непонимаю...
вот лежит у меня МК и дрыгает лапками=)
одной через PORTB и другой лапкой через PINB


А МК какой у тебя ?

Я то про мегу16 и типа того говорю.

А вот тини и новые меги меняют бит порта при записи "1" в бит в PIN.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Сообщение Myp » 07 мар 2007, 11:00

тинька =)
а я и не знал
неужели это в даташите описано?:lol:

только я непоняла,
вот такой код
Код: Выделить всё
PINB.1 = 1;
PORTB.1 = 1;
delay_ms(50);
PINB.1 = 0;
PORTB.1 = 0;
delay_ms(50);

вовсе не означает что лапки будут синхронно дёргатся
одна будет ровно в 2 раза чаще другой менять состояние
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Сообщение avr123.nm.ru » 07 мар 2007, 12:39

Myp писал(а):тинька =)

а я и не знал
неужели это в даташите описано?:lol:


на странице  avr123.nm.ru/02.htm - на желтом фоне - перечислены некоторые модели у которых ДА и у которых НЕТ !  

Вот такая петрушка.

Просто у меня поясняется что рассматриваем
конкретно порты ATmega16.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Пред.След.

Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 13