SERİ İLETİŞİMDEKİ KÜÇÜK SORUN

Başlatan desman, 03 Eylül 2011, 20:25:23

desman

Merhaba arkadaşlar;
Ben ete hocanın seri iletişim dersindeki kodları biraz değiştirerek 3 kanal seri iletişim programı yazdım.
Program similasyonda ve breadboard üzerin çalıştı ama küçük bir sorun var bn nerde olduğunu bulamadım ve kafama takıldığı için sizlerle paylaşmak istedim.Verici PIC deki butona ilk bastığımızda alıcıda bulunan ledler yanımıyor,ancak 2. defa bastığımızda led yanıyor.ilk bastığımızda neden çalışmıyorda ikincide çalısıyor ?  :-\

VERİCİ KOD:
@ DEVICE pic16F628A 'işlemci 16F628 
@ DEVICE pic16F628A, WDT_on 'Watch Dog timer kapalı 
@ DEVICE pic16F628A, PWRT_ON 'Power on timer açık 
@ DEVICE pic16F628A, PROTECT_OFF 'Kod Protek kapalı 
@ DEVICE pic16F628A, MCLR_off 'MCLR pini kullanılıyor. 
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT 'Dahili osilatör kullanılacak 
CMCON=7           
OPTION_REG.7=0   
PORTA=0
PORTB=0
TRISA=0
TRISB=1

SYMBOL CIKIS=PORTA.0
SYMBOL TUSA=PORTB.0
SYMBOL TUSB=PORTB.1
SYMBOL TUSC=PORTB.2
VER    var  byte
VER=0

BASLA:
 
VER=0
       IF TUSA=1 THEN
          VER=88
          gosub gonder
          WHILE TUSA=1 
          WEND
       endIF
          
       IF TUSB=1 THEN 
           VER=66
           gosub gonder
           WHILE TUSB=1
           WEND
        endif
            IF TUSC=1 THEN 
           VER=55
           gosub gonder
           WHILE TUSC=1
           WEND
        endif    
           
       PAUSE 50
       GOTO BASLA

GONDER: 
        SEROUT2 CIKIS,396,["ONUR",ver]
        SEROUT2 CIKIS,396,["ONUR",ver]
        return
END


ALICI KOD:
PORTA=0 
PORTB=0 
TRISA=%00000001 
TRISB=%00000000   

@ 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 Koruma kapalı
@ DEVICE pic16F628A, MCLR_OFF             'MCLR pini kullanılıyor.
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak 

 AL     VAR  BYTE
 GIRIS  VAR  PORTA.0
 LEDA   VAR  PORTB.0
 LEDB   VAR  PORTB.1
 LEDC   VAR  PORTB.2

 
CMCON=7
CLEAR                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
PAUSE 500
PORTB=0  
    
BASLA:
         
       SerIn2 GIRIS,396,[WAIT("ONUR"),AL]
      
       IF AL=88 THEN 
          TOGGLE LEDA
     ENDIF
           
       IF AL=66 THEN
          TOGGLE LEDB
  ENDIF
          IF AL=55 THEN
          TOGGLE LEDC
ENDIF   
       pause 50
       GOTO BASLA

END



Şimdiden ilginiz için teşkküler. :)
A freshman at YTU

barisertekin

Kablolu iletişim mi yoksa RF Kablosuz iletişim mi?

Eğer RF ise Preamble kullanman gerekiyor.

SEROUT2 CIKIS,396,[REP$AA\5,REP$00\5,REP$FF\5];Preamble + Sencron Gönderimi   
SEROUT2 CIKIS,396,["O","N","U","R",ver]

-Hasan-

TRISB=1


3 tane buton olmasına rağmen neden TRISB=1 dediniz? TRISB=1; sadece PORTB.0 ' ı giriş yapar. Diğer butonların bağlı olduğu PORTB.1, PORTB.2 çıkış olur. TRISB=7 olması lazım.

PAUSE 50


Bir de programlarınızda 50 mS ' lik gecikme koymuşsunuz, bunu kaldırın. Asıl sorununuzun sebebi bu olabilir. Bu durumda; VERİCİ PIC data gönderirken ALICI PIC bekleme yapıyor olabilir. Bu olasılığı ortadan kaldırmak için gecikmeleri kaldırın.

desman

@barisertekin;
kablolu iletişim yapıyorum

@Hasan Oguz
TRISB=%1111111
şeklinde yaptım bişe değişmedi ayrıca, bu konuda yanlış olabilisiniz ben hep aynı şekilde kullanıyorum bir sorunla karşılaşmadım :-\
  pause 50
kaldırınca led yanıp sönüyor yani 1. butona bastığımda 1.led yanıp sönüyor + yine aynı sorun devam ediyor yani 2 kez bastığımızda led yanıyor.
A freshman at YTU

-Hasan-

Alıntı yapılan: desman - 03 Eylül 2011, 21:52:03
@Hasan Oguz
TRISB=%1111111
şeklinde yaptım bişe değişmedi ayrıca, bu konuda yanlış olabilisiniz ben hep aynı şekilde kullanıyorum bir sorunla karşılaşmadım :-\

Asıl sizde bir yanlışlık var. Çünkü, PBP ' nin default sayı sistemi Decimal ' dır. Yani:

TRISB=1 ' Decimal 1 = Binary 00000001 Giriş Çıkış

Görüldüğü gibi sadece 0. bit giriş oluyor, diğerleri çıkış.

desman

Sizin dediğiniz şu şekilde olabilir hocam;
TRISB=%1
Yaparsak sadece PORTB'nin 1. pinini yani PORTB.0'ı giriş yapar ama bn öyle kullanmadım benin kullanış şeklim;
TRISB=1
böyle buda bütün PORTB'yi giriş yapar.
A freshman at YTU

LukeSkywalker

#6
hiç sanmıyorum TRISB=1'in tüm pinleri giriş yapacağını...
TRISB=2 yazarsanız ne olacak peki?
desimal sayılar başlarında açıklama yapılmadan kullanılırlar...
binary sayıla % veya 0b ile hex sayılar ise başlarına "0x" veya sonuna "h" getirilerek yazılırlar. yani

1=0b00000001=0x01=01h
2=0b00000010=0x02=02h

gibi..


desman

Ben hep böyle kullandım ve bi sorunla karşılaşmadım ne similasyonda nede pratikte  :'(
Konu zaten yolundan çıktı. + olarakda bn zaten bu kodlarla deveryi kurdum ve butonları bağladım ve butonlarla ilgili bir sorunla karşılaşmadım  :'( Deneyip görebilirsiniz.benim sorunum başka konunun başındaki soruyo okursanız konu hakkında bilgi sahibi olabilirsiniz
A freshman at YTU