Herkese iyi günler arkadaşlar soru mikroişlemciler dersinin vize ve finalde çıktı ama bir türlü verilen şekli çizdiremedim.Cevabı bile arkadşlar yardımcı olurlasa çok sevinirim.Özellikle PIC C kodu olursa çok iyi olur.Şimdiden teşekkürler
SORU:
PIC 16F877 veya 16F628 mikrodenetleyicisinin timer0 zamanlayıcısı ve interrupt özelliğini kullanarak 100us'lik zamanlayıcı kodunu yazınız. Bu zamanlayıcıyı kullanarak aşağıdaki dalga şeklini D2 ledinde gösterecek C kodunu yazınız. İşlemci frekansının 10MHz olduğu varsayılacaktır. Delay fonksiyonları kullanılmayacaktır.
(http://u1306.hizliresim.com/1b/b/nzh24.jpg)
Sen yazdığını koy bakalım hata nerede...
şimdi de bu moda oldu galiba sınav sorusu yazıp yardım isteme ???
Ufak bir araştırmayla serdar çiçek beyin ccs c kitabını bulabilirsin. Burada timer0 birimi nasıl kurulur 10mhz ile 100us nasıl elde edilir (yada en fazla ne kadar) hepsi anlatılıyor.
Daha sonra yapacağın belli, en düşük 50us lik kara dalga var. Yani bir değişken belirle bu değişkeni 50us de 1 arttır ve değişkenin değerini kontrol et, grafikdeki yükselen kenar değerlerine geldiğinde gerekli pini 1 yap, düşüne kenarda 0 bu kadar
Hazır kod istersen ki ödev için hele, burada sana kimse yardımcı olmak istemez. Sen birşeyler yap önce problem varsa olmadıysa takıldıysan herkes severek yardım eder.
;D Final haftası ya hocam ondandır.
Alıntı yapılan: f15eagle - 10 Haziran 2013, 12:58:43
şimdi de bu moda oldu galiba sınav sorusu yazıp yardım isteme ???
Ufak bir araştırmayla serdar çiçek beyin ccs c kitabını bulabilirsin. Burada timer0 birimi nasıl kurulur 10mhz ile 100us nasıl elde edilir (yada en fazla ne kadar) hepsi anlatılıyor.
Daha sonra yapacağın belli, en düşük 50us lik kara dalga var. Yani bir değişken belirle bu değişkeni 50us de 1 arttır ve değişkenin değerini kontrol et, grafikdeki yükselen kenar değerlerine geldiğinde gerekli pini 1 yap, düşüne kenarda 0 bu kadar
Hazır kod istersen ki ödev için hele, burada sana kimse yardımcı olmak istemez. Sen birşeyler yap önce problem varsa olmadıysa takıldıysan herkes severek yardım eder.
hocam uğratım ama olmadı dediğiniz kitap bende var grafikten bişey anlamadım sınavda da bişeyler karalamıştım ama hiç puan almamışım aynı hoca soruyu tekrar soracağını söyleyince bende bu konuyu açtım herhangi bir art niyetim yoktu
Selam,
Art niyetiniz zaten yoktur estafurullah. Ancak forumumuz kurallarında yazılı olmasa dahi, hazır isteklere pek cevap verilmek istenmez. Sizin gibi öğrenci kardeşlerimizin öğrenerek mezun olması istenir. O yüzden forumdaki arkadaşlarımız hazır kod paylaşmayabilir. Siz bir noktaya kadar getirip de takıldığınız yer olursa onu sorun en iyisi. İyi çalışmalar.
Analyzer
Belki böyle sorulara kod değil de algoritma yazılarak yardımcı olunabilir, şahsen ben bazen algoritma kurmakta zorlanıyorum. Koda dokmek zor değil kurduktan sonra
Kalıp olarak yazalım herkes kendine göre düzenlesin olmaz mı?
//......
//config ayarları...
//genel değişkenler
unsigned char z = 0;
void init()
{
//TimerX 10uS ye ayarlanacak şekilde ayarlanır.
// örnek olarak 10uS (10'nun katlarına kolay ulaşabilmek için.)
//Giriş çıkış ayarları yapılır.
//Genel ve diğer kesme birimleri açılır...
}
void main()
{
init();
//0-200 high, 200-300 low, 300-350 high, 350-400 low, 400-500 high
//0, 20, 30, 35, 40, 50
while(1)
{
// eger z = 0 ise led = 1;
// eger z >= 20 ise led = 0;
// eger z >= 30 ise led = 1;
// eger z >= 35 ise led = 0;
// eger z >= 40 ise led = 1;
// eger z >= 50 ise z = 0;
}
}
interrupt()
{
//interruptta girince genel bir değişken bir artırılır,
z++;
//kesme değişkenleri temizlenir.
}
Alıntı yapılan: mehmet - 11 Haziran 2013, 22:42:37
............................................
// eger z >= 50 ise z = 0;
............................................
Satırını
............................................
//eger z >= 50 ise { z = 0; led = 0;}
............................................
şeklinde düzeltmemiz gerekmekte....
Ben olsam pwm kütüphanemi yazarım mis gibi.Osilatörüme üretilecek frekansı belirlerim sonra da sadece pwmimi yazarım olur biter..
void Pwmhazir(unsigned int osilatör , unsigned int pwmfrekansım);
void StartPwm(unsigned int kanal, unsigned int deger);
örneğin pwmhazir
fonksyonu için unsigned int PR2_PRE_1 = ( FOSC / (pwmFreq * 4 * 1) ) - 1;
değeriyle de hesaplarım oldu bitti gitti.
Alıntı yapılan: haxan_35 - 11 Haziran 2013, 15:48:24
...grafikten bişey anlamadım sınavda da bişeyler karalamıştım ama hiç puan almamışım...
Evet grafik çok karışık, anlaşılması baya zor bu sene,
Bir sonraki sene çok rahat anlayacak seviyeye gelirsiniz.
Bence bu sene dersi bırakın, seneye anlaya anlaya geçin.
Benim niyetim de tamamen halis...
Alıntı yapılan: Allegro - 13 Haziran 2013, 14:40:46
Evet grafik çok karışık, anlaşılması baya zor bu sene,
Bir sonraki sene çok rahat anlayacak seviyeye gelirsiniz.
Bence bu sene dersi bırakın, seneye anlaya anlaya geçin.
Benim niyetim de tamamen halis...
kesinlikle sayın Allegro'ya katılıyorum. Yüksek okuldayken mikroişlemciler dersini 6502 ile aldım, anlamadım onlarca komut dört farklı adresleme modu vs vs. Kaldım, hayatımda bir dersten kalacağıma sevineceğimi düşünemezdim. Ertesi sene pic 16f84 assembler ile anlatıldı. Yüksekokuldaki tek 100 puanımı bu dersten aldım. :)
Evet hayat çok garip hiç anlamadığım ders idi mikroişlemciler.Hatta bana ne gereği olacak dediğim derste şimdi mikroişlemci üzerine kurulan forum sitelerine günlük takılmaya başladım. :D
Alıntı yapılan: Fkarizmatik - 13 Haziran 2013, 13:47:32
Ben olsam pwm kütüphanemi yazarım mis gibi.Osilatörüme üretilecek frekansı belirlerim sonra da sadece pwmimi yazarım olur biter..
void Pwmhazir(unsigned int osilatör , unsigned int pwmfrekansım);
void StartPwm(unsigned int kanal, unsigned int deger);
örneğin pwmhazir
fonksyonu için unsigned int PR2_PRE_1 = ( FOSC / (pwmFreq * 4 * 1) ) - 1;
değeriyle de hesaplarım oldu bitti gitti.
burada pwmlik bir durum yok bence, sınav sorusu olmasa timer+interrupt ta gerekmez, basit çıkışı set et reset et ve delay komutları ile biter iş, ama sınav sorusu olduğu için timer vs. istemişler
Alıntı yapılan: CaFFeiNe - 13 Haziran 2013, 15:31:49
burada pwmlik bir durum yok bence, sınav sorusu olmasa timer+interrupt ta gerekmez, basit çıkışı set et reset et ve delay komutları ile biter iş, ama sınav sorusu olduğu için timer vs. istemişler
neden ? Pwm sinyalini oluşturup duty cycle değiştirerek istenilen sinyaller sorunsuz çıkartılabilir.Dediğiniz doğru fakat amaç ezbere dayalı sistem değil de kişinin kendisini geliştirerek olaylara farklı bakış açısıyla , ufkunu açmaya çalışıyorum.
Alıntı yapılan: Allegro - 13 Haziran 2013, 14:40:46
Evet grafik çok karışık, anlaşılması baya zor bu sene,
Bir sonraki sene çok rahat anlayacak seviyeye gelirsiniz.
Bence bu sene dersi bırakın, seneye anlaya anlaya geçin.
Benim niyetim de tamamen halis...
hocam madem bana güzel bir pdf word her neyse bu konuyla ilgili güzel bir kaynak ver çalışıyım öğreneyim cevabınıda bu konun altına yazıyım grafiğide açıklayayım.
Hem sınava çalışmış olurum hemde kalıcı olarak öğrenirim inş...
Alıntı yapılan: Fkarizmatik - 13 Haziran 2013, 16:12:03
neden ? Pwm sinyalini oluşturup duty cycle değiştirerek istenilen sinyaller sorunsuz çıkartılabilir.Dediğiniz doğru fakat amaç ezbere dayalı sistem değil de kişinin kendisini geliştirerek olaylara farklı bakış açısıyla , ufkunu açmaya çalışıyorum.
pwm ile duty değiştirilerek sinyaller çıkartılabilirde, benim sorudan anladığım bir defaya mahsus (yada aynı dalga şekli tekrar edecek şekilde) sinyali çıkartmak, işte bu durumda pwm ile olacağını zannetmiyorum
Alıntı yapılan: haxan_35 - 13 Haziran 2013, 21:31:33
hocam madem bana güzel bir pdf word her neyse bu konuyla ilgili güzel bir kaynak ver, çalışıyım öğreneyim cevabınıda bu konun altına yazıyım grafiğide açıklayayım. hem sınava çalışmış olurum hemde kalıcı olarak öğrenirim inş...
Hangi programlama dilini öğreniyordunuz ?
Alıntı yapılan: haxan_35 - 10 Haziran 2013, 11:11:19
Herkese iyi günler arkadaşlar soru mikroişlemciler dersinin vize ve finalde çıktı ama bir türlü verilen şekli çizdiremedim.Cevabı bile arkadşlar yardımcı olurlasa çok sevinirim.Özellikle PIC C kodu olursa çok iyi olur.Şimdiden teşekkürler
SORU:
PIC 16F877 veya 16F628 mikrodenetleyicisinin timer0 zamanlayıcısı ve interrupt özelliğini kullanarak 100us'lik zamanlayıcı kodunu yazınız. Bu zamanlayıcıyı kullanarak aşağıdaki dalga şeklini D2 ledinde gösterecek C kodunu yazınız. İşlemci frekansının 10MHz olduğu varsayılacaktır. Delay fonksiyonları kullanılmayacaktır.
(http://u1306.hizliresim.com/1b/b/nzh24.jpg)
Alıntı yapılan: Allegro - 14 Haziran 2013, 13:26:49
Hangi programlama dilini öğreniyordunuz ?
C dilini öğreniyoruz hocam assembly de olabilir.Elimde ccs c kitabı mevcut
int a[5]={3,2,1,1,2};
int c[5]={3,2,1,1,2};
int b=0;
#int_TIMER0
void TIMER0_isr(void)
{
a[b]--;
if(a[b]==0)
{
a[b]=c[b];
output_toggle(pin_b2);
if((++b)>4)
{
b=0;
}
}
}
3-2-1-1-2-3-2-1-1-2-3 diye gidiyor galiba eğer yanlışanlamadıysam. 3*50 -2*50-1*50-1-50-2*50-3*50 gibi