avatar_ete

RF_KONTROL

Başlatan ete, 12 Aralık 2012, 13:49:42

designer.21

çok teşekkürler Ete Hocam, ilgimi çekti değişik bir komut, merakımı mazur görün,
 
bu komutun özel bir kullanım alanı var mı? veya,
normal TOGGLE komutunun kullanıldığı her yerde bu komut kullanılabilir mi?

designer.21

sonunda beni günlerdir uğraştıran sorunun çözümünü buldum veya bulduğumu sanıyorum : )

Sayın Ete Hocam, daha önceki ders anlatımlarınızdan 7 adet Baud Rate'e karşılık gelen Bits değerlerini almamız gerektiğini açıklamışsınız. fakat ben bunların hangisini neye göre belirlediğimizi bulamadım.

yaptığım devrenin kablo ile bağlantısında çalışıp, modülü her taktığımda devre çalışmayınca aklıma bu değerle oynamak geldi ve tahmini hepsini tek tek denediğimde 32 değerinde alıcı-verici devremin çalıştığını farkettim.

merak ettiğim, aşağıdaki SEROUT satırındaki Mode'u(32) neye göre değiştiriyoruz. alıcı-verici modülümüze göre mi, pic modelimize göre mi, kodlarla ilgili mi



SEROUT2 PORTA.1,32,["E","T","E",VERI]

designer.21

ete hocam; yukarıda merak edip sorduğum bir kaç soru vardı ama : (

ete

Sorularını görmedim nedense.
Birinci sorun TOGGLE ile ilgili. TOGGLE komutu tek bir bit için çalışır. Verdiğim komut BYTE bazında ama bitlere hükmeden bir komuttur. O komut ile tek bir biti de birden fazla bitide konum değiştirebilirsin. KOmutun sonunda yer alan "^ %00000001" ifadesini "^%00000011" yapsa idim hem sıfır hemde 1 nolu bitler konum değştirmiş olacak idi. Aradaki farkı görebildiğini umuyorum.


Mode 32 ile ilgili soruna SEROUT komutunun açıklamasını vererek cevaplayayım.
Komutun üstüne kursörü getirip o konumda F1 tuşuna basarsan komutla ilgli açıklama ekrana gelecektir. Bütün Basic komutları iin geçerlidir bu uygulama.
Açıklamadan şunlar yazıyor;
"In some cases, the transmission rates of SEROUT2 instructions may present characters too quickly to the receiving device. It may not be desirable to use an extra pin for flow control. An optional Pace can be used to add character pacing to the serial output transmissions. This allows additional time between the characters as they are transmitted. The character pacing allows a delay of 1 to 65,535 milliseconds between each character transmitted. Mode is used to specify the baud rate and operating parameters of the serial transfer. The low order 13 bits select the baud rate. Bit 13 selects parity or no parity. Bit 14 selects inverted or true level. Bit 15 selects whether it is driven or open. The baud rate bits specify the bit time in microseconds - 20. To find the value for a given baud rate, use the equation:

(1000000 / baud) - 20"

Altında birde tablo verilmiş o tabloya bakarsan senin 32 değerin aslında 19200 baudluk bir hıza tekabül ediyor. Tablonun en hızlısı yani.
Hesaplamada şuna göre yapılıyor
(1.000.000/19200)-20  , Buda /52-20)=32 olarak hesaplanıyor.

Genellikle yüksek OSC hızlarında (8 Mhz den yüksek) 9600 ve yukarı baudları kullanırız. Daha düşük OSC frekanslarında ise daha düşük baudlar kullanılır.
Aslında her baud hızı her OSC frekansında çalışır ancak hata payı yükselir. Bu nedenle OSC frekansına göre en düşük hata payı olanı daima tercih ederiz.
Sende ne hikmet ise tersi olmuş gibi. EN yükseğini seçmişsin ama sistemin çalışmış nasıl olmuş anlamadım.

Ete



designer.21

cevaplarınız için çok teşekkür ederim hocam. çok güzel ve kaliteli şeyler öğrettiniz ve öğretiyorsunuz : ) ne kadar teşekkür etsek azdır. saygılar hocam

designer.21

Merhabalar değerli forum üyeleri. ETE Hocamın bu sayfadaki RF Kontrol projesinde küçük bir değişiklik yaparak kullanma ihtiyacı duydum. gerekli değişikliği yaptım fakat derleme kısmını yapamadım. dolayısıyla .hex dosyasını elde edemedim. asm ile  uğraştığım için ortaya çıkan hatayı gideremedim. zahmetler verecem ama rica etsem aşşağıda değişiklik yaptığım kodu derleyip paylaşabilir misiniz acaba


'******************************************************************
'*  Name    : alıcı.BAS                                           *
'*  Author  : [Mustafa CAN ]                                      *
'*  Notice  : Copyright (c) 06,06,2006                            * 
'*          : All Rights Reserved                                 *
'*  Date    : 28.03.2007                                          *
'*  Version : 1.0                                                 *
'*  Notes   : portA PİNLERİ TOGGLE pORTb PİNLERİ BASNIRAK ÇALIŞIR.*
'*          :                                                     *
'******************************************************************
@ DEVICE pic16F628A                      'işlemci 16F628                                
@ DEVICE pic16F628A, WDT_ON              'Watch Dog timer açık
@ DEVICE pic16F628A, PWRT_ON             'Power on timer açık
@ DEVICE pic16F628A, PROTECT_OFF         'Kod Protek kapalı
@ DEVICE pic16F628A, MCLR_off            'MCLR pini kullanılMIYOR.
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak 
CMCON=7
DEFINE OSC 4
PORTA=0:TRISA=%00000000
PORTB=0:TRISB=%00000010 
' -------------- haberlesme define
DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 20h ' Enable transmit, BRGH = 0
DEFINE HSER_SPBRG 25  ' 2400 Baud @ 4MHz, 0,17%
DEFINE HSER_CLROERR 1 ' Clear overflow automatically


SYMBOL GIE  =INTCON.7   'genel interruptları açıyor
SYMBOL PEIE =INTCON.6   'peripheralinterruptları açıyor
SYMBOL RCIE =PIE1.5     'USART Recive interrupt enable bit
SYMBOL RCIF =PIR1.5     'USART Receive interrupt flag bit
'SYMBOL VERIIN=PORTA.0

BILGI var BYTE 56
I     VAR BYTE 57
TEMP  VAR BYTE 58
GELEN VAR BYTE 59
YENI  VAR BIT

PORTB=0

RCIE=1
PEIE=1
GIE=1 
ON INTERRUPT GOTO KES
 
BASLA:
                 
   IF YENI=1 THEN GOSUB TUSBAK
'   IF BILGI=16 THEN
'     PORTB=128
'   ENDIF  
   GOSUB DELAY
   PORTB=0
   GOTO BASLA
   
TUSBAK:   
   SELECT CASE BILGI
   CASE 0
   YENI=0:BILGI=0
   return
  
   CASE 1
   HIGH PORTA.0
  
   CASE 2
   HIGH PORTA.1
   
   CASE 4
   HIGH PORTA.2 
   
   CASE 8
   HIGH PORTA.3 
   
   CASE 16
   HIGH PORTB.3
   
   CASE 32
   HIGH PORTB.4
   
   CASE 64
   HIGH PORTB.5
   
   CASE 128
   HIGH PORTB.6
   END SELECT
   RETURN

DELAY:
      FOR I=0 TO 255
      PAUSEUS 1
      NEXT
      RETURN   
            
DISABLE
KES:
'    GIE=0
    hSerIn 15,ATLA,[WAIT ("ETE"),BILGI]
    GELEN=BILGI 
    YENI=1
ATLA:
    TEMP=RCREG 
'    GIE=1
    Resume
    enable           
             
END
               
                         

aRci

Merhaba üstteki device satırlarını silip alttaki kodu ekleyiniz. Tabi c/PBP klasöründeki 628a nın INC klasöründe config satrınızın kapalı olduğunu var sayıyorum.

@ __CONFIG _WDT_ON & _PWRTE_ON & _CP_OFF & _MCLRE_OFF & _INTRC_OSC_NOCLKOUT

designer.21

Evet oldu şimdi. Hex dosyasını da oluşturdu. Çok teşekkür ediyorum.

designer.21

#98
sanırım bir sorun çıktı. derleme kısmı sorunsuz olarak gerçekleşiyor ve hex dosyası oluşturuluyor. fakat kod çalışmıyor. ETE Hocamın kodlarının .hex dosyasını olduğu gibi pic'e attığımda çalışıyor, fakat bu kodları -config bölümü hariç- hiç değiştirmeden bile olduğu gibi derlediğimde hata veriyor çalışmıyor.

yaptığım gözlemde tüm çıkış pinlerinde 1.2 civarı voltaj var. (ALICI Devresi)

designer.21

bu sayfadaki ETE Hocamın projesini aşağıdaki gibi sadece CONFIG ayarlarını değiştirerek derlediğimde çalışmama nedeni; CONFIG AYARLARINDA PIC'i tanıtmadığım için olabilir mi acaba.

normalde ASM'de LIST P=16f628A yazarak pic'i tanımlıyorum da PicBasic'te de böyle bir durum var mı acaba

'****************************************************************
'*  Name    : verici.BAS                                       *
'*  Author  : [Mustafa CAN ]                                    *
'*  Notice  : Copyright (c) 06,06,2006                          *
'*          : All Rights Reserved                               *
'*  Date    : 28.03.2007                                        *
'*  Version : 1.0                                               *
'*  Notes   : PICLE VERICI bas dosyası                            *
'*          :                                                   *
'****************************************************************                          
@ __CONFIG _WDT_ON &_PWRTE_ON &_CP_OFF &_MCLRE_OFF &_INTRC_OSC_NOCLKOUT 
CMCON=7

DEFINE OSC 4
TRISA=%00000000
TRISB=%11111111 
OPTION_REG.7=0 
BILGI VAR BYTE


symbol LED=PORTA.1
SYMBOL VERIOUT=PORTA.0 

MAIN:      
            BILGI=~PORTB
           
            IF BILGI>0 THEN 
              GOSUB VER
              while portb<255:wend
              BILGI=0:GOSUB VER
            ENDIF
            
            pause 10
            low porta.1
            GOTO MAIN            
       

VER:
      HIGH portA.1 
      serout2 VERIOUT,396,[REP$AA\5,REP$00\5,REP$FF\5] 
      serout2 VERIOUT,396,["E","T","E",BILGI]
'      serout2 VERIOUT,396,["E","T","E",BILGI]
'      serout2 VERIOUT,396,["E","T","E",BILGI]
'      serout2 VERIOUT,396,["E","T","E",BILGI]
      RETURN
     
END
               
                         


'******************************************************************
'*  Name    : alıcı.BAS                                           *
'*  Author  : [Mustafa CAN ]                                      *
'*  Notice  : Copyright (c) 06,06,2006                            * 
'*          : All Rights Reserved                                 *
'*  Date    : 28.03.2007                                          *
'*  Version : 1.0                                                 *
'*  Notes   : portA PİNLERİ TOGGLE pORTb PİNLERİ BASNIRAK ÇALIŞIR.*
'*          :                                                     *
'******************************************************************
@ __CONFIG _WDT_ON &_PWRTE_ON &_CP_OFF &_MCLRE_OFF &_INTRC_OSC_NOCLKOUT

CMCON=7
DEFINE OSC 4
PORTA=0:TRISA=%00000000
PORTB=0:TRISB=%00000010 
' -------------- haberlesme define
DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 20h ' Enable transmit, BRGH = 0
DEFINE HSER_SPBRG 25  ' 2400 Baud @ 4MHz, 0,17%
DEFINE HSER_CLROERR 1 ' Clear overflow automatically


SYMBOL GIE  =INTCON.7   'genel interruptları açıyor
SYMBOL PEIE =INTCON.6   'peripheralinterruptları açıyor
SYMBOL RCIE =PIE1.5     'USART Recive interrupt enable bit
SYMBOL RCIF =PIR1.5     'USART Receive interrupt flag bit
'SYMBOL VERIIN=PORTA.0

BILGI var BYTE 56
I     VAR BYTE 57
TEMP  VAR BYTE 58
GELEN VAR BYTE 59
YENI  VAR BIT

PORTB=0

RCIE=1
PEIE=1
GIE=1 
ON INTERRUPT GOTO KES
 
BASLA:
                 
   IF YENI=1 THEN GOSUB TUSBAK
'   IF BILGI=16 THEN
'     PORTB=128
'   ENDIF  
   GOSUB DELAY
   PORTB=0
   GOTO BASLA
   
TUSBAK:   
   SELECT CASE BILGI
   CASE 0
   YENI=0:BILGI=0
   return
   CASE 1
   PORTA=(PORTA & %11111111) ^ %00000001
   YENI=0
   CASE 2
   PORTA=(PORTA & %11111111) ^ %00000010  
   YENI=0
   CASE 4
   PORTA=(PORTA & %11111111) ^ %00000100 
   YENI=0
   CASE 8
   PORTA=(PORTA & %11111111) ^ %00001000 
   YENI=0
   CASE 16
   HIGH PORTB.3
   CASE 32
   HIGH PORTB.4
   CASE 64
   HIGH PORTB.5
   CASE 128
   HIGH PORTB.6
   END SELECT
   RETURN

DELAY:
      FOR I=0 TO 255
      PAUSEUS 1
      NEXT
      RETURN   
            
DISABLE
KES:
'    GIE=0
    hSerIn 15,ATLA,[WAIT ("ETE"),BILGI]
    GELEN=BILGI 
    YENI=1
ATLA:
    TEMP=RCREG 
'    GIE=1
    Resume
    enable           
             
END
       

ete

Basic de derleme ekranında (MCS de) işlemci seçimi vardır. Ayrıca kod içine işlemci tanımlaması yapılması gerekmez. Derlerken seçersin işlemcini ve derlersin.

Ete

designer.21

teşekkür ederim hocam, dediğiniz şekil yapıyorum. o zaman demek ki başka yerlerde aramam gerekli.

designer.21

merhabalar, bu koddaki compile sonucu çalışamama nedenini budum sonunda, konfigürasyona &_LVP_OFF eklemeyi gözden kaçırmışım. şimdi tamamdır.

designer.21

Ete Hocamın bu projesinde yaptığım ufak bir kaç değişiklik ile 8 kanalın tümünü de bas-bırak şeklinde kullanıma açabildim sonunda : ) asm ile uğraştığım biraz uğraştırdı ama oldu sonunda çok şükür.
herkese iyi çalışmalar diliyorum...

Powered by EzPortal