Atmel Studio ile Knight Rider

poetika

Üye
Katılım
31 May 2020
Mesajlar
1
Puanları
1
Yaş
22
Merhabalar Atmel 7.0 kullanarak SimuliDE de Knight Rider yapmaya çalışıyorum ama kodu nasıl düzenleyeceğimi bilemiyorum fikrim var ama düzey olarak yeterli değil

8 adet ledim var ve sırasıyla yansın istiyorum dediğim gibi knight rider yapıyorum. kodun if kısmında ne yazmam gerektiğini bilen varsa C kodlama bilen varsa yardımcı olursa sevinirim çok teşekkürler

#include <avr/io.h>
#include <util/delay.h>

#define F_CPU 16000000UL

int main(void)
{

unsigned char liste[] ="012345ABC";
DDRB= 0xFF;


for(int i=0;i<9;i++){
PORTB=liste;
_delay_ms(3000);


}
PORTB=liste[7];
return 0;

}
Ekli dosyayı görüntüle 65220
 

cemalb

Üye
Katılım
9 Eki 2019
Mesajlar
100
Puanları
3
Ledler portb'nin tüm pinlerine mi bağlı? Birde Liste değişkenini ne için kullanıyorsunuz?

Sorunuza cevap vermekten ziyade meselenin temelini (bildiğim kadarı ile) anlatıp sonra bir tavsiyede bulunmak isterim.

Öncelikle bir PORT'un diğer pinlerine dokunmadan istediğimiz bir pinini setlemek/resetlemek için (yani lojik 1/0 yapmak için) ne yapmalıyız onu öğrenelim.

Mesela PORTB 'nin 4. pinini setlemek isteyelim;

*** PORTB |= (1<<4); şeklinde yapmamız gerekli. (1<<4) demek, 0000 0000 sayısının 4. bitini 1 yap. (0001 0000) Sonra bu değeri PORTB nin değeri ile 'VEYA' işlemine tabi tutup tekrar PORTB 'ye yaz. Böylece PORTB'nin sadece 4.pini 1 oldu. Diğer pinleri ise eski durumunu korudular.

Resetlemek için ise;

*** PORTB &= ~(1<<4); şeklinde yapmalıyız. (1<<4) demek (0001 0000) demek idi. Sonra ~ işlemi ile bu ifade terslendi ve (1110 1111) oldu. Sonra da PORTB ile 'VE' işlemine tabi tutup tekrar PORTB'ye yazdık. Böylece PORTB'nin sadece 4.pini 0 oldu. Diğer pinleri eski değerlerini korudular.

Not1: Derleyicide şöyle bir kolaylık var. <iom.h> kütüphanelerinde PORTB0, 0 olarak define edilmiş. PORTB1, 1 olarak.........PORTB7 de 7 olarak define edilmiştir. Yani (1<<4) yerine daha kolay olması için (1<<PORTB4) yazabilirsiniz. Çünkü PORTB4 arka planda 4 olarak tanımlı zaten. Bu her PORT için geçerlidir.

Not2: PORTB |= (1<<PORTB4) yerine biraz daha kolaylık için _BV() makrosunu kullanabilirsiniz.
Yani PORTB |= _BV(4);
Veya PORTB &= ~_BV(4) gibi bir kullanımda aynı anlama gelmektedir.

Şimdi sorunuzun cevabı için bu linki inceleyebilirsiniz:
http://www.lojikprob.com/avr/c-ile-...msek-ve-dugmeler-ile-yuruyen-isik-uygulamasi/

Bende bu siteden çok faydalanıyorum. Kolay gelsin.
 

Sponsor Bağlantı

Forum istatistikleri

Konular
110,942
Mesajlar
781,487
Kullanıcılar
409,193
Son üye
ramazanyl5252

Yeni konular

Üst