şimdi arkadaşlar pic kullanan bazı devreler yaptım. birde pic kullanarak tasarladığım bir pi dedektör projem var. ama halledemediğim bir yazılım sorunum var. şimdi örnek olarak .:: arkadaşlar pic aldığı sinyali digtal olarak çevirip bazı matematiksel işlemlerden sonra 1 ile 12 arasında bir sayı elde etmiş olsun.
eğer değer 1 ise ekrana > yaz. 2 ise >> yaz. 10 ise ekrana >>>>>>>>>> yaz dediğimizde hem daha çok komutyazmak gerekiyor.hemde zamanlama uzuyor
ben ise değer ne ise o kadar > işareti yaz gibi kısa bir yol var mı diye merak ediyorum.
örneğin elde edilen değer kaç ise o kadar > yaz . şeklinde bir komut örneği verebilirmisiniz.
Böyle bir komut yok bu bir tür algoritmadır. Ben akış diyagramını vereyim:
1) ADC oku ve A değişkenine kaydet.
2) ADC 0' mı? Hayır; 3'den devam et. Evet; Geri dön
3) Ekrana > yaz ve A değişkeninden 1 çıkar. 2'ye geri dön.
evet uykusuz ustam haklısınız. komut ifadesi yanlış olmuş. benim istediğimde algoritmaydı zaten. verdiğiniz algoritmayı (3. aşama ) tam anlayamadım. eğer mümkünse üstad 3. aşamayı pic basic kodlarıyla örneklemen mümkünmü.
ben şöyle bir örnekleme yapayım:(hataları düzeltelim)
picimizde adc işlemi yapılıp bir değer eldeedilmiş olsun bu değer A değişkeninde kayıtllı olsun
2- if A=0 then goto başadön
if A>0 then lcd "A sıfırdan büyükse lcd etiketine yani 3. adıma geçiyoruz
3- lcd out, ">"
A=A-1
goto 2 "2 ye geri döndük
burada şöyle bir durum ortaya çıkıyor sanki. ekranda sürekli > görürüz gibi geliyor. ekranda her seferinde sanki bir satır kaydırma yapmamız gerekiyor gibi geldi bana.
LCD lerde imlec normalde her karakter yazımıdan sonra bir sonraki hücreye geçer.
Ben basic kullanmadığım için size kod yazamam malesef. Oldu da basicin yapısından kaynaklanan bir durumdan dolayı imlec ilerlemezse de bunun da kolayı var. İkinci bir değişken dahatanımlarsınız ve her > yazışınızda bunun içindeki sayıyı bir arttırırsınız ve yazmadan önce bu değişkeni hücre adresi olarak LCD modülünüze gönderirsiniz. Böylece imlecin ilerlemesini sğlamış olursunuz fakat büyük ihtimalle buna ihtiyacınız olmayacak. Saygılar.
uykusuz üstadım çok teşekkürler asm de imleç kaydığına göre bu rutini asm de yazarsam sorun halloldu demektir. pic basicte asm kullanılabiliyor zaten. yardımların için sonsuz teşekkürler. biraz asm örnek incelersem her halde çözerim . elimde bolca var zaten.
Rica ederim önemli değil. Asm konusunda yardımcı olabilirim. Size örnek bir program mantığını anlamanız için, Örneğin ADC den 5 okudum.
movf ADC,w
movwf sayac ; adc den okunan değeri sayaca yükle (5)
don ; etiket
decfsz sayac,f ;sayacdan bir cıkar sonuc 0 mı?
goto yaz ; hayır. o halde lcd ye karakteri yaz.
goto anaprogram;
yaz
movlw '>'
call lcdyegonder
goto don
burada ekrana arka arkaya sıralanmış > karakteri görmelisiniz. Fakat ekranda 6 dan fazla > işareti yeriniz olabilir. Bu durumda program içinde adc eğer 6 dan fazla ise iş yazdırdığınız > işaretlerini de saymalısınız ki lcd ekranınızda kaymalar oluşmasın. Ayrıca diyelim ilk başta 5 okudunuz. ekrana 5 tane > yazdınız. sonra da adc den 3 geldi. bu kez 3 tane > yazdınız. fakat öndecen yazmış olduğunuz ikitane > ekranda kaldı. Bu da eğer ekranınızda en fazla 6 ">" yeriniz varsa ekrana adc değeri kadar >, 6-ADC kadar da boş karakter göndermeniz gerektiği anlamına geliyor. Saygılar.
sonsuz teşekkürler ustam. iyiki varsınız.
feridun sana kısaca şunu söyleyim;
anolog değeri (1-12 arasındaki sayıları) sayı değişkenine koyduğunu düşünelim.birde sayac değişkenin olsun
for sayac= 0 to sayı
lcdout $fe,1+sayac,">"
next
..........
böyle yazarsan sayı değişkeninin içindeki değer kadar ekrana > yazarsın. ama ekran yenileme hızı yavaş olursa ekan gidip gidip geliyomuş gibi olur.
başarılar.