Frekans okuma

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

Oracle1

usta şimdi o yaptığın 53 hz ile led yakma koduna 0-500hz bir frekans metre ekleyemezz miyz zaten lcd fonksiyonlarını ekledik aynı komparator portundan 0-500hz frekans ölçmek istiyorum.

Oracle1

#61
Usta ben anladığım kadarıyla bir ekleme yaptım hatalarımı düzeltirsen çok sevenirim




DEFINE  LCD_DREG     PORTA
DEFINE  LCD_DBIT     0
DEFINE  LCD_RSREG    PORTB
DEFINE  LCD_RSBIT    2
define  LCD_RWREG    PORTB
DEFINE  LCD_RWBIT    1
DEFINE  LCD_EREG     PORTB
DEFINE  LCD_EBIT     0
DEFINE  LCD_BITS     4
DEFINE  LCD_LINES    2
DEFINE LCD_COMMANDUS 4000
DEFINE LCD_DATAUS 250




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

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.








low PORTB.1
 
'-------------------------------------------------------------------------------
Frekans     var word
FrekansL    var Frekans.byte0
FrekansH    var Frekans.byte1
sure     VAR WORD
sureL    var SURE.Byte0
sureH    var SURE.Byte1

tm var word
bay var byte

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
'------------------------------------------------------------------------------- 
  Z=0     
  CMCON=7
  has=0:ilk=0
  lcdout $FE,1
  lcdout "***EROL ERDAL***"
  lcdout $FE,$C0,"**FREKANSMETRE**":pause 300

'******************************* 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
'------------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
         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>19215 then   '26hz'e simülasyonla 19245 bulduk +-30 tolerans verdik.
if tm<19275 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

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

#62
bu mesaj tarafımdan silinmiştir.

MB_77

#63
bu mesaj tarafımdan silinmiştir.

Oracle1

Aslında usta benim size yaptırmak gibi bir amacım yoktu sadece şöyle bir mantık da yardımcı olmanızı istiyorum ete hocamın frekans metre çalışması biraz karşıtı ekleyemedim ama sağolun siz yapmışsınız ginede teşşekkür ederim

MB_77

#65
bu mesaj tarafımdan silinmiştir.

Powered by EzPortal