pic basic proda dizi değişkeni

Başlatan vatandas30, 08 Ocak 2011, 21:04:00

vatandas30

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.

zakbay

#1
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

Tek dostum çalışmak...

Ruzgarbey

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
Hayatta En Hakiki Mürşid İlimdir. M.K. ATATÜRK

omereliusuk

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.

vatandas30

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.

devkartal


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

ferit06

#6
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 )

devkartal

Ü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





Maxim


ete

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
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

OG

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ı?
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

ete

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
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

OG

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. 
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

ete

Okumayı biraz daha aralıklı yapıp dene istersen. Çok sık okuma kesinlikle mahsurlu bundan eminim.
Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

OG

Evet hocam yavaşlatınca düzeldi. İyi tecrübe.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.