devir sayacı

Başlatan ycmy, 14 Haziran 2007, 22:45:09

ycmy

arkadaşalar acele bir motorun devrini ölçebilecek devreye ihtiyacım var girişi hall sensör veya optik sensör olabilir  çıkışta ise display veya lcd picin ne olduğunun da önemi yok kendim uğraştım ama yapamayacağımı anladım ve p.tesi teslim etmezsem dönem uzatacam yardımcı olursanız sevinirim

Chan86

Sayın ycmy arkadaşım sitemizde aratırsan hazır yapılmış ve denemiş takometreler var sana yardımcı olur eminim.Umarım bu sana yardımcı olur dönem uzatmazsın...

İyi çalışmalar...


ycmy

Alıntı yapılan: "muratdu"http://www.josepino.com/pic_projects/index.pl?tachometer2.jpc
teşekkür ederim ama ben bu devreyi daha önce isis de kurdum çalışmadı sen çalıştırabildin mi acaba ben yanlış bişey mi yaptım bir de bunun sadece hex kodu var bana asm veya c kodu da lazım çünkü kendim ona bakıp programı anlamak istiyorum

ete

Bir takometre yapmak dünyanın en kolay işlerinden biri. İşin donanım kısmına bakarsak ya bir fotosel yada bir hall sensör kullanarak vede uygun bir düzenek yardımı ile dönen cismin her turunda ondan bir çıkış almak zor olmasa gerek. Zaten işin bu kısmını yapamayan bu tip işlerede hiç kalkışmasın. Elektroniğin Ana okul dönemi devreleri bunlar. Bir mıknatıs karşısına koyulan hall sensör, out bacağından Low verir. Out bacağı normalde pull up lı durursa her mıknatısı görüşünde sana bir pals verir. Yada bir infrared ışık kaynağı ile bir foto transistör arasına cisim girerse yada infrared kaynağından çıkan kızılötesi ışık bir cisime vurup geri yansırsa ve bu ışığı tekrar bir foto transistör ile alırsan sana bir başka pals üreteci olur. Burada beyaz renklerin ışığı kolay yansıtıp koyu (siyah rengin çok az yansıttığını göz önüne alarak devri ölçülecek nesnenin bir kısmını beyaz bir kısmını siyaha boyarsan sana her tur başına bir pals üretir.
İşin program kısmında ise Pic'in en güzel yeteneklerinden birini kullanmak gerekir. Buda TMR0 sayacının dışarıdan gelen sinyalleri sayabilmesi özelliğidir.
PortA.4 pininden yapılacak bu giriş için pic registerleri  ayarlanarak bu özellik açılır.
Geriye işin matematiği kalıyor.
Devir nedir diye soralım. Dönen nesnelerin 1 dakikadaki tur sayısıdır.
Devir ölçerken 1 dakika tutup turları saymaya kalkarsak çok bekleriz. Bu nedenle örnekleme denilen bir işlem vardır. Daha kısa sürede bir zaman tutulur ve bu 1 dakikaya orantılanır. Örnek vermek gerekir ise;
1 sn= 1000 ms dir. O halde ben 100 ms lik bir zaman içinde gelen palsleri sayarsam ve elde ettiğim değeri 10 ile çarparsam 1 sn içindeki tur sayısını (yaklaşık) olarak bulmuş olurum. Bunu dakika bazına getirmek için ise 60 ile çarparım. Sonuçta devir/dak lık bir değer bulmuş olurum.
Daha iyi sonuçlar almak için 1 sn lik süreler tutulmalıdır. Dolayısıyla elde edilen sonucu 60 ile çarparak dev/dak cinsinden tur bulunmuş olacaktır.
Yapılacak iş;
- TMR0=0 yani TMR0'ı sıfırla
- 1000 ms lik süre tut (Pause 1000)
- TUR=TMR0 eşitliği ile TMR0 değerini TUR değişkenine aktar.
- Devir=TUR * 60  , dev/dak cinsinden hesabını yap.
- Götür ekrana yaz

Hepsi bu kadar. Zormu bu iş. Bence çok kolay.
Bir kaideyi unutmayın her iş bilen için kolaydır. O halde ne yapmak lazım ? Bilmek lazım bilemk içinde birazcık çalışıp öğrenmek lazım hepsi bu.

Kolay Gelsin
Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

ycmy

@ete
hocam teşekkür ederim ben bu projeyle ilgili baya çalışma yaptım herşey hazır elimde soınucum var ama ben bunu çıkışta gösteremedim display ile çıkış alacaktım fakat 16 bitlik olan sonucumu basamaklarına ayırıp çıkışa aktaramadım lcd ile yapmayı düşündüm bu seferde lcd sürmek için bi sürü komut öğrenmek lazım daha doğrusu lcd kullanmayı bilmek lazım (komut gönder data gönder ayrı rütinleri gibi) şu an onun üzerine çalışıyorum yani hiç uğraşmadım diyemem ama şuan acil olduğu için böyle birşey istedim çünkü bu saatten sonra onları öğrenip yetiştiremem şuan hem buna uğraşıyorum hem de finallere çalışıyorum benim zaten bu mesleği yapmam için pic öğrenmem şart bunu biliyorum bunun için çalışıyorum neyse çok uzattım sanırım yinede yardımlarınız için teşekkür ederim

bs


muratdu

Alıntı yapılan: "ycmy"
Alıntı yapılan: "muratdu"http://www.josepino.com/pic_projects/index.pl?tachometer2.jpc
teşekkür ederim ama ben bu devreyi daha önce isis de kurdum çalışmadı sen çalıştırabildin mi acaba ben yanlış bişey mi yaptım bir de bunun sadece hex kodu var bana asm veya c kodu da lazım çünkü kendim ona bakıp programı anlamak istiyorum

Evet yaptım, güzel çalıştı. Sensör olrak CNY 70 kullandım.Ama sadec hex kodu var maalesef..

stlg

Sevgili kardesim

Birara boyle birsey kullanmıstım

;*********** BU PROGRAM 16 BİTLİK VERİYİ 3 ADET REGİSTER CIKISINDAN BCD YE DONDURUR ********

OLC_CEVİR

   MOVLW   0X19                                          ;ornek
   MOVWF   OLC_ALTBYTE
   MOVLW   0X05                                          ;ornek
   MOVWF   OLC_USTBYTE

   CALL   B2_BCD
   
   MOVF   R2,W         ;
   MOVWF   DİGİTA
   MOVF   R1,W         ;
   MOVWF   DİGİTB
   MOVF   R0,W         ;
   MOVWF   DİGİTC         ;
   RETURN

B2_BCD

   BCF   STATUS,0
   MOVLW    .16
   MOVWF    COUNT
   CLRF    R0
   CLRF    R1
   CLRF    R2

LOOP16

   RLF    OLC_ALTBYTE, F
   RLF    OLC_USTBYTE, F
   RLF    R2, F
   RLF    R1, F
   RLF    R0, F

   DECFSZ    COUNT, F
   GOTO    ADJDEC
   RETLW    0


ADJDEC   

   MOVLW    R2
   MOVWF    FSR
   CALL    ADJBCD

   MOVLW    R1
   MOVWF    FSR
   CALL    ADJBCD

   MOVLW    R0
   MOVWF    FSR
   CALL    ADJBCD

   GOTO    LOOP16

ADJBCD    

   MOVLW    3
   ADDWF    0,W
   MOVWF    TEMP
   BTFSC    TEMP,3
   MOVWF    0
   MOVLW    30
   ADDWF    0,W
   MOVWF    TEMP
   BTFSC    TEMP,7
   MOVWF    0
   RETLW    0

R2-R1-R0 Registerlerindeki degerleri 4 er bit seklinde displeye gonder
ALLAHA EMANET OLUNUZ Hoştur bana senden gelen,  Ya gonca gül yahut diken,  Ya kaftandır yahut kefen,  Kereminde hoş lütfunda hoş.

ycmy

@stlg
ilgin için teşekkür ederim bu program iişme yarar sanırım bişey sorcam bu programda sonucumuz 3 basamaklı oluyo sanırım ben bu program da bir de R4 tanımlasam ve örneğin
               MOVLW    R4
   MOVWF    FSR
   CALL    ADJBCD

şeklinde eklesem olur mu böyle yaptığım zaman
ADJBCD

   MOVLW    3
   ADDWF    0,W
   MOVWF    TEMP
   BTFSC    TEMP,3
   MOVWF    0
   MOVLW    30
   ADDWF    0,W
   MOVWF    TEMP
   BTFSC    TEMP,7
   MOVWF    0
   RETLW    0
kısmına 3 yerine 4 değeri mi yazmam lazım bu konuda aydınlatırsan sevinirim birde burda kullandığın DIGIT ifadeleri ne işe yarıyo onu anlamadım biz direk R1 R2 R3 ü çıkışa vermeyecek miyiz neden bunları DIGIT in içine atıyoruz
biraz çok soru sordum sanırım kusura bakma ama öğrenmeye çalışıyorum  :D

ycmy

hocalarım öncelikle hepinize mrb  sizlerden bir ricam var yazdığım programı inceleyip bana hatalarımı söyleyebilir misiniz? Öncelikle program ete hocamın anlattığı gibi bir devir ölçüyo aynı mantık TMR0*60 deviri veriyo data çıkışları PORTB nin 4 bitinden displayleri ise PORTA nın ilk dört bitine bağlı transistörleri sürerek seçiyorum buna göre sizlerden de aldığım örnek programların yardımıyla bişeyler yaptım inceleyip yardımcı olursanız çok sevinirim
işte program:
   LIST   P=16F84A
   INCLUDE "P16F84A.INC"
   __config(_CP_OFF & _PWRTE_OFF & _XT_OSC & _WDT_OFF & _BODEN_OFF & _LVP_OFF)
   
   
   CBLOCK H'0C'
   I
   d1   
   d2   
   d3
   R1
   R2
   R0
   COUNT
   TEMP
   REG20
   REG21
   REG22
   REG23
   REG24
   REG25
   REG26
   REG27
   REG28
   SONUCH
   SONUCL
   CARPIH
   CARPIL
   CARPANH
   CARPANL
   DIGIT
   
   ENDC
   
   CLRF   PORTB
   BSF   STATUS,5
   MOVLW   h'F0'
   MOVWF   TRISA
   CLRF   TRISB
   MOVLW   b'00110000'
   MOVWF   OPTION_REG
   BCF   STATUS,5
   CLRF   PORTB
BASLA
   CLRF   TMR0
   CALL   GECIKME
   CALL   GECIKME
   ORG   0X000
     GOTO      MAIN
     ORG      0X004
     CLRF      INTCON
     RETFIE
MAIN
     CLRF      SONUCH
     CLRF      SONUCL

   MOVLW   D'00'
     MOVWF   CARPIH        
     MOVF    TMR0,W
     MOVWF   CARPIL  
     MOVLW   D'00'
     MOVWF   CARPANH
     MOVLW   D'60'
     MOVWF   CARPANL
     CALL    CARPMAK  
AYIR
   CALL    B2_BCD
   
   MOVLW   DIGIT
   MOVF    R2,W  
   MOVWF    DIGIT
   MOVF    R1,W  
   MOVWF    DIGIT+1
   MOVF    R0,W  
   MOVWF    DIGIT+2
   CALL   YAZ
   CALL   GECIKME
   CALL   GECIKME
   CALL   GECIKME
   CALL   GECIKME
   GOTO   BASLA

B2_BCD

   BCF    STATUS,0
   MOVLW    .16
   MOVWF    COUNT
   CLRF    R0
   CLRF    R1
   CLRF    R2
   
LOOP16
   
   RLF    SONUCL, F
   RLF    SONUCH, F
   RLF    R2, F
   RLF    R1, F
   RLF    R0, F
   
   DECFSZ    COUNT, F
   GOTO    ADJDEC
   RETLW    0


ADJDEC

   MOVLW    R2
   MOVWF    FSR
   CALL    ADJBCD
   
   MOVLW    R1
   MOVWF    FSR
   CALL    ADJBCD

   MOVLW    R0
   MOVWF   FSR
   CALL    ADJBCD
      
   GOTO    LOOP16

ADJBCD

   MOVLW    3
   ADDWF    0,W
   MOVWF    TEMP
   BTFSC    TEMP,3
   MOVWF    0
   MOVLW    30
   ADDWF    0,W
   MOVWF    TEMP
   BTFSC    TEMP,7
   MOVWF    0
   RETLW    0
YAZ
   MOVLW   3
   MOVWF   I
   MOVLW   DIGIT
   MOWVF   FSR
   MOVLW   b'11111110'
   MOVWF   PORTA
TARA   MOVF   INDF,W
   MOVWF   PORTB
   CALL   GECIKME
   INCF   FSR
   BSF   STATUS,C
   RLF   PORTA,F
   DECFSZ   I
   GOTO   TARA
   RETURN      
      
   CALL   GECIKME
   CALL   GECIKME
   CALL   GECIKME
   CALL   GECIKME
   GOTO   BASLA

CARPMAK
     MOVF      CARPIL,W
     MOVWF   REG26
     MOVF      CARPIH,W
     MOVWF   REG27
     MOVF      CARPANH,W
     MOVWF   REG23
     MOVF      CARPANL,W
     MOVWF   REG22
     CALL      CARPISLEM
     MOVWF   SONUCL
     MOVF      REG25,W
     MOVWF   SONUCH
     RETURN

CARPISLEM
     MOVLW   0X10
     MOVWF   REG28
     CLRF      REG21
     CLRF      REG20
CAR0
     RRF      REG27,F
     RRF      REG26,F
     BTFSS   STATUS,0
     GOTO      CAR1
     MOVF      REG22,W
     ADDWF   REG20,F
     MOVF      REG23,W
     BTFSC   STATUS,0
     INCFSZ  REG23,W
     ADDWF   REG21,F
CAR1
     RRF      REG21,F
     RRF      REG20,F
     RRF      REG25,F
     RRF      REG24,F
     DECFSZ  REG28,F
     GOTO      CAR0
     MOVF      REG24,W
     BCF      STATUS,7
     BCF      STATUS,6
     BCF      STATUS,5
   RETURN
   
   
GECIKME   
   MOVLW    h'F5'
   MOVWF   d1  
DONGU1
   MOVLW    h'FF'
   MOVWF    d2
DONGU2
   nop
   nop
   nop
   nop
   nop
   DECFSZ    d1,f
   GOTO    DONGU2
   DECFSZ    d2,f
   GOTO    DONGU1
   
   RETURN
     END




 şimdiden teşekkür ederim

stlg

Sevgili kardesim

Yukarda bahsettigim programda R0-R1-R2 yide kullanabilirsin yanlız burada bu registerleri 4 bitlik olarak ayırman gerekiyor istersen 5 digit displey surebilirsin bu 4 bitlik verileri bir tablo yardımıyla displey formatına cevirmelisin yoksa oldugu gibi displey cıkısına aktaramazsın senin displey surme mantıgına gore hallletmelisin yazdıgın programı proteusta bolum bolum yavas yavas simule et ozaman daha iyi anlayacaksın kolay gelsin
ALLAHA EMANET OLUNUZ Hoştur bana senden gelen,  Ya gonca gül yahut diken,  Ya kaftandır yahut kefen,  Kereminde hoş lütfunda hoş.

ycmy

arkadaşlar bir sorum olacak ben bu yazdığım programı hex e çeviremiyorum kaynak dosya 62 karakteri aşmammalı gibi bişey diyo (source file path may exceed 62 characters) acaba bu neden oluyo bi fikri olan var mı acaba çok fazla değişken tanımlamış olabilir miyim yardımcı olursanız sevinirim

KAZIMUGUR

Uzunca bir bilgisayar adın varsa,masaüstüne bir yerlere(doc...se..) kaydetti isen,kayıt dosyası adı uzunca ise...(hele birde türkçe karakterli ise)
En kısası : C\TEST gibi kısa bir dizin oluşturup çalışmalarını oraya kayıt et.Hatta bazı derleyiciler kurulum dosyası içerisinde istiyor.Bu durumlarda ben orada oluşturduğum dosyanın kısa yolunu masaüstüne atıp oradan çalışıyorum.

guillotine

Vallahi daha bugün hocaya proje olarak verdim  :)
pic basic kullanmayı biliyorsan kodları ve dosyayı yolluyorum umarım işini görür sensör olarak CNY70 optik sensörü kullanabilirsin (motora siyah yuvarlak bir cisim bağlarsın ve beyaz bir kısım bırakırsın)  7414 ile tersleyerek daha kararlı bi hâle getirebilirsin.(çizgi izleyen robotlarda oldugu gibi ..ama ben U harfi şeklindeki PS4005 i kullandım arasından geçme mantıgı ile...
___________________________________________________________
PIC BASIC KODLARI
trisd=255
trisb=0


DEFINE  LCD_DREG     PORTB  
DEFINE  LCD_DBIT     4          
DEFINE  LCD_RSREG    PORTB    
DEFINE  LCD_RSBIT    2        
DEFINE  LCD_EREG     PORTB  
DEFINE  LCD_EBIT     3          
DEFINE  LCD_BITS     4        
DEFINE  LCD_LINES    2
pause 250        
say var byte
say=0
pause 200


sayim:
lcdout $FE,1
lcdout $FE,2,"DEV/DK = ",dec5 (say*60)
lcdout $FE,$c0,"SN.deki TUR =",dec3 say
pause 10
count portd.4,1000,say
goto sayim
______________________________________________________


bütün olayı yapan count komutu :]  gelen lojik-1 degerlerini sayıyor ... Dev/Dk. yazan kısım tahminidir zaten kodlardanda anlarsın 1sn deki değer  60 ile çarpılıyor..
Umarım işine yarar...

DOWNLOAD