roboforum.ru

Технический форум по робототехнике.

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

TamTam » 25 фев 2007, 12:37

Да именно так.  :)

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 }

всё крайне прилично=)

avr123.nm.ru » 25 фев 2007, 14:33

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


что-то не бегуть !  только 2 светодиода перемигиваются и усё.
Вложения
led_no_run.rar
(5.18 КиБ) Скачиваний: 36

avr123.nm.ru » 25 фев 2007, 14:38

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


Слава богу в симуляторе все в норме.
Вложения
all_good.rar
(5.14 КиБ) Скачиваний: 44

TamTam » 25 фев 2007, 14:41

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

avr123.nm.ru » 25 фев 2007, 15:08

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


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

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


???

avr123.nm.ru » 25 фев 2007, 15:09

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

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

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

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

Компилятор CodeVisionAVR  МК  ATmega16
Вложения
led_run.rar
(5.59 КиБ) Скачиваний: 50

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
}

avr123.nm.ru » 25 фев 2007, 15:53

еще делэй задефайнить бы.

D-M » 25 фев 2007, 16:03

ну заместо делэя надо написать нужную нам задержку
и поместить это в главную функцию и инициализировать порты :lol:

TamTam » 25 фев 2007, 16:22

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


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

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


???



Я не совсем правильено понял, набо было 1 огоньком по порту бегать а я вам дал таблицу истенности в целом это вам не подойдет, а ежеле вам надо просто бег огонь так там еще проще просто делайте сдвиг.

avr123.nm.ru » 25 фев 2007, 17:38

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


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

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


я думал что бегущий огонь это и есть "просто бег огонь"   :lol:

avr123.nm.ru » 07 мар 2007, 04:28

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


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

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

А вот тини и новые меги меняют бит порта при записи "1" в бит в PIN.

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 раза чаще другой менять состояние

avr123.nm.ru » 07 мар 2007, 12:39

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

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


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

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

Просто у меня поясняется что рассматриваем
конкретно порты ATmega16.


cron
Rambler\'s Top100 Mail.ru counter