K

DİRENÇ RENK KODU HESAPLAMA PBP

Başlatan kızagan, 24 Mayıs 2014, 23:47:19

kızagan

SA  Burada yeniyim yardıma ihtiyacım var  okulda proje ödevi olarak  PBP ile direnç renk  kodu  hesaplayan  program yapmam gerekiyor   kendim  bir kaç küçük  ayrıntı olsa da çalışan  bir program yazdım   İSİS   simülasyonda düzgün şekilde çalışıyor ama  kodu pic atınca düzgün çalışmıyor pic olarak 16f877a kullanıyorum   sürekli  kendi kedine sayı  üretiyor yazdığım kod damı  bir sıkıntı bir bakarsanız sevinirim  KODU,  devre şemasını  ve isis çizim  dosya ekinde verdim

****************************************************************

TRISC=%11110000          ;portd yi giriş yap. bu porta diod matrix olarak tuşlar bağlıdır.
TRISB=%00000000          ;portb yi çıkış yap. Buraya lcd ekran bağlıdır.

;***********************************************************************
RK1 VAR WORD
RK2 VAR WORD
RK3 VAR BYTE
RK4 VAR BYTE
RK5 VAR WORD
RK6 VAR WORD
RK7 VAR BYTE
SONUC VAR WORD
SONUC1 VAR WORD
TUS   VAR BYTE
B1    VAR BYTE
B2    VAR WORD
ZM1 VAR BYTE

'***********************LCD*********************************************

DEFINE LCD_BITS 4     ;Veri yolu 4 bitliktir. burası 8 bitte kullanılabilir. 
DEFINE LCD_DREG PORTB ;data bitlerinin bağlı olduğu port B portudur.
DEFINE LCD_DBIT 4     ;ve başlangıç biti 4. bittir. (yani portb.4)
DEFINE LCD_RSREG PORTB ;lcd yazmaç secimi, bağlı olduğu port portb dir.
DEFINE LCD_RSBIT 2     ; ve bit.2 dir  (yani portb.2)
DEFINE LCD_EREG PORTB   ;enable biti portb ye bağlıdır
DEFINE LCD_EBIT 3       ;ve 3. bittir. :(Yani portb.3)
DEFINE LCD_LINES 2       ;lcd satır sayısı 2 dir.
DEFINE LCD_COMMANBUS 2000 ;komut gecikme süresi mikrosaniye olarak
DEFINE LCD_DATAUS 50      ;veri gecikme süresi mikrosaniye olarak

'*************************ANA PROGRAM**********************************

  Lcdout $fe,$80, " FATIH OLGUN "  ' Satır 1
  Lcdout $fe, $C0, "   Projesi"
  pausE 1000
 
BASLA:
CLEAR                    ;TÜM DEĞİŞKENLERİ SIFIRLA
ZM1=500                  ;TÜM ZAMAN DEĞİŞKENLERİN BELİRLENİYOR
LCDOUT $FE,1               ;EKRANI TEMİZLE SATIR BASINA GIT
Lcdout $fe,$80,"A=3 RENKLI"
LCDOUT $FE,$C0,"B=4 RENKLI "
PAUSE ZM1
'*************************bant seçimi********************************** 
GOSUB TUS_TARA
IF  TUS=12 THEN OKU_5           
IF  TUS=13 THEN OKU_1
GOTO BASLA
END   
  '*************************RENK 1-4**********************************
  OKU_1:
  TUS=0                   
  LCDOUT $FE,1                    ;lcd ekranı temizle
  Lcdout $fe,$80,"4-RENK 1"             
  lcdout $fe, $0f                 ;imleci  flaş yap
  PAUSE ZM1
  GOSUB TUS_TARA                  ; tus_tara etiketine  git
  IF  TUS=10 THEN BASLA
  LCDOUT $FE,1
  LCDOUT $FE,$C0,#TUS         ;tus değişkenini ekranada göster
  let RK1 = TUS*100          ;ilk alınan renk basamak değeri ile birlikte rk1 içine yaz
  PAUSE ZM1
  '*************************RENK 2-4**********************************
  OKU_2:
  TUS=0                               
  LCDOUT $FE,1                   ;lcd ekranı temizle
  Lcdout $fe,$80, "4-RENK 2"                 ;imleci  flaş yap
  lcdout $fe, $0f
  PAUSE ZM1
  GOSUB TUS_TARA
  LCDOUT $FE,1
  LCDOUT $FE,$C0,#TUS
  let RK2=TUS*10                ;ikinçi  basamak değeri ile birlikte rk2 yaz
  PAUSE ZM1
'************************* RENK 3-4**********************************                       
OKU_3:
TUS=0
LCDOUT $FE,1
Lcdout $fe,$80, "4-RENK 3" 
lcdout $fe, $0f
PAUSE ZM1
GOSUB TUS_TARA
LCDOUT $FE,1
LCDOUT $FE,$C0,#TUS
let RK3=TUS*1
PAUSE ZM1
  '************************* RENK 4-4**********************************   
OKU_4:
TUS=0
  LCDOUT $FE,1, "4-RENK 4" 
  lcdout $fe, $0f
  PAUSE ZM1
  GOSUB TUS_TARA
  let B1=TUS                  ; çarpan değeri belirlemek için tus b1 yaz
  LCDOUT $FE,1
  LCDOUT $FE,$C0,#TUS
  PAUSE ZM1 
  '*************************  TAMAM_1********************************** 
  TAMAM_1:
  gosub CARPAN ; carpan değeri  almak CARPAN ETİKETİNE DALLAN
  let SONUC=(RK1*1+RK2*1+RK3*1)*RK4      ;TÜM değişkenleri topla sonuca yaz
  PAUSE ZM1
  GOTO BITIR                ; bittir etiketine git
  END   
'*************************BITIR**********************************   
BITIR:
Lcdout $fe,$80,#SONUC,B2      ; b2 değişkeni ile çarpan değeri ekranda kösteriliyor
LCDOUT $FE,$C0,"SILME=(ESITTIR)"
GOSUB TUS_TARA
IF TUS = 11 THEN BASLA    ;ESITTİR TUSUNA BASILMASINI BEKLE
GOTO BITIR
END
'*************************RENK 1-3***********5
   OKU_5:
TUS=0
  LCDOUT $FE,1 , "3-RENK 1 "   
  lcdout $fe, $0f
  PAUSE ZM1
  GOSUB TUS_TARA
  IF  TUS=10 THEN BASLA
  LCDOUT $FE,1
  Lcdout $fe, $C0,#TUS
  PAUSE ZM1
  let RK5=TUS*10 
  '*************************RENK 2-3**********************************
OKU_6:
TUS=0
  LCDOUT $FE,1 , "3-RENK 2 " 
  lcdout $fe, $0f
  PAUSE ZM1
  GOSUB TUS_TARA
  LCDOUT $FE,1
  Lcdout $fe, $C0,#TUS
   PAUSE ZM1
  let RK6=TUS*1
'************************* RENK 3-3**********************************                       
   OKU_7:
  TUS=0
  LCDOUT $FE,1 , "3-RENK 3 " 
  lcdout $fe, $0f
  PAUSE ZM1
  GOSUB TUS_TARA
  let B1=TUS
  LCDOUT $FE,1
  Lcdout $fe,$C0,#TUS
  PAUSE ZM1
  '*************************TAMAM********************************** 
  TAMAM:
  gosub CARPAN
  let SONUC=(RK5*1+RK6*1)*RK7
  PAUSE ZM1
  GOTO BITIR
  END
;************************carpan alt programı*******************
CARPAN:          ;TUS DEĞİŞKENİNE GÖRE ETİKEDE DALLAN
IF B1=0 THEN SIFIR        ;10^0
IF B1=1 THEN BIR          ;10^1
IF B1=2 THEN IKI          ;10^2
IF B1=3 THEN UC           ;10^3
IF B1=4 THEN DORT         ;10^4
IF B1=5 THEN BES          ;10^5
IF B1=6 THEN ALTI         ;10^6
IF B1=7 THEN YEDI         ;10^7
GOTO CARPAN
END
SIFIR:
RK4=1
RK7=1
RETURN
BIR:
RK4=10
RK7=10
RETURN
IKI:
RK4=100
RK7=100
RETURN 
UC:
RK4=1
RK7=1
B2="K"
RETURN
DORT:
RK4=10
RK7=10
B2="K"
RETURN
BES:
RK4=100
RK7=100
B2="K"
RETURN
ALTI:
RK4=1
RK7=1
B2="M"
RETURN
YEDI:
RK4=10
RK7=10
B2="M"
RETURN   
'********** TUŞ TARAMA ALT PROĞRAMI ************                             
TUS_TARA:                             
    PORTC=%00000001
    IF PORTC.4=1 THEN TUS =1 :RETURN
    IF PORTC.5=1 THEN TUS =4 :RETURN
    IF PORTC.6=1 THEN TUS =7 :RETURN
    IF PORTC.7=1 THEN TUS =10:RETURN
    PORTC= %00000010
    IF PORTC.4=1 THEN TUS =2 :RETURN
    IF PORTC.5=1 THEN TUS =5 :RETURN
    IF PORTC.6=1 THEN TUS =8 :RETURN
    IF PORTC.7=1 THEN TUS =0 :RETURN
    PORTC=%00000100
    IF PORTC.4=1 THEN TUS =3 :RETURN
    IF PORTC.5=1 THEN TUS =6 :RETURN
    IF PORTC.6=1 THEN TUS =9 :RETURN
    IF PORTC.7=1 THEN TUS =11 :RETURN
    PORTC=%00001000
    IF PORTC.4=1 THEN TUS =12 :RETURN
    IF PORTC.5=1 THEN TUS =13 :RETURN
    IF PORTC.6=1 THEN TUS =14 :RETURN 
    GOTO TUS_TARA
    END
[/b]

ete

Programında TUŞ tarama kısmını aşağıdaki şekilde değiştir.
TUS_TARA:                             
    PORTC=%00000001
    IF PORTC.4=1 THEN TUS =1 :GOTO CIK
    IF PORTC.5=1 THEN TUS =4 :GOTO CIK
    IF PORTC.6=1 THEN TUS =7 :GOTO CIK
    IF PORTC.7=1 THEN TUS =10:GOTO CIK
    PORTC= %00000010
    IF PORTC.4=1 THEN TUS =2 :GOTO CIK
    IF PORTC.5=1 THEN TUS =5 :GOTO CIK
    IF PORTC.6=1 THEN TUS =8 :GOTO CIK
    IF PORTC.7=1 THEN TUS =0 :GOTO CIK
    PORTC=%00000100
    IF PORTC.4=1 THEN TUS =3 :GOTO CIK
    IF PORTC.5=1 THEN TUS =6 :GOTO CIK
    IF PORTC.6=1 THEN TUS =9 :GOTO CIK
    IF PORTC.7=1 THEN TUS =11 :GOTO CIK
    PORTC=%00001000
    IF PORTC.4=1 THEN TUS =12 :GOTO CIK
    IF PORTC.5=1 THEN TUS =13 :GOTO CIK
    IF PORTC.6=1 THEN TUS =14 :GOTO CIK
    GOTO TUS_TARA
CIK:
    WHILE (PORTC & %11110000)>0:WEND
    pause 30
    return   
    END

tuş takımına ait pull down dirençleri ile pinlere giriş için kullandığın seri dirençler aynı değerde alınmış.
Seri dirençleri 1K yap. Pull down dirençleri 10K olarak kalsın.

Aşağıdaki makaleleri de okumanı tavsiye ederim.

http://etepic.com/index.php/topic,1670.0.html

http://etepic.com/index.php/topic,1687.0.html

Ete

kızagan

#2
teşekkür ederim yardımınız için bir deneyim direnç değerlerini değiştireyim  bakalım sonuç getirecek mi bir sıkıntım daha vardı  çarpan  etiketi  kısmında TUS değerini sınırlandırma lazım  0 ile 7  arasında olmalı  tuş tarama kısmında 0 ile 7 arasında değerden hariç bir değer giril dimi  döngüden çıkmıyor program takılı kalıyor

ete

CARPAN etiketinin altında yer alan GOTO CARPAN satırı yerine RETUN yaz.
Ayrıca gosub CARPAN komutları yerine,
IF B1=0 or B1<10 then GOSUB CARPAN yazarsan sınırlamış olursun.

Bunları yapmak yerine daha iyisi OKU_4 etiketini şöyle düzenleyebilirsin;
OKU_4:
TUS=0
  LCDOUT $FE,1, "4-RENK 4" 
  lcdout $fe, $0f
  PAUSE ZM1
DORTBIR: 
  GOSUB TUS_TARA
  IF TUS>9 THEN DORTBIR
  let B1=TUS                  ; çarpan değeri belirlemek için tus b1 yaz
  LCDOUT $FE,1
  LCDOUT $FE,$C0,#TUS
  PAUSE ZM1 


Yine Oku_7 etiketinide aşağıdaki gibi düzenlersin;
   OKU_7:
  TUS=0
  LCDOUT $FE,1 , "3-RENK 3 " 
  lcdout $fe, $0f
  PAUSE ZM1
  OKUIKI:
  GOSUB TUS_TARA
  IF TUS>9 THEN OKUIKI
  let B1=TUS
  LCDOUT $FE,1
  Lcdout $fe,$C0,#TUS
  PAUSE ZM1

Ama CARPAN altındaki GOTO CARPAN satırı yerine mutlaka RETURN yazman daha doğru olur.

Ete


kızagan

  çok teşekkür ederim  yardımcı  olduğunuz için   

Powered by EzPortal