Sayın üstadlar ! ben pic programa konusunda yeniyim."pic programlama"(o.a)kitabı aldım.bayağı bir şeyler öğrendiğimi düşünüyordum.elektronikte olduğu gibi bir flip flop yapayım dedim fakat beceremedim.formlarda aradım bu kadar basit konuları hiçbir yerde bulamadım.sorum oldukça basit bir flip flop nasıl yapabilirim ve hangi değişkenleri değiştirerek frekansını değiştirebilirim.ileri aşamada farklı ses veren bir siren (ambulans sireni gibi )nasıl yapabilirim.
yardımlarının için şimdiden teşekkürler.
ben de pic işinde yeniyim ama bu konu ile ilgili bir ödevim olduğu için sana az da olsa yardım edebileceğimi sanıyorum. pic ile epromu kontrol ederek dac ve amplifikatör yardımı ile eproma kaydettiğin sesi dışarı verebilirsin ;ISD serisi entegreler kullanarak ta bu işi yapabilirsin;sana en fazla bukadar yardım edebilirim bakalım üstatların bu konuda ki önerileri ne olacak;ii çalışmalar
Pic konusunda söyleyecek fazla sözüm yok. Ancak genel ilkelerden bahsedeyim biraz. Pic'e uyarlama da sana kalsın.
1- Ses çıkarmak için önce bir dalga çıkarmak gerekli. bunu hepimiz biliyoruz. Önce basit dalgalardan başlayıp daha karmaşık dalgalara doğru adım adım ilerlemeni öneririm.
2-mikrokontrolcü ile dalga üretmenin en doğru yolu zamanlayıcı (Timer) kullanmaktır. Ancak sen yeni olduğun için harware timer ile bir süre uğraşma.
3- Önce en basit dalgayı üretmekle başlayalım. Sabit frekanslı sabit oranlı kare dalga.
çıkış = 1
bekle ( bekleme süresi )
çıkış= 0
bekle (bekleme süresi )
elimizde şimdi sabit periyot ve sabit oranlı bir kare dalgamız var. bekleme sürelerini değiştirerek değişik frekanslar elde edebiliriz. ilk bekleme ve son bekleme süresini farklı değerlere ayarlayarak da oranları değiştirebiliriz.
4- şimdi biraz daha ileriye gidelim
bekleme süresi = bekleme süresi +1
bunu da ekleyince elimizde tizden basa doğru giden bir ses oldu.
5- bir adım sonrası bekleme süresini artırmak ve azaltmak olacak
yukarıdaki kodu şöyle değiştirelim
eğer sayma yönü bayrağı 1 ise {
bekleme süresi = bekleme süresi+1
eğer bekleme süresi 1000 den büyük ise sayma yönü bayrağı=0
}
eğer sayma yönü bayrağı 0 ise {
bekleme süresi=bekleme süresi-1
eğer bekleme süresi 0 ise sayma yönü bayrağı=1
}
şimdi elimizde bastan tize ve sonrada tizden basa giden bir ses var.
6- Bunları koda çevirmek de sana kalmış.
7- Bunları bir dene , temeli bir at , daha ileri teknikler için hepimiz yardımcı oluruz.
Sayın üstadlar..değerli cevaplarınız için teşekkürler.amacım pic öğrenmek ,ışık tuttuğunuz yönde çalışmaya başladım ve yaklaşık 1Khz e (kulakmetre ile ölçtüm)yakın bir sinyal ürettim.bunu yaklaşık (20+20)adet "NOP" komutu kullanarak yaptım.biraz uzun bir program oldu ama çalıştı.nop adetlerinde azaltma çogaltma ile frekans değişiyor.
acemi işi olduğu bayağı belli.o:) gördüğüm değişik türdeki pic programlarında böyle bir uygulama yok gibi.
bekleme süresi+1 türü uygulama için daha epeyi uğraşmam gerekli anlaşılan (vakit buldukça uğraşıyorum).
nop'lardan ziyade döngülerle zaman oluşturmanın uygun olacağını düşündüğüm halde "hoca bildiğini okurmuş" misali oldu.sadeleştirmeye çalışırken gelebilecek yardımlara hayır demiyeceğim kesin.o:) selamlar
Uzun zamandır pic ASM kullanmıyorum. Jargonu unuttuğum için hata yapabilirim. ama mantık anlaşıldıktan sonra düzenlemeyi yaparsınız artık.
equ sayac 10
mainloop:
bsf 1 , porta ; sanıyorum böyle yazılıyordu port a nın 1. biti
call delay
bcf 1,porta
call delay
goto mainloop
delay :
movlw 200,sayac
delayloop:
decfsz sayac
goto delayloop
return
Bende arkadaşa biraz düzeltme yapayım... ;)
list p=16f84a
include "p16f84a.inc"
sayac equ 10
org 0x000
goto start
org 0x004
return
org 0x005
start
clrf porta
bsf status,5
movlw b'00000000'
movwf trisa
bcf status,5
mainloop
bsf porta,1
call delay
bcf porta,1
call delay
goto mainloop
delay
movlw d'200'
movwf sayac
delayloop
decfsz sayac
goto delayloop
return
end
kolay gelsin...
Selam üstadlar.
Her çalışkan öğrenci (!) gibi bende,hemen çömlekçiler kardeşimizin gönderdiği metni kopyalayım mplab'a yapıştırdım fakattt mpasmwin ayak koydu. :cry: bütün uğraşmalarıma rağmen ikna olmadı.bende daha evvel okuduğumu sandığım "pic programlama" kitabını tekrardan okurken orada
bir flip flop işi yapan program buldum.denedim mükemmel çalışıyor.benim gibi acemiler yararlansın diye buraya gönderirken.Klein kardeşimizin yazdığı "gittikçe hızlanan ve belli bir hızdan sonra geri yavaşlayan bir osilatör" yapma fikri kafama girdi.Elimdeki elmanın neresinden ısırmaya başlamalıyım diye düşünüp duruyorum.yardımcı olursanız sevinirim.şimdiden teşekkürler.
;YANIP SÖNEN LED'LER
LIST P=16F84
INCLUDE "P16F84.INC"
SAYAC1 EQU h'0C'
SAYAC2 EQU h'0D'
CLRF PORTB
BSF STATUS, 5
CLRF TRISB
BCF STATUS, 5
MOVLW h'0F'
MOVWF PORTB
TERSLE
COMF PORTB, F
CALL GECIKME
GOTO TERSLE
GECIKME
MOVLW h'FF'
MOVWF SAYAC1
DONGU1
MOVLW h'FF'
MOVWF SAYAC2
DONGU2
DECFSZ SAYAC2, F
GOTO DONGU2
DECFSZ SAYAC1, F
GOTO DONGU1
RETURN
END
Selam üstadlar..uzun uğraşmalarıma karşın yavaştan başlayarak hızlanan belirleyaceğimiz bir değerden itibaren geri yavaşlayan bir programı yazamadım. :cry:
belki picbasicpro ile daha kolay olur dediysemde oradada başarılı olamadım (sıfırdan 39 000 Hz ye çıkarmayı hedeflemiştim)(sıfırdan itibaren
yükselmesine rağmen 10 000 Hz civarına kadar çıkıyor)
yardımlarınız için şimdiden teşekkürler