avatar_ete

SAYICI

Başlatan ete, 04 Eylül 2011, 10:34:12

ete

Bu konu Eski Forum da açılmış bir konudur. Üyelerimizden Kamil tarafından başlatılmıştır.

Ete hocam derslerinizdeki sayıcı ile uğraşıyorum .lcd de gösteren sayıların ikili karşılığını SPI olarak nasıl alabilirim .öğretebilirmisiniz saygılarımla.

'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [Nurettin GÖKAŞAN]                                *
'*  Notice  : Copyright (c) 2005 [nurimelek]                    *
'*          : All Rights Reserved                               *
'*  Date    : 14.04.2005                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
TrisA=%11110111
Trisb=000000000
'-----------------------------------------------------------------
@ DEVICE pic16F628                      'işlemci 16F628                               
@ DEVICE pic16F628, WDT_ON              'Watch Dog timer açık
@ DEVICE pic16F628, PWRT_ON             'Power on timer açık
@ DEVICE pic16F628, PROTECT_OFF         'Kod Protek kapalı
@ DEVICE pic16F628, MCLR_ON             'MCLR pini kullanılıyor.
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak
'-------------------------------------------------------------------
DEFINE LCD_DREG    PORTB        'LCD data bacakları hangi porta bağlı?
DEFINE LCD_DBIT        4        'LCD data bacakları hangi bitten başlıyor?
DEFINE LCD_RSREG    PORTB    'LCD RS Bacağı Hangi Porta bağlı ?
DEFINE LCD_RSBIT    1        'LCD RS bacağı Hangi Bite bağlı ?
DEFINE LCD_RWREG    PORTB
DEFINE LCD_RWBIT    2
DEFINE LCD_EREG    PORTB        'LCD Enable Bacağı Hangi Porta bağlı?
DEFINE LCD_EBIT        3        'LCD Enable Bacağı Hangi bite bağlı ?
DEFINE LCD_BITS        4        'LCD 4 bit mi yoksa 8 bit olarak bağlı?
DEFINE LCD_LINES    2        'LCD Kaç sıra yazabiliyor
'-------------------------------------------------------------------
CMCON=7                    '16F628 de komparatör pinleri iptal hepsi giriş çıkış
OPTION_REG.7=1             'portB deki dahili PULL-UP lar iptal edildi.
'-------------------------------------------------------------------
SYMBOL YUKARI=PORTA.0
SYMBOL ASAGI=PORTA.1
SAYI   VAR   WORD
SYMBOL DTA = PORTA.3   '------------------   
SYMBOL CLOCK = PORTB.0  '-----------------       
SYMBOL LATCH = PORTB.2  '-----------------         
DATA1 VAR WORD
DATA1 =3500
'-------------------------------------------------------------------
SAYI=0
PORTB=0
LCDOUT $FE,1
PAUSE 200
'-------------------------------------------------------------------

SHIFTOUT DTA,CLOCK,1,[DATA1]
PULSOUT LATCH,1
LCDOUT $FE,2,DATA1
BASLA:
      IF YUKARI=0 THEN SAYI=SAYI+1
      IF ASAGI=0 THEN SAYI=SAYI-1
      LCDOUT $FE,1,"    SAYI = ",#SAYI
      LCDOUT $FE,2,"    SAYI = ",DEC5 SAYI
      LCDOUT $FE,$C0, "   ETE HOCAM"
      PAUSE 100
      GOTO BASLA
   
END     

ete

SPI bir haberleşme protokolüdür. Sayıların ikili karşılıklarını  LCDOUT ,BIN8 Sayi  şeklinde ekrana yazdırabilirsin. Bir yerden alman gerekmiyor zaten elinde olan bir bilgi bu. Yalnızca formatını desimalden binary e çevirmen yeterli.
SPI ile nasıl alırım diye sorunca SPI ile bilgi bir yerden alınır bir yere verilir. Sen nerden alıp nereye vereceksin. ?  Daha doğrusu kim alacak nerden alacak?

Ete

ete

#2
Kamil Yollamış,
Alıntı YapEte hocam verdiğiniz 0 ile 255 arası sayıcıda WORD  tipi değişiklk yaptım şimdi 0 ile65536 ya kadar sayıyor benim öğrenmek istediğim 0 ile65536 arası sayıların lcd de gösterilirken ikili karşılığının
SYMBOL DTA = PORTA.3   '------------------   
SYMBOL CLOCK = PORTB.0  '-----------------       
SYMBOL LATCH = PORTB.2  '-----------------
bu pinlerden gönderilmesi  yukarı aşağı butonuna basınca sayılar değiştikce ikili karşılıklarınında data,clk,lach uclarından çıkacak .iklili bilgi  gittimi gitmedimi diye onay işlemi olmayacak.bunun nasıl yapıldığını öğrenmek istiyorum.
sizin verdiğiniz radyo uygulaması gibi onda iki tel kullanılıyor benim öğrenmek istedigimde üç tel uygulası.kendi yaptığım 4 bant hf alıcı verici var bunun osilatör ünü kontrol etmek için eski yöntemi kullanıyorum.devrede 10 adet entegre 24 adet transistör  ve 6 adet led diplay kullanıyorum.bunların yerine pıc ile kotrol etmek istiyorum pıc ile yeni tanıştım fakat bilgi eksiğim çok .internette araştırdım spı konusunu bir tane örnek uygulama buldum oda tay dilinde anlatım yapmış.aslında iki sorum daha olacak bu konuda ama onuda kendim çözmeye çalışacağım.çözemezsem sizden  yardım isteyeceğim.ete hocam derslerinize de çalışıyorum cok sağolun elinize sağlık

ete

SPI ın bir haberleşme protokolü olduğunu söylemiştim. Bu protokolde bir Enable ucu bir data birde Clk ucu vardır. Genelde haberleşeceğin elemanın enable ucunu aktif edersin. Aktivasyon kiminde HIGH vererek kiminde ise LOW vererek olur. Bu nedenle SA1057 data sheet'ine bakmak gerekecek (ben bulamadım data sheet'i) .

Neden ısrarla ikili (binary) karşılıkları yollama gibi bir düşüncen var anlamıyorum. Sen özel çaba sarfetmen gerekmiyor. Zira bütün haberleşmeler otomatikman binary olarak yapılıyor zaten. Sen desimal yada hex olarak da versen sayı binary yollanır. Bunun başka alternatifi yok. Zira bütün değerler ikili sistemin bit mantığı ile yollanır. Bu nedenle ikili karşılığını yollayacağım diye kendini zorlama.

Şimdi  SA1057 entegresinin Enable ucu LOW ile enable olduğunu varsayalım.
Buna göre sa1057 ye bir kaç bilgi yollayalım. İşte işlemin adımları;
1. Önce sa1057 yi enable yap ,  ENBL=LOW
2. Sonra sa1057 ye sayıcının birler hanesini yolla;
     SHIFTOUT DTA,CLK,1,[BIRLER]
3. Sonra Onlar hanesi değerini yolla,
     SHIFTOUT DTA,CLK,1,[ONLAR]
4. Sonra yüzler hane değerini yolla;
    SHIFTOUT DTA,CLK,1,[YUZLER]
5. İşlem bitti şimdi enable işlemini iptal et , ENBL=HIGH.

Komut içinde yer alan ,1, değeri bir anlam taşımaktadır. Sayı değerine göre anlamlar şunlardır;
0= LSBFIRST yani endüşük bit (bit0) en önce yollanır ve sonunda CLK ucu LOW da bekler.
1= MSBFIRST , yani en yüksek bit (Bit7) önce yollanır ve sonunda CLK LOW da bekler.
4= LSBFIRST , ve CLK HIGH da kalır.
5= MSBFIRST ve CLK HIGH da kalır.

Genelde SPI cihazların kontrolu için önden bazı rakamların verilmesi gerekebilir. Bu malzemeye ait data sheetlerde belirtilir. Örneğin bir SPI eproma bilgi yazarken önce Write Enable işlemi yapılması gerekir. Bunun için önce elemana write enable kodu yollanır. Sonra eproma yazılacak bilginin hangi adrese yazılacağını belirlemek için yazma adresi yollanır. SOnunda yazılacak bilgi yollanır. Bunların hepsi o elemana ait haberleşme kriterleridir ve data sheetlerden öğrenilebilir.
Hepsi bu kadar. Umarım anlaşılmıştır.

Ete

ete

Kamil Yollamış,
Alıntı YapEte hocam hocam tam benim öğrenmek istediğimde bunlardı çok sağol.

Powered by EzPortal