rf sayaç devresini çalıştıramadım

Başlatan enginkanat, 31 Mayıs 2014, 12:39:42

enginkanat

Verici programım

@ __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _MCLRE_OFF & _LVP_OFF & _CP_OFF

CMCON=7
OPTION_REG.7=0
DEFINE OSC 4
TRISA=%00000000
TRISB=%00001111

BILGI VAR BYTE


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

MAIN:     
           
            IF PORTB.0=0 THEN
            BILGI=10
            GOSUB VER
            WHILE PORTB.0=0:WEND
            ENDIF
            IF PORTB.1=0 THEN
            BILGI=20
            GOSUB VER
            WHILE PORTB.1=0:WEND
            ENDIF
            IF PORTB.2=0 THEN
            BILGI=30
            GOSUB VER
            WHILE PORTB.2=0:WEND
            ENDIF
            IF PORTB.3=0 THEN
            BILGI=40
            GOSUB VER
            WHILE PORTB.3=0:WEND
            ENDIF
            pause 10
            low LED
            GOTO MAIN           
       

VER:
      HIGH LED
      serout2 VERIOUT,396,[REP$AA\5,REP$00\5,REP$FF\5]
      serout2 VERIOUT,396,[("E"),("T"),("E"),DEC BILGI,13,10]
      serout2 VERIOUT,396,[("E"),("T"),("E"),DEC BILGI,13,10]
      RETURN
     
END


Alıcı programım
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2014 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 31.05.2014                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
@ __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _MCLRE_OFF & _LVP_OFF & _CP_OFF
OPTION_REG=%10000111
CMCON=7
DEFINE OSC 4
TRISA=%00000000
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 TOIF=INTCON.2
SYMBOL GIE  =INTCON.7   'genel interruptları açıyor
SYMBOL PEIE =INTCON.6   'peripheralinterruptları açıyor
SYMBOL TMR=INTCON.5
SYMBOL RCIE =PIE1.5     'USART Recive interrupt enable bit
SYMBOL RCIF =PIR1.5     'USART Receive interrupt flag bit
INTCON=%11100000
YENI VAR BIT
BILGI VAR BYTE
BIRLER VAR BYTE
ONLAR VAR BYTE
YUZLER VAR BYTE
GELEN VAR BYTE
SAYI VAR WORD
GELEN1 VAR BYTE
ADET VAR BYTE
AYAR VAR BYTE
TEMP VAR BYTE
SYMBOL BIR=PORTB.5
SYMBOL IKI=PORTB.6
SYMBOL UC=PORTB.7
BIRLER=0
ONLAR=0
YUZLER=0
ADET=0
SAYI=0
PORTA=0
PORTB=0

TMR0=99



ON INTERRUPT GOTO KES
RCIE=1
YENI=0:BILGI=0
BASLA:
IF YENI=1 THEN GOSUB GELEN_BAK
GOTO BASLA
GELEN_BAK:
IF GELEN<10 OR GELEN>40 THEN
    YENI=0
   
    RETURN
ENDIF
IF GELEN=10 THEN ARTTIR
IF GELEN=20 THEN EKSILT
IF GELEN=30 THEN MENU
IF BILGI=1 AND GELEN=40 THEN
    ADET=ADET+1
        IF ADET>5 THEN ADET=5
ENDIF
IF BILGI=1 AND GELEN=20 THEN
    ADET=ADET-1
        IF ADET=0 THEN ADET=1
ENDIF
IF BILGI=1 AND GELEN=30 THEN
    WRITE 3, ADET
    BILGI=0
ENDIF
RETURN
ARTTIR:
HIGH PORTB.3
ADET=ADET+1
IF ADET=AYAR THEN
    ADET=0
    BIRLER=BIRLER+1
    IF BIRLER=10 THEN
        BIRLER=0
        ONLAR=ONLAR+1
    ENDIF
    IF ONLAR=10 THEN
        ONLAR=0
        YUZLER=YUZLER+1
    ENDIF
    IF YUZLER=10 THEN
        YUZLER=9
        ONLAR=9
        BIRLER=9
    ENDIF
ENDIF
GOTO BASLA
EKSILT:
LOW PORTB.3
IF BIRLER>0 OR ONLAR>0 OR YUZLER>0 THEN
    BIRLER=BIRLER-1
ELSE
GOTO BASLA
ENDIF
IF BIRLER=255 THEN
    BIRLER=9
    ONLAR=ONLAR-1
ENDIF
IF ONLAR=255 THEN
    ONLAR=9
    YUZLER=YUZLER-1
ENDIF
IF YUZLER=255 THEN YUZLER=0
GOTO BASLA
MENU:
WRITE 0, BIRLER
WRITE 1, ONLAR
WRITE 2, YUZLER
BILGI=1
ALT_1:
YUZLER=0
ONLAR=0
BIRLER=ADET
GOSUB GELEN_BAK
IF BILGI=1 THEN ALT_1
IF BILGI=0 THEN
    READ 0, BIRLER
    READ 1, ONLAR
    READ 2, YUZLER
    READ 3, ADET
ENDIF
GOTO BASLA
DISABLE
KES:
    IF TOIF=1 THEN TMR_KES
    RCIE=0
    RCIF=0
    hSerIn 5,ATLA,[WAIT ("ETE"),DEC GELEN1]
    PORTB.0=1
    TEMP=RCREG
    RCIE=1
    GELEN=GELEN1
    YENI=1
    GOTO ATLA
TMR_KES:

PORTA=BIRLER

HIGH BIR
PAUSE 5
LOW BIR
PORTA=ONLAR

HIGH IKI
PAUSE 5
LOW IKI

PORTA=YUZLER

HIGH UC
PAUSE 5
LOW UC
TMR0=99 '5 ms lik süreyi yaratacak olan TMR0 değeri registere yükleniyor.
TOIF=0 'TMR0 Kesme bayrağı sıfırlanıyor


ATLA:

    Resume
    enable           
             
END

bu da devre

ete

#1
Çalıştıramadığın hangisi alıcı mı yoksa verici mi?. Çalıştıramadığın hangi kısmı?
Bu tür programlarda gözden kaçan şey çok olur. Görmenin tek yolu deneme yapmaktır.
Neyin çalışmadığı belli değil yani samanlıkta iğne arayacaksın. Üstelik bir şey deneyeyim desen oturup koca devreyi yeniden çizmek zorunda kalacaksın!!!!!!!  O halde boşver kim uğraşacak şimdi kırk saat devre çizmekle değilmi?

Yinede gördüğüm kusuru söyleyeyim. Programlarda bir şey göremedim. Çalıştırabilseyfim görürdüm sanırım.
Ama 4511 bağlantısında bir sorun var gibi.
LT-BI bacakalrı birleşitirilip +5V ta bağlanmalı, LE/STROB bacağı ise LOW da durmalıdır. Aksi halde ekranda bir şey göremezsin.

Ete

enginkanat

tamam hocam hata bu olabilir. teşekkür ederim

enginkanat

Hocalarım programı şu şekilde oluşturdum.
@ __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _MCLRE_OFF & _LVP_OFF & _CP_OFF
DEFINE OSC 4
TRISA=%00000000           
TRISB=%11110000              'PORTB'NİN TAMAMI ÇIKIŞ
INTCON=%10001000             
BIRLER    VAR  BYTE          '1.DİJİT
ONLAR     VAR  BYTE          '2.DİJİT
YUZLER    VAR  BYTE          '3.DIJIT
DURUM VAR BYTE
GELEN VAR BYTE
ADET VAR BYTE
SET VAR BYTE
I VAR WORD
PORTA=0
PORTB=0 
symbol SAY=PORTB.4
SYMBOL YUKARI=PORTB.5
SYMBOL MENU=PORTB.6
SYMBOL ASAGI=PORTB.7
SYMBOL A=PORTA.0
SYMBOL B=PORTA.1
SYMBOL C=PORTA.2
SYMBOL D=PORTA.3
SYMBOL EKRAN1=PORTB.0
SYMBOL EKRAN2=PORTB.1
SYMBOL EKRAN3=PORTB.2
SYMBOL RBIF=INTCON.0
SYMBOL TOIF=INTCON.2
SYMBOL GIE=INTCON.7
OPTION_REG=%10000111

CMCON=7
ADET=1
TMR0=99
BIRLER=0
ONLAR=0
YUZLER=0
ON INTERRUPT GOTO KESME

;**************EPPROM OKUNUYOR**************************************************
READ 0, BIRLER
READ 1, ONLAR
READ 2, YUZLER
READ 3, ADET
IF BIRLER=255 THEN BIRLER=0:ONLAR=0:YUZLER=0:ADET=1
IF ADET>5 THEN ADET=1
GOSUB EKRAN
;**************ANA PROGRAM******************************************************
BASLA:
IF DURUM.7=1 THEN
   GOSUB ARTTIR
   WHILE DURUM.7=1:WEND
   ENDIF
IF DURUM.5=1 THEN
   GOSUB ADET_EKRAN
   WHILE DURUM.5=1:WEND
   GOSUB ALT_MENU
   ENDIF
IF DURUM.4=1 THEN
   GOSUB EKSILT
   WHILE DURUM.4=1:WEND
   ENDIF
GOTO BASLA

ALT_MENU:
INTCON.7=0
GOSUB ADET_EKRAN
IF PORTB.6=1 THEN
    ADET=ADET+1
        IF ADET=5 THEN ADET=4
    GOSUB ADET_EKRAN
    WHILE PORTB.6=1:WEND
ENDIF
IF PORTB.4=1 THEN
    ADET=ADET-1
        IF ADET=0 THEN ADET=1
    GOSUB ADET_EKRAN
    WHILE PORTB.4=1:WEND
ENDIF
IF PORTB.5=1 THEN
    SET=1
    WHILE PORTB.5=1:WEND
    GOSUB KAYIT
    GOSUB EKRAN
    INTCON.7=1   
    RETURN
ENDIF
GOTO ALT_MENU
KAYIT:
WRITE 0, BIRLER
WRITE 1, ONLAR
WRITE 2, YUZLER
WRITE 3, ADET
RETURN

EKSILT:
IF BIRLER>0 OR ONLAR>0 OR YUZLER>0 THEN
    BIRLER=BIRLER-1
ELSE
GOTO BASLA
ENDIF
IF BIRLER=255 THEN
    BIRLER=9
    ONLAR=ONLAR-1
ENDIF
IF ONLAR=255 THEN
    ONLAR=9
    YUZLER=YUZLER-1
ENDIF
IF YUZLER=255 THEN YUZLER=0
GOSUB EKRAN
RETURN

ARTTIR:
BIRLER=BIRLER+1
IF BIRLER=10 THEN   
BIRLER=0
ONLAR=ONLAR+1
ENDIF
IF ONLAR=10 THEN     
ONLAR=0
YUZLER=YUZLER+1
ENDIF
IF YUZLER=10 THEN   
YUZLER=9
ONLAR=9
BIRLER=9
ENDIF
GOSUB EKRAN
RETURN

EKRAN:
LOW EKRAN1
HIGH EKRAN2
HIGH EKRAN3
PORTA=BIRLER
PAUSE 1
HIGH EKRAN1
LOW EKRAN2
HIGH EKRAN1
HIGH EKRAN3
PORTA=ONLAR
PAUSE 1
HIGH EKRAN2
LOW EKRAN3
HIGH EKRAN1
HIGH EKRAN2
PORTA=YUZLER
PAUSE 1
HIGH EKRAN3
DURUM=0
RETURN

ADET_EKRAN:

LOW EKRAN1
HIGH EKRAN2
HIGH EKRAN3
PORTA=ADET
PAUSE 1
HIGH EKRAN1

LOW EKRAN2
HIGH EKRAN1
HIGH EKRAN3
PORTA=15
PAUSE 1
HIGH EKRAN2

LOW EKRAN3
HIGH EKRAN1
HIGH EKRAN2
PORTA=15
PAUSE 1
HIGH EKRAN3
RETURN

DISABLE
   
KESME:

LOW PORTB.3
   
   DURUM=PORTB  'PORT B OKUNDU
   
   RBIF=0
   HIGH PORTB.3
   RESUME
   ENABLE
   END


devre ise şu şekilde,


bu program isis te çalışıyor.
yapamadığım tek olay alt_menu etiketinde iken portb.5 butonuna basılı iken portb.4 butonuna basılmış ise digit değerlerinin resetlenmesi, sadece portb.5 butonuna basılı ise kayıtları yapıp çalışma programına dönmesi gerekiyor.

    if portb.5=1 then
          while portb.5=1
                for i=1 to 500
                       if portb.4=1 then birler=0:onlar=0:yuzler=0:gosub ekran:i=500
                next i
          wend

şeklinde yaptım ama işe yaramadı.

portb.5 butonuna kısa basılınca menuden çıkış uzun basılınca resetleme ve çıkışta olabilir ama yapamadım.
               

ete

Program isis de çalışıyor ancak yarım yamalak çalışıyor. Bir çok mantık ve algoritma hatası var bu programda.
Birincisi saydırılacak sayı word tipinden tanımlanım sayı olarak kaydı tutulması gerekirken sen onu 3 hane olarak ayrı ayrı kayıtta tutmuşsun.
Haneler yalnızca ekrana yazdırılırken gerekli orada Birler=SAYI DIG 0, Onlar=SAYI DIG 1 ve YUZLER=SAYI DIG 2  şeklinde haneleri kolaylıkla ayırabilirdin.
Adet diye ayrı bir ekran ve değer var bu nedir anlaşılmıyor. PORTB.5 e basılınca hem adet ekranını displaylere yazdırıyor hemde alt menüye gidiyorsun gerçi gidemiyorsun çünki oraya PORTB.5 butonunun bırakılmasını şart koşmuşsun. Onu kaldırınca program alt menüye gidiyor ancak orada da ana sayının değerlerini sıfırlıyorsun.  Tuş okumak için kesme kullanmayada gerek yoktu bence. Zira kalıcı ekran modeli kullanıyorsun bir taraman falan yok. Tuşları istediğin anda kolaylıkla okuyabilirdin.
Bazı mantık hatası olabilecek durumlar var mesela, PORTB.7 butonu birler'i artırırken PORTB.6 butonu aslında Adet'i artırmaktadır. Ama ekranda diğer sayı olduğunda artış görülmüyor.
Sen en iyisi bu projenin amacını madde madde yazki kusurları daha iyi açıklayabileyim.

Adet isimli sayac değeri bir yerde kullanılmıyor ama sürekli eproma kayıt ediliyor. Diğer sayaç olan Birler+ONlar+Yüzler kombine değişken değeri nin adet ile bir bağlantısı olması lazım ama nedir bilemiyorum.

Birde değişkenlerin sıfırlanmasında PORTB.5 tuşuna biraz fazla basarak resetleme mi tercihin yoksa iki tuşa birden PortB.5 ve PortB.4'e basmak mı tercihindir onuda belirt.

Ben olsam bu programı SAYAC isimli bir word değişkeni kullanarak saydırmada onu artırarak işlem yapardım.
Adet ne amaçla kullanılıyorsa aynı şekilde kalabilirdi. Hem program kısalır hemde kontrol kolaylaşır.

Ete

enginkanat

#5
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2014 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 01.06.2014                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
@ __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _MCLRE_OFF & _LVP_OFF & _CP_OFF
DEFINE OSC 4
TRISA=%00000000           
TRISB=%11110000
CMCON=7             
OPTION_REG=%10000000             
BIRLER VAR BYTE          '1.DİJİT
ONLAR VAR BYTE          '2.DİJİT
YUZLER VAR BYTE          '3.DIJIT
DURUM VAR BYTE
GELEN VAR BYTE
ADET VAR BYTE
SET VAR BYTE
SAYI VAR WORD
TEMP VAR BYTE
PORTA=1
PORTB=0
SAYI=234
ADET=1
SET=0

;**************EPPROM OKUNUYOR**************************************************
'READ 0, SAYI
'IF SAYI>1000 THEN SAYI=0
'READ 3, ADET
'IF ADET>5 THEN ADET=1
GOSUB SET_SAYI
GOSUB EKRAN
;**************ANA PROGRAM******************************************************
BASLA:
IF portb.4=1 THEN
   GOSUB ARTTIR
   WHILE portb.4=1:WEND
   GOSUB KAYIT
   ENDIF
IF portb.5=1 THEN
   GOSUB SET_ADET
   GOSUB EKRAN
   WHILE portb.5=1:WEND
   GOSUB ALT_MENU
   ENDIF
IF portb.7=1 THEN
   GOSUB EKSILT
   WHILE portb.7=1:WEND
   GOSUB KAYIT
   ENDIF
GOTO BASLA

ALT_MENU:
GOSUB SET_ADET
GOSUB EKRAN
IF PORTB.6=1 THEN
    ADET=ADET+1
        IF ADET=5 THEN ADET=4
        GOSUB SET_ADET
    GOSUB EKRAN
    WHILE PORTB.6=1:WEND
ENDIF
IF PORTB.7=1 THEN
    ADET=ADET-1
        IF ADET=0 THEN ADET=1
        GOSUB SET_ADET
    GOSUB EKRAN
    WHILE PORTB.7=1:WEND
ENDIF
IF PORTB.5=1 THEN
    WHILE PORTB.5=1:WEND
    GOSUB KAYIT
    GOSUB SET_SAYI
    GOSUB EKRAN
    RETURN
ENDIF
GOTO ALT_MENU

SET_SAYI:
BIRLER=SAYI DIG 0
ONLAR=SAYI DIG 1
YUZLER=SAYI DIG 2
RETURN

SET_ADET:
BIRLER=ADET DIG 0
ONLAR=ADET DIG 1
YUZLER=ADET DIG 2
RETURN

KAYIT:
WRITE 0, SAYI
WRITE 3, ADET
RETURN

ARTTIR:
SET=SET+1
IF SET=ADET THEN
    SAYI=SAYI+1
    SET=0
        IF SAYI=1000 THEN SAYI=0
GOSUB SET_SAYI
GOSUB EKRAN
ENDIF
RETURN

EKSILT:
SET=0
SAYI=SAYI-1
IF SAYI>1000 THEN SAYI=1
GOSUB SET_SAYI
GOSUB EKRAN
RETURN
END

EKRAN:
PORTB.0=0
PORTA=BIRLER
PAUSE 5
PORTB.0=1
PAUSE 5
PORTB.1=0
PORTA=ONLAR
PAUSE 5
PORTB.1=1
PAUSE 5
PORTB.2=0
PORTA=YUZLER
PAUSE 5
PORTB.2=1


RETURN


hocam, tarif ettiğiniz gibi programı değiştirdim. program bayağı kısaldı. adet olayı kaç defa butona basarsam sayacın 1 artacağı ile ilgili. programa ekledim az önce. makinaya bağlayacağım ben bunu. tek operasyonda işi bitiriyorsa adet sayısını 1 e set edeceğim, üç operasyonda işi bitiriyorsa 3 e set edeceğim. portb.7 buton değil aslında harici sinyal. normal kumanda üzerinde 3 buton var arttır butonu normal çalışmada işlemiyor, operatör el ile arttırmasın diye bu şekilde yaptım.  sadece alt menude işe yarıyor. menu butonu ile adet sayısını ayarlamak ve resetlemek için menuye giriyorum. resetlemeyi yapamadım. azalt butonu ise hem program sayaç vazifesi yaparken hemde alt menude iken azaltma işini yapacak. kesme kullanma sebebim ise kesmeler konusunda zayıfım o sebepten. deneyerek öğrenmek daha güzel oluyor.

hocam buton sinyalleri pt 2272 m4 ile gelecek. resetlemede hangisi uygun olur bilemiyorum.

isis similasyonu çok güzel çalışıyor ancak devreyi uyguladığımda 3 digit te de 0 görüyorum ve çok fazla titreme yapıyor. menu tuşuna bastığımda menuye girdiğini görüyorum rakamda değişiyor gibi 100 mm digit kullanıyorum bunun içinde 4511 beslemesini 12VDC ile yaptım. aynı beslemeden  7805 ile pic ve pt2272m4 ve rws434 beslemesini kullandım. toplamda 64,8 mA çektiğini ölçü aletinin 200mA kademesinden ölçtüm.
elimdeki güç kaynağının çıkış etiketini yazayım;
  +5V           1A  -      5A max
+12V        0,5A  -   2,5A max
   -5V       0,05A - 0,25Amax
-12V       0,05A - 0,25Amax
acaba güç kaynağından olabilir mi

ete

İlişikte yolladığım programı bir dene epeyce düzeltme ve değişiklik yaptım. Anlattığına göre çalışıyor.
Gerçekte ne yapar tam olarak bilemem.

Ete

enginkanat

hocam ilgi ve alakanız için teşekkür ederim. bir tek sorum olacak, 4511 in VDD ucunu 12VDC ile besledim datasheete baktığımda 18 volta kadar çalışacağı yazıyor. LT ve BI uçlarına da 12 VDC verdim. sayaç çalışıyor ancak 3 digit te aynı rakamları yazıyor. ekran yazma bölümündeki pauseleri 500 yaptım LE enable girişleri tek tek işliyor. mesela sayı 234 diyelim üç ekran aynı anda 4 500 ms sonra aynı anda 3 500 ms sonra aynı anda 2 yanıyor.  444   333   222  şeklinde. LE girişlerine led ler bağladım ledlerin tek tek devreye girdiğini gördüm. 4511 ler bozulmuş olabilir mi? bozulmuş ise ben nasıl bir hata yapmış olabilirim

ete

#8
Entegrelerin bozulduğunu sanmıyorum. Bu entegre de LATCH (kilit) özelliği var ve onu olması gerektiği gibi kullanmadık sanırım.
Programa yeniden baktım da önce entegre Blank moduna alınmalı sonra ABCD hattına gösterilecek rakam girilmeli ve ardından hangisinde o rakam gözükecek ise ona ait latch LOW'a çekilmeli.  Burada aksaklık var.
Bu açıklamaya göre yeniden düzenledim ilişiktekini bir dene istersen.

Ete


enginkanat

Eve gidince deneyeceğim hocam, ayrıca işyerindeki bilgisayardan girdim siteye, hatırladığım kadarı ile sitede reklam yoktu. şimdi ise sitenin her tarafında reklamlar dolu (Ads by OnlineBrowserAdvertising) hatta sayfaya tıklıyorum yeni yeni sayfalar açılıyor. bu  konudan haberiniz varmı, bu siteyi reklam amaçlı birileri kullanıyor olabilir gibi geldi bana

ete

Sabahtan beri sitedeyim reklam falan görmedim. Sorun sende olmalı
Ete

F®T

bende göremiyorum.senin pc de  sorun var heralde
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

enginkanat

evet pc de varmış temizledim normale döndü. hocam aynı zamanda ben hatayı buldum. sistem aslında normal çalışıyor ancak 4511 lerin çıkış akımı kullandığım displayi karşılamıyor 4511 çıkışlarına transistör bağlayacağım. elimde bd912 var olur diye düşünüyorum. birde bc 337 var bol miktarda.
4511 leri 5 VDC ile besleyerek transistörleri süreceğim ama beyz'e kaç ohm direnç bağlamalıyım 330 olurmu sizce

ete


Powered by EzPortal