Frekans okuma

Başlatan Oracle1, 21 Mart 2016, 23:39:02

MB_77

#45
bu mesaj tarafımdan silinmiştir.

Oracle1

Tabi lcd komutları ekledim ama sorun çıktı ama lcd komutları diğer işlemcilerde denedim çalıştı.Daha gelişmiş ve uygun bir işlemci seçmek istiyorum.

MB_77

#47
bu mesaj tarafımdan silinmiştir.

Oracle1

Tamam usta sen daha iyi bilirsin ben bu işlemci üzerinde biraz daha çalışayım

Oracle1

#49
Usta kullandığım kod bu ete hocamın derslerinden diğer işlemcilerde çalışıyor ama 16f1827 de çalıştıramadım.


DEFINE LCD_DREG PORTB 'LCD data bacakları PortB de bağlı
DEFINE LCD_DBIT 4 'LCD data bacakları 4. bitten başlıyor
DEFINE LCD_EREG PORTB 'LCD Enable Bacağı PortB de bağlı
DEFINE LCD_EBIT 3 'LCD Enable Bacağı 3. bite bağlı
DEFINE LCD_RWREG    PORTB 'LCD RW Bacağı PortB de bağlı
DEFINE LCD_RWBIT      2 'LCD RW Bacağı  2. bite bağlı
DEFINE LCD_RSREG PORTB 'LCD RS Bacağı PortB de bağlı
DEFINE LCD_RSBIT 1 'LCD RS bacağı 1. Bite bağlı
DEFINE LCD_BITS 4 'LCD 4 bit  olarak bağlı
DEFINE LCD_LINES 2 'LCD 2 sıra olarak çalışıyor.

TRISB=0                         'B portu çıkış olarak ayarlandı.

LOW PORTB.2      'RW bacağı ekrana yazmaya imkan vermek için LOW yapıldı.

PAUSE 200                    ' LCD nin kullanıma hazır hale gelebilmesi için gerekli süre

LCDOUT $FE,1                              'Önce Ekranı siliyoruz.
LCDOUT $FE,$C0,"DENEME" 'ikinci satıra yazdırıldı.

End 'Program sonu




MB_77

#50
bu mesaj tarafımdan silinmiştir.

Oracle1

#51
hocam dediklerini uyguladım  ama çalışmadı işlemciden hiç bir işlem çıkışı göremiyorum ama portlar açık başka bir işlmciye göre derlediğimde çalışıyor.

MB_77

#52
bu mesaj tarafımdan silinmiştir.

Oracle1

#53
Hocam lcd çalıştırdım lcd eklememim sebebi şöyle;
0-500hz arası bir kare ve sinusoidal sinyalı ölcen bir frekans metre eklemek istiyorum son kez bu konu hakkında biraz yardımcı olursan bana çok şey katacak frekans konusunda ete hocamın frekans metre ile yaptığı örnekleri inceledim ama pek birşey anlamadım.

MB_77

#54
bu mesaj tarafımdan silinmiştir.

Oracle1

Evet hocam komparator kanalından okuyoruz frekansı sadece 0 ile 500 hz bir frekans metre eklemek istiyorum. asm endasm sigorta ayarlarına en son bakacağım birde hocam bu lcd de rs yi portb.0 a almanızın bir nedeni var mı? yoksa portb.1 de de kullanabilir miyiz?

MB_77

#56
bu mesaj tarafımdan silinmiştir.

MB_77

#57
bu mesaj tarafımdan silinmiştir.

Oracle1

Hocam ete hocamın derslerinden koda eklemeye çalıştım ama sanırsam bir kaç hatam var bi bakar mısın.


Define LCD_DREG  PORTB
Define LCD_DBIT  4
Define LCD_RSREG PORTB
Define LCD_RSBIT 0
Define LCD_EREG  PORTB
Define LCD_EBIT  3
DEFINE LCD_COMMANDUS 4000
DEFINE LCD_DATAUS 150

osccon=%01110000     '8 mhz
apfcon0.7=0
apfcon1.0=0
ansela=%00000000
anselb=%00000000
trisa=%11111111
trisb=%11111111
porta=0
portb=0

pause 400


ansela=%00000001      'ra0 analog seçildi, komparatörün giriş kanalı
anselb=%00000000
trisa=%11100011      'ra2 ve ra3 çıkış seçildi led için. diğerleri giriş
trisb=%00000000       

'değişkenler tanimlanır

tm var word
bay var byte
Frekans     var word
FrekansL    var Frekans.byte0
FrekansH    var Frekans.byte1
sure     VAR WORD
sureL    var SURE.Byte0
sureH    var SURE.Byte1

TOPLAM   var  word
sayac    var  word
counter  var  byte
HAS      VAR  BYTE
I        var  byte

X        var  bit
Z        VAR  BIT
ilk      var  bit
SEC      VAR  PORTA.0

'modüller ayarlanır. burada komparatör modülünü ayarlayacağız.
'komparatör, giriş kanalındaki voltaj referans kanalındaki voltajı
'geçtiğinde dijital olarak 1 değeri verir. ve kesme yaptırır.
'biz kesme yapmasıyla ilgileniyoruz.
'önce referans voltaj kaynağını ayarlarız

fvrcon=%11000100    'sabit voltaj kaynağını 1,024v olarak ayarladık. datasheet

cm1con0=%11000100    'komparatör registerinı ayarladık.datasheete bakman gerek
cm1con1=%10100000    'komparatör kesme ve kanal ayarları. bkz datasheet.

t1con=%00100001       'Fosc74 ve 1/4 prescaler ile timer1 ayarladık. datasheet.
                      'bu ayarlara göre 53hzde timer1 değeri=9434 olur.
                      'komut gecikmeleri biraz değiştirir.

tm=0
bay=0

on interrupt goto kesme    'kesme gerçekleşince "kesme" etiketine gidecek.

pie2.5=1            'komparatör kesmesi aktif edildi.
intcon=%11000000    'global kesmeler aktif edildi.

LCDOUT $FE,$80,"DENEME"

ana:
if bay=1 then
bay=0
'burası karar mekanizmasının başlangıcı
if tm>9425 then   '53hz'e simülasyonla 9455 bulduk +-30 tolerans verdik.
if tm<9485 then
porta.2=1         'sinyal tlerans içinde. yeşil led yakıldı
else
porta.2=0         'siyanl tolerans dışında. led kapatıldı.
endif
else
porta.2=0         'diğer koşul için de aynı durum.
endif
'burası bitişi altta bir endif vardı en sona atacağız
'komple kopyalamalıp değerleri yazmalısın. kırmızı ledi de iptal edelim.

if tm>5540 then   '26hz'e simülasyonla 19245 bulduk +-30 tolerans verdik.
if tm<5600 then
porta.3=1         'sinyal tlerans içinde. yeşil led yakıldı
else
porta.3=0         'siyanl tolerans dışında. led kapatıldı.
endif
else
porta.3=0         'diğer koşul için de aynı durum.
endif

' ilk koşulun endifi buradan sonra
endif
goto ana


kesme:
disable
intcon=0
if pir2.5=1 then
    tm.byte0=tmr1l
    tm.byte1=tmr1h
    tmr1l=0
    tmr1h=0
    bay=1
pir2.5=0   
endif
intcon=%11000000
enable
return

'******************************* FREKANSMETRE***********************************
START:   
'         gosub olc
'         gosub modsec
'         lcdout $FE,1,"fre:",#frekans," mod=",#has,"S=",#SEC
'         pause 500:goto start
ATLA:    IF SEC=1 THEN
          HAS=4:goto birinci
          else
          gosub MODSEC
         endif
         pause 200
         
Birinci: SELECT CASE has
'----------bölücüsüz ölçüm--- Mode=0-------0 Hz - 65 KHz.----------------------
         CASE 0
         gosub binms
         Lcdout $FE,$80,"0-65 KHz : MOD=",#has
         if frekans<1000 then
         Lcdout $FE,$C0,"Fre:",#frekans," Hz        "
         gosub tus
         goto ATLA
         endif 
         sayac=frekans/1000:Toplam=(frekans//1000)
         Lcdout $FE,$80,"0-65 KHz : MOD=",#has
         Lcdout $FE,$C0,"Fre:",#sayac,".",dec3 Toplam," Hz    "
         GOSUB TUS
        ' pause 500
         goto ATLA
'------------modların sonu ----------------------------------------------------
          case 5                           
          HAS=0:GOTO START   
          END SELECT
          Z=0
          GOTO START
'                   
TUS:      if PortB.3=1 then
          IF Z=1 THEN CIK
          has=has+1:pause 1
          IF has=5 THEN has=0
          Z=1
          RETURN
          ENDIF
          Z=0             
CIK:      RETURN
'--------------------------------MODSEC-----------------------------------------
MODSEC:  'pause 5:gosub olc':return
         pause 100
'         if frekans>340 then
'           has=4:RETURN
'         endif
'         if (frekans>43) and(frekans<217) then
'           has=3:RETURN
'         endif   
         gosub birms
         if Frekans<66 then has=0
'         IF frekans >50000 THEN HAS=4 
         return
         
         OLC:
   asm
    movlw 0x01
    movwf _SureL
movlw 0x03
movwf _SureH
delay_0
    btfss  portb,6
    goto   tamamolc
    decfsz _SureL, f
    goto $+3
decfsz _SureH, f
goto Delay_0
Goto    son 
tamamolc
    call   zaman
    movlw 0x01
    movwf _SureL
movlw 0x01
movwf _SureH
Delay_1
decfsz _SureL, f
goto $+2
decfsz _SureH, f
goto Delay_1
goto $+1
    Goto    son 
zaman
    bcf  STATUS,RP0
    bcf  STATUS,RP1
    clrf TMR1L
    clrf TMR1H
    movlw  7     
    movwf  T1CON
    return
    endasm
Binms:
ASM
    movlw 0x20    ;19 idi
movwf _SureL   
movlw 0x80    ;74 idi
movwf _SureH   
movlw 0x06
movwf _Counter 
delay_2
    btfsc   portb,6
    goto tamambin
    decfsz _SureL, f
goto delay_2
decfsz _SureH, f
goto $+2
decfsz _Counter, f
goto Delay_2
goto son
tamambin   
    call    zaman
    movlw 0x19    ;19 idi
movwf _SureL   
movlw 0x74    ;74 idi
movwf _SureH   
movlw 0x06
movwf _Counter 
Delay_3
decfsz _SureL, f
goto $+2
decfsz _SureH, f
goto $+2
decfsz _Counter, f
goto Delay_3
    Goto son
    endasm
   
Yuzms:
    ASM
    movlw 0x4e       ;4e idi
movwf _SureL
movlw 0xCa       ;c4 idi
movwf _SureH   
Delay_4
    btfsc   portb,6
    goto tamamyuz   
decfsz _SureL, f
goto delay_4
decfsz _SureH, f
goto $+2 
    goto son
tamamyuz 
    movlw 0x4f       ;4e idi
movwf _SureL
movlw 0xC4       ;c4 idi
movwf _SureH
    call   zaman
       
Delay_5
decfsz _SureL, f
goto $+2
decfsz _SureH, f
goto Delay_5
goto $+1
    Goto    Son
    endasm
   
Onms:
    asm
    movlw 0x86
movwf _SureL 
movlw 0x20   
movwf _SureH 
Delay_6
    btfsc   portb,6
    goto   tamamon
decfsz _SureL, f
goto delay_6
decfsz _SureH, f
goto $+2
goto   son
Tamamon
    movlw 0x87
movwf _SureL 
movlw 0x14   
movwf _SureH
    call    zaman
Delay_7
decfsz _SureL, f
goto $+2
decfsz _SureH, f
goto Delay_7
goto $+1
goto   son
endasm
Birms:
    ASM
    movlw 0xf2
    movwf _SureL
movlw 0x04
movwf _SureH
Delay_8
    btfsc   portb,6
    goto    tamambir   
decfsz _SureL, f
goto delay_8
decfsz _SureH, f
goto $+2
goto son   
tamambir   
    call     zaman
    movlw 0xf2
    movwf _SureL
movlw 0x02
movwf _SureH

Delay_9
decfsz _SureL, f
goto $+2
decfsz _SureH, f
goto Delay_9
goto $+1
son 
    nop
    movlw  6   
    movwf  T1CON
    movf TMR1L,0
    movwf _FrekansL
    movf TMR1H,0
    movwf _FrekansH
endasm
RETURN
END

MB_77

#59
bu mesaj tarafımdan silinmiştir.

Powered by EzPortal