Picproje Elektronik Sitesi

DERLEYİCİLER => PICBasic => Konuyu başlatan: vatandas30 - 08 Ocak 2011, 21:04:00

Başlık: pic basic proda dizi değişkeni
Gönderen: vatandas30 - 08 Ocak 2011, 21:04:00
arkadaşlar.örneğin aşağıdaki tanımlamayı yaptım.

dene var byte[3]

program içinde byte[1] in bitlerine tek tek ulaşmak istiyorum. mesela byte[1].0=0 dediğim zaman derlenmiyor. byte.0[1] dediğim zaman derlemede hata olmuyor ama 0. bite ulaşmış da olmuyorum.
yardımlarınızı bekliyorum.
Başlık: Ynt: pic basic proda dizi değişkeni
Gönderen: zakbay - 08 Ocak 2011, 21:44:22
Aşağıdaki örnek işini görecektir


For Sony_Lp=0 To 11 ' Do 12-bits
PulsIn IR_Sense,0,ID ' Receive the IR bit pulse
If ID>=100 Then
   IR_Word.0[Sony_Lp]=1 ' If it's greater than 100 then we have received a 1
Else
   IR_Word.0[Sony_Lp]=0 ' If it's less than 100 we have received a 0
EndIf
Next ' Close the loop



Edit
Akşam yanlış hatırlamışım yukarıdaki örnek döngü içinde bir değişkenin bitlerini değiştirmek için kullanılmaktadır.

bitlere tek tek ulaşmak için önce geçici bir değişkene almanız gerekir.


BitKontrol var bit

dene var byte[3]

gecici = dene[1]
gecici.0  = 1

bitkontrol = gecici.2


gibi

denemedim ama aşağıdaki gibide olabilir.

bitkontrol = dene[1]

bit olarak tanımlanmış bitkontrole dene[1] in 0. bitinin atanması gerekir

bitkontrol = dene[1]  >> x 
x değişkenine kaç bit kaydırmak istiyorsanız o değeri girmelisiniz

mesela 2. biti almak istiyorsanız
bitkontrol  = dene[1] >> 1

Başlık: Ynt: pic basic proda dizi değişkeni
Gönderen: Ruzgarbey - 09 Ocak 2011, 15:15:45
pbp de dizi değişkenlerdeki bit kontrolünde bende bayağı sıkıntı yaşamıştım.zakbay üstadında dediği gibi çözümü geçici değişkene atayarak buldum fakat bu geçici değişkeni byte olarak tanımlamakta fayda var. zira bit olarak tanımlarsak pic bir süre sonra sapıtıyor :) denemeyle edindiğim bir tecrübe.kolay gelsin
Başlık: Ynt: pic basic proda dizi değişkeni
Gönderen: omereliusuk - 09 Ocak 2011, 15:22:07
Dim  KS0  As  KRSONUC.0   
Dim  KS1  As  KRSONUC.1   
Dim  KS2  As  KRSONUC.2   
Dim  KS3  As  KRSONUC.3   
Dim  KS4  As  KRSONUC.4   
Dim  KS5  As  KRSONUC.5   
Dim  KS6  As  KRSONUC.6   
Dim  KS7  As  KRSONUC.7   
gibi
KRSONUC BYTE TİPİ değişken.
Başlık: Ynt: pic basic proda dizi değişkeni
Gönderen: vatandas30 - 09 Ocak 2011, 23:17:34
sorunu çözdüm.
dene.0[0] : 0.bit
dene.0[1] : 1.bit
dene.0[2] : 2.bit
     "             "
dene.0[15] : 15.bit yani dene[2] nin son biti

yazılış bu şekilde olacak. yani hepsinde dene.0[bit sayısı]
yabancı bir siteden buldum. denedim oldu.
yardımlarınız için tşk.
Başlık: Ynt: pic basic proda dizi değişkeni
Gönderen: devkartal - 26 Ekim 2017, 15:39:12

arkadaşlar aşağıdaki komutları nasıl yorumlanır ? yada buradan ne anlamamız gerekir
bu komutlar bir saat devresi için yazılmış


pic basic proton ile yazılmış komutlar


Kodları okumak için ne tür çalışma yapmak gerekir  bu konularda yardımınızı bekliyorum


saygılarımala

DIM SECOND AS BYTE
DIM SECOND2 AS BYTE
DIM SN10 AS BYTE
DIM SN1 AS BYTE
Başlık: Ynt: pic basic proda dizi değişkeni
Gönderen: ferit06 - 26 Ekim 2017, 15:50:27
vermiş olduğunuz komutlar değişkenlerin tip ve boyutunu belirleyen komutlar.

Proton compilerin
Help>Documents>Proton Compiler Manual' ini inceleyin tüm komutlar hakkında bilgi bulacaksınız.

(Proton ile ilgili mesajlarınızı Proton bölümüne yazın   https://www.picproje.org/index.php/board,40.0.html )
Başlık: Ynt: pic basic proda dizi değişkeni
Gönderen: devkartal - 27 Ekim 2017, 11:53:03
Üstad ilginize teşekkür ederim,
Esas problem şu ; Ben kodu nasıl tasarlayacağım ? ve nasıl yazacağım ? Örnek verirsem bahsi geçen kodlar pic16f628 ile saat kodlarıdan bir kısmı idi ben bu kodları anlamaya çalışırken bu kodları yazan kişi nasıl bu düşünüp yazmış bu kodu yazma işine nasıl başlamış ? ben bunu anlamaya çalışıyorum ama malesef  pek fazla ilerleme sağlayamadım .Bir proje düşünelim yada aynı saat projesini ben nasıl tasarlacağım ve kodları nasıl  yazacağım bunu nasıl yaparım konunun neresinden başlamak gerek uzun bir süre ara vermiştim bu işe tekrar ilgilenmek için bir çok şeyi tekrar araştırdım fakat bu kod meselesi anlamadım

bir çok arkadaşta öncelikle  örnek programları incele diyor fakat tamamda  bir çok programda kodun yanında açıklama yok Sadece basit projelerde var onu zaten herkes biliyor   bu nedenle bu işin  esas başlama noktası neresi her şey var fakat kod ve kodlama tekniği yok
var dediğim kısım elektronik teknisyenliği yapmış biriyim  tarzanca ingilizce anlar yazarım pic entegrelerini az çok tanırım devre yapmışlığım var vs

bu konuda  yardımcı olmanızı istiyorum
teşekkurler




Başlık: Ynt: pic basic proda dizi değişkeni
Gönderen: Maxim - 27 Ekim 2017, 12:03:55
buradan başlayacaksınız
http://etepic.com/index.php/board,7.0.html
Başlık: Ynt: pic basic proda dizi değişkeni
Gönderen: ete - 27 Ekim 2017, 12:47:00
Maxim, benim Basic derslerini başlangıç olarak önermiş ama Basic dilini kullanma bilgi ve becerini bilmediği için bunu yapmış diye düşünüyorum.
Genelde program yazacak kişi yazabilecek beceri ve bilgiye sahip ise bu soruyu sormaz. Sorabileceği şeyler elbette vardır ama programda bir işin nasıl halledileceği şeklinde daha spesifik sorular olur.
Her neyse ben programı yazabilecek kadar bilgin olduğunu ve yanızca yol göstermeye ihitiyacın olduğunu varsayıyorum.
Pek çok saat programı yazdım. Bu nedenle yardımcı olmaya çalışayım.
Öncelikle yapılması düşünülen saat sisteminin bir şemasını oluşturmak gerekiyor.
Şema da, bütün ekipmanlar yada komponentler yer almalı. Tabiiki öncelikle oluşturulan saatin dışarı gösterilmesine karar verilmeli.
BUnun için LCD - 7 segment display ve matrix display şeklinde 3 ayrı seçenek mevcut.
Her bir seçeneğin sürülme yada çalıştırılması farklı olduğu için programda ona göre yazılmalıdır.

Şema oluşturulurken saat bilgisinin nasıl sağlanacağınada karar verilmeli. Eimizde iki alternatif var.
Birincisi işlemcinin zamanlayıcılarından birini kullanarak 1 sn lik saat pulsleri elde edilebileceği gibi ikinci alternatif olarak RTC denilen (Real Time Clock) hazır saat entegrelerinden biri kullanılabilir. Tercihimiz RTC kullanılması yönünde olmalıdır. Zira gerçek zaman saatini bu RTC sayar ve sizde bu bilgileri SN-Dak-Saat-gün-Ay-Yıl olarak bu RTC den alıp kullanırsınız.
Bu konuda tavsiyemiz DS1307 veya dahada iyisi DS3132 kullanılması yönündedir. Her ikiside aynı kodlarla çalıştırılabilmektedir.
Bu açıklamalara uygun şema oluturulduktan sonra geriye programı yazmak kalıyor.
Yazmaya başlamadan önce bir algoritma oluşturmak gerekiyor. Bunu öncelikle bir adım senaryosu yazarak yapmak lazım. Nedir adım senaryosu? programın lafla çalıştırılması diyebiliriz. Aşağıda Adım senaryosunu örnek olması amacı ile ben yazıyorum.
1. Sistemin açılması registerlerin tanımlanması. Bu aşamada işlemci registerlerinin tanımlanması yapılır. Donanımsal özellikler işlemciye tanıtılır. Hangi pinler giriş hangileri çıkış olacak belirlenir.
2. Programda kullanılacak olan değişkenler tanımlanır. Örneğin SN, DAK, SAAT, HAFGUN, GUN, AY, YIL ve diğer yardımcı olacak değişkenler tanımanır
3. Açılış gecikmesi verilerek registerlerin işlemci içinde ayarlanması sağlanır.
4. Program BASLA satırı ile çalışmaya başlar.
5. Önce RTC okunur.
- Okunan bilgi 00:00:00 şeklinde ise henüz saat ayarı yapılmamış demektir. Programı Ayar menüsüne yönleririrz.
- Okunan bilgi mantıklı bir saat bilgisi ise bu bilgi ekrana verilir.
- Ayar tusuna basılmış ise program saat ayarına Gider.
- Normalde yukarıdaki işlemlerin 1000 ms lik bir peryod içinde tamamlanmış olması gerekir. Böylece yeni saat akomusayı yapmak üzere program yeniden BASLA satırına yönlendirilmelidir. Mantıklı düşünürsek bu işlemler ancak 3-40  ms lik bir sürede tamamlanır. Çok sıklıkla saat okuması yapmamak için sistem 1000 ms lik peryodu diğer işlerle uğraşarak geçirmelidir. Yada en azından 500 ms lik bir peryot içinde bu işlemler tamamlanıp yeniden saat okuması yapmak üzere BASLA satırına yönlendirilmelidir program. Unutmayın RTC de saniye değişimi her 1000 ms (yani 1 sn) de bir olacaktır. Sürekli okumaya çalışmak RTC ninde işini düzgün yapmamasına sebep olabilir. Onada zaman tanımak en doğrusudur.
Buraya kadar programın ana çalışma kısmı hazırlanmış oldu. Şimdi alt programlara bakmak gerekiyor.
Alt program olarak bize lazım olanlar şunlar olacaktır.
1. Saat Ayar Menüsü,  bu menü 3 butonla çalışacaktır. SEC - ARTIR- AZALT butonları. Bunların kullanılalrak seçilen ekran tipine uygun gösterme işlemi ile birlikte ayar bu kısımda yaılmalı ve sonunda SEC butonu ile ayarlanan saat RTC ye yazılarak program BASLA etiketine döndürülmelidir.
2. Saat Okuma Alt programı , burada RTC den saat bilgisi okunur okunan bilgilerin format düzenlemeleri yapılır . Format düzenlemesi derken hemen hemen bütün RTC lerde saat bilgileri binary kodlanmış desimal şeklindedir. Örnek vereyim SN bilgisi için 8 bitlik Saniye değerinin ilk 4 biti saniye birler basamağını , son 4 bit ise 10 lar basamağını verir. Yani sN=47 ise siz bunu şöyle okursunuz %0100 0111, bu sayının tam karşılığı aslında 67 dir. Ama saniye bilgisi olarak 47 şeklinde çevrilir.   Burada tavsiyem RTC den okunan bilgiler ile ekranda saat bilgisi olarak kullanılan değerlerin farklı değişkenlerde tutulmasıdır. Aksi taktirde biryerlerde karışıklık meydana gelebilir.
Saat okuma alt programında okunan SN değeri ile mevcut SN değeri aynı ise geri dönmek gerekir. Başka işe gerek yok çünki henüz sn değişmemiş gözüküyor.
3. Saat Yazma alt programı: Ayarlanan saat değerlerinin yazma formatına çevrilip RTC ye burada yazılması gerekir.
4. Program LCD ekran ile çalışıyor ise ekrana gösterme işini burada alt programla yapak en doğrusudur.  Yoksa matrix yada 7 segment display ile sürülüyor ise uygun olanı kesme kullanarak bilgilerin ekrana verilmesidir. Buna uygun olarak programda kesme yaratılmalıdır.
Sonunda bu adım senaryosuna uygun olarak program yazılır. Artık adımlar belli olduğuna göre işin başından başlanıp teker teker amaca uygun program yazılır. Yazma aşamasında değişken istekleri kendiliğinden oluşur zaten. Her ilave değişken tanımlama kısmında tanımlanıp geçilir.
Sonuçta program biter ve öncelikle simulasyonda denenir sorunlar var ise giderilir. Aksayan noktalar tespit edilmeye çalışılır ve bunlarda çözülerek sistem çalışır hale getirilir.

Hepsi bu kadar.
ete
Başlık: Ynt: pic basic proda dizi değişkeni
Gönderen: OG - 27 Ekim 2017, 12:58:58
Alıntı yapılan: ete - 27 Ekim 2017, 12:47:00
Sürekli okumaya çalışmak RTC ninde işini düzgün yapmamasına sebep olabilir. Onada zaman tanımak en doğrusudur.
Bu durumda (sürekli okumak) çıkan sıkıntılar hakkında bilgisi olan var mı?
Başlık: Ynt: pic basic proda dizi değişkeni
Gönderen: ete - 27 Ekim 2017, 13:31:46
Kendi devrelerimde belirli zaman dilimlerinde okuma yaptırırım. Bu nedenle gerçek devrede bir sorun yakalama şansım yok. Ancak isis de farklı saat programlarını çalıştırdığımda ekranda bir müddet sonra RTC nin kendi saat göstergesinde755:745:xxx gibi abuk subuk değerler oluşuyor, Bunu çok gördüm.  Başlangıçta model dosyasını kusurudur diye düşünüyordum. Ama bir kaç programı inceleyince gördümki sürekli RTC okuması yapılıyor.  Bazılarına iki okuma arasına zaman koydum ve sorunun ortadan kalktığını gözlemledim. Sorun büyük ihtimal ile RTC nin kendi registerlerini yenilemeye zaman bırakmadan onu sürekli meşgul etmekten kaynalanıyor diye düşünüyorum.

Ete
Başlık: Ynt: pic basic proda dizi değişkeni
Gönderen: OG - 27 Ekim 2017, 14:39:55
Her zaman kullandığım kod şu an problem çıkardı.
Şu ankinin eskisinden farkı, RTC yi çok sık okuyorum, yukarıdaki notu görünce ondan olabilirmi diye düşündüm. 
Başlık: Ynt: pic basic proda dizi değişkeni
Gönderen: ete - 27 Ekim 2017, 14:52:46
Okumayı biraz daha aralıklı yapıp dene istersen. Çok sık okuma kesinlikle mahsurlu bundan eminim.
Ete
Başlık: Ynt: pic basic proda dizi değişkeni
Gönderen: OG - 27 Ekim 2017, 17:21:01
Evet hocam yavaşlatınca düzeldi. İyi tecrübe.
Başlık: Ynt: pic basic proda dizi değişkeni
Gönderen: devkartal - 29 Ekim 2017, 14:38:10
Sayın Ete;
Cevabınız için teşekkür ederim, bana çok fadası oldu bilginizden faydalanmak  güzel bir durum


Bu yazınızda bazı teknik detaylar var(ayrıntılara girmeden  benden istediğiniz eksik bilgileri tamamlamak istedim daha sonra bu konuda da yazı yazarım)  bunları net anlamak için sizden  konu hakkında bilgi almak istiyorum
Saat projesini :  aslında bu saat devresi uygulamasının   kaynak kodu ile elimde mevcut bazı ufak tefek sorunları var fakat onu da olmazsa gerekirse kaynak kodu ile  paylaşırım.  Ben devreyi pertinaks üzerinde yaptım çalışıyor fakat enerji kesildiğinde saat sıfırlanıyor 3.6.v şarj edilebilir bataraya'yı şarj ettirememiştik bu sorunu mevcut başka bir şeyi yok bu sorun halen var .Meselede buradan başladı nasıl bu kodları anlarım da sorunu çözerim fakat yetersiz bilgi yüzünden her şey yarım kaldı ve başa döndüm.


Bir sorunda bu saat devresini proteus da çalıştırırken  gerçek saat bilgisini masa üstü bilgisayarımdan alma durumunu başarmıştım fakat  bunu nasıl yaptık nasıl olsuğunu şuan hiç bilmiyorum proteus için bir kod mu yazıldı yok sa bir ayar meselesi mi? hiç bilmiyorum herhangi bir araştırmada yapmadım konu çok dağılıyor ama bu eksikliği de bildirmek istedim


Saat Projesi ilgili detaylar ve kompanentler
pic16f628 x1
2 satırlı LCD ekran x1 (16x2)
DS 1302 RTC x1


3 adet buton SEC,KAYDIR,ARTTIR için ( aslında ayarlamanın sonunda SET et içinde bir buton koymak lağzım )


24 saati gösterecek: saat ,dakika, saniye, gün, gün adı,  ay ,yıl


Bir de şarjlı batarya kısmı var enerji kesildiğinde saat bilgileri sıfırlanmasın diye (Olmaz sa  3 V saat pili koyarak çözmeye çalışacağım)


Sıcaklık kısmıda var bunda  bir sıkıntı olmadığı için ayrı olarak yazdım DS 1620 kullandık
Daha sonra eklemek istediğim kısım ise alarm sesli melodi  uygulaması  bu henüz fikir aşamasında


bilgilerinize
Başlık: Ynt: pic basic proda dizi değişkeni
Gönderen: ete - 29 Ekim 2017, 16:59:29
Hemen hemen bütün RTC lerin batarya pini vardır. Genelde 3 V luk lityum pil ile beslenir. İşin genel prensibi şudur. Sistem şebeke voltajı 3,5-5V aralığında olmalı. Pil 3V luk olmalı. Bu şekilde yaparsanız RTC daima hangi voltaj daha yüksek ise otomatik onu kullanır. Kullandığı kesilirse otomatik pile geçer. RTC Data sheet ini iyi okumalı ve hangisi batarya pini hangisi şebeke besleme pini karıştırılmamalıdır. Bu şekilde yapılırsa saat bilgisi kesinlikle kaybolmaz.
ayrıca RTC için şarjlı pil kullanmayada gerek yoktur. CR3232 pil yaklaşık 10 yıl idare eder. Değermi şarjlı pil kullanmaya?. Şarlı pil belkide o kadar dayanmaz. Bir müddet sonra bozulur. Pek çok kişi orada süperkapasitör de kullanmaktadır. Düşünün artık millet oraya pil yerine kondansatör bile bağlıyor sen şarjlı pillerle uğraşmaya çalışıyorsun. Şarjlı pil işini unut bence. Direk CR3232 kullan. Şarlı pil kullanılmaz demiyorum ama madem kullanacaksın gereğinide yerine getirmelisin. Şarj seçenekleri data sheet de verilmiş. Trickle şarj diye isimlendirmişler. Bunun birde registeri var ve oradan ayarlanıyor. Harici dirençlerde kullanılması gerekiyor. Data sheet de açıklanmış.
Proteus da RTC nin özelliklerine girerseniz orada saat bilgisini PC den al yada programdan al gibi seçenekler olduğunu görebilirsiniz. Oradan yapmışsınızdır.
Unutmayın RTC lerde genelde Saniye registerinin 7 nolu biti Halt yani durdurma bitidir. Bu bit HIGH durumunda olduğu müddetççe saat çalışmaz. Saatin ayarlı olup olmadığı bu btden da anlaşılabilir. Ayar verdikten sonra bu biti sıfır yapmak gerekir. Böylece saat sürekli çalışır.

Ete
Başlık: Ynt: pic basic proda dizi değişkeni
Gönderen: devkartal - 04 Kasım 2017, 16:30:21
Yeniden Merhaba
Son yazınızı bir kaç defa okudum gayet anlaşılır açık bir dille yazmışsınız benim takıldığım bir iki yer var siz bunu benim acemiliğime verin dedikten sonra hemen yazmaya devam ediyorum .
Saat pil meselesini sizin önerdiğiniz gibi yapmaya karar verdim belki süper kondansatör kullanırım , fakat bu şarj ettirme kısmını anlamak istiyorum elimde hiç kullanılmamış 3.6V şarj edilebilir batarya var onu test etmek için şarjlı kısma biraz baktım anlamaya çalıştım ama bunun fiziki bağlanma kısmını çözebilirim gibi geliyor fakat bu bit lere nasıl nereden ve pic'in hangi ayağındaki pin basıl müdehale edilir işte burda durum flu oluyor bu konu hakkında bana bizlere konuya ilgi duyan arkadaşlara bilgi verirsen yararlı bir kaynak olur diye düşünüyorum . DS1302 RTC içinde 7. Bit ile ilgili yazmış olduğun Durumuda biraz daha anlatırsanız iyi olur . Ayrıca pic uygulamalarında 8 bit data veri kısmına nasıl değişiklikler yapılıyor .Bu konularla ilgili detaylı bilgi almak istiyoruz
Kolay gelsin