16F628 - Comparator kullanimi ile VOLTMETER yapmak

Başlatan fsan, 08 Ocak 2004, 02:09:03

fsan

Alıntı Yapif the level of your

input is too low to successfully be read by the PIC (eg your input is going 0-1v rather than 0-5v), the Comparator can be used to condition the input and bring it up to a full 0-5v swing for the

PIC’s logic to process.
arkadaslar, 16F628 de comparator ile ugrastinizmi hic?
Yukarida anlatildigi gibi PICin giris sinyallleri herzaman 0-5v

arasinda olmuyor, bazen giristeki sinyal 0-1v arasinda olabiliyor, anladigim kadariyla bu durumda comparatorlari devreye sokarak giristeki sinyalin 0-5v gibi algilanmasi saglaniyor mus.  Bu konuda

yaniliyormuyum?
Bu mümkünse, mesela girise 1 volt verince PICin bunu HIGH input olarak algilamasi nasil saglanir ? (PIC  bu duruma nasil CONFIG. edilir?)
16F628 nin pdf

dosyasini inceledim ama pek bir sey anlayamadim  :?

Sevgiler, saygilar...
Fikret.

ete

Fikret Bey,

Ben 628 ile komparatör kullandım. Kısaca açıklama şöyle;
-

Koparatörü aktif hale getir
 COMCON=3
 OPTIONREG.7=0
- RA.1 ve RA.2 yi komparatör girişi olarak ayarla.
  TRISA=%00000110
- Sonuç olarak CMCON.7 bitini

kontrol et
  Şayet voltaj olarak RA.1 > RA.2 ise CMCON.7=0 oluyor
  Şayet Voltaj olarak RA.2 > RA.1 ise CMCON.7=1 oluyor.

sanırım bu şekilde sorun çözülüyor.

Tabiiki girişlerden birisine sabit bir ref voltajı verirsin ve kincisini buna göre kontrol edersin.

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

cozturk

Bu konuda melabs sitesinde çok yararlı örnekler var. Açıklamaları vs. gayet yeterli. Bir örnek(düşük pil

göstergesi):

Making all these decisions and calculations was the hard bit (honest)... the easy bit is the programming...



'
' Program BatLo
' ============
' Embedded Software Version 1.00
' Target Processor PIC16F628-04/P
' Target PCB BB-001
'

Created 09/04/02
' Last Updated 09/04/02
' Written by Melanie Newman
'
' Melanies very complicated Battery Low Indicator
'

'
' Device

Programming Options
' --------------------------
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT
' System Clock Options
@ DEVICE pic16F628, WDT_ON
'

Watchdog Timer
@ DEVICE pic16F628, PWRT_ON
' Power-On Timer
@ DEVICE pic16F628, MCLR_OFF
' Master Clear Options (Internal)
@ DEVICE

pic16F628, BOD_ON
' Brown-Out Detect
@ DEVICE pic16F628, LVP_OFF
' Low-Voltage Programming
@ DEVICE pic16F628, CPD_OFF
' Data Memory

Code Protect
@ DEVICE pic16F628, PROTECT_OFF
' Program Code Protection

'
' Hardware Assignments
' --------------------
BatVal var CMCON.7


' Read Comparator 2 for Battery Low
' Port RA1 has +VBatt Input
BatLoLED var PORTB.7
' Port for Battery Low LED

'
' Start Program
'

============

'
' Setup Hardware
' --------------
'
' Comparator Control
' ------------------
CMCON=%00100101
' CM7 C2OUT

Comparator Output 2 (Read Only)
' CM6 C1OUT Comparator Output 1 (Read Only)
' CM5 C2INV Comparator 2 Output Inversion
' the way I'm driving my LED I need

inversion
' so C2OUT goes Low when Battery is Low
' CM4 C1INV Comparator 1 Output Inversion
' CM3 Comparator Input Switch
' not relevant for Comparator

Mode 101
' CM2 ) refer to Datasheet figure 9-1
' CM1 ) Mode 101 for Single Comparator C2
' CM0 ) Comparator C1 Disabled
'
' Voltage Reference Control


' -------------------------
VRCON=%11101100
' 7 VREN Voltage Reference Enable (1=on)
' 6 VRON VREF Output Enable
' 1=Connects output of VREF to RA2


' This is real convenient so we'll use it
' 5 VRR VREF Range Selection (1=Low Range)
' 4 Unused (0)
' VR3 )
' VR2 ) Set for Reference Voltage
' VR1

) 1100 sets 2.5v in Low Range
' VR0 )
'
Pauseus 10
' Delay to allow for VREF to settle
' see datasheet section 11-1
'
' And the Usual Stuff
'

-------------------
TRISA=%11111111 ' Set All Inputs
TRISB=%00000000 ' Set All Outputs

'
' Actual Program
' --------------
BatLoLoop:


BatLoLED=BatVal
' You better believe it... just ONE line of code!
Goto BatLoLoop

'
End

fsan

Alıntı YapBatLoLED=BatVal
hmm, burada cikisa bagli LED "ete" arkadasin dedigi gibi

CMCON.7 nin durumuna göre (1/0) yanip sönüyor.
Devreye birde VRCON girmis, sanirim bununla distan hicbir baglanti yapmadan comparator  girislerinden birisine istedigimiz (0-5V ?)

referans gerilimini verebiliyoruz ve PIC  kullandigimiz giristeki gerilimi bu Ref. degerle karsilastirip ona göre CMCON.7 yi 0 veya 1 yapiyor.   Bunu isis'te bir denemek lazim  8)

yardim

icin tsk. arkadaslar
bu comparator olayi sandigim gibi ise baya ise yarayabilir.

cozturk

Ben ISISte denemiştim. fakat baazı saçma şeyler oluyor. dahili vrefi sabit tutarak giriş gerilimini uygularsak >= durumunda

bir pindeki ledi yakabiliyoruz mesela.  Fakat giriş sabit kalarak vrefi dahili olarak değiştirerek  bunu gerçekleştiremedim.  Belki de simülasyon sorunu olabilir. Bu yöntemle voltmetre yapacaktım. Fakat

bir de ne göreyim. Zaten böyle bir app. note var. Yani komparatörden yalancı adc yapılıyor. delta >sigma  dönüşümü diye geçiyor. an700

XNHCX

Aşağıdaki sitede de Comparator kullanımına değinilmiş.Ek olarak bunlara da bakın

arkadaşlar...

http://www.rentron.com/PIC16F628.htm


fsan

Alıntı yapılan: "cozturk"Fakat giriş sabit kalarak vrefi dahili olarak değiştirerek bunu gerçekleştiremedim. Belki de

simülasyon sorunu olabilir. Bu yöntemle voltmetre yapacaktım.
Arkadaslar birazda ben ugrastim ortaya böyle birsey cikti. Gristeki gerilimi POT ile degistirince LCD

displayde degisen gerilimi birazcik farkli da olsa görebiliyoruz.
Giristeki gerilimin hesaplanmasini 16F628 pdf dosyasindan okumustum bilmiyorum tam dogru

yapabildimmi.

dsn, bas ve hex dosyalar

burada:
http://home.no/fsan/projects/Diverse/F628_comp_demo/
'****************************************************************
'*  Name    : 

F628-comp.bas                                     *
'*  Author  : F.San                                             *
'*  Date    : 19.01.2004                                        *
'*  Notes   : 

Comparators/Volt-meter demo using the PIC-16F628  *
'****************************************************************
@ device pic16F628, XT_OSC, wdt_off, pwrt_on, mclr_on, 

lvp_off, protect_off

                        ' Change these to match your LCD 
DEFINE  LCD_DREG PORTB  ' LCD Data Port
DEFINE  LCD_DBIT 4	   ' Starting Data 

Bit
DEFINE  LCD_RSREG PORTB ' Register Select Port
DEFINE  LCD_RSBIT 1	   ' Register Select Bit
DEFINE  LCD_EREG PORTB  ' Enable Port
DEFINE  

LCD_EBIT 0	   ' Enable Bit
DEFINE  LCD_BITS 4	   ' Data Bus Size
DEFINE  LCD_LINES 2	   ' Number of Lines on LCD
Pause 200    
LCDout 

$FE,2,"VOLTMETER DEMO"

vstep             var byte
save_vstep        var byte
input_val         var word
CMCON7_changed    var bit 
 
CMCON = 

%10100101 ' Comparator Control 
VRCON = %11100000 ' Voltage Reference Control 

TRISA = %11111111 ' Set All Inputs 
TRISB = %00000000 ' Set All Outputs 



Main: 
   gosub Scan_Vinput  
Goto Main 
 
Scan_Vinput:
   CMCON7_changed = 0
   vstep = 0
   while (not 

CMCON7_changed) and (vstep < 16)      
      vstep = vstep + 1
      VRCON.6 = 0
      VRCON.0 = vstep.0 
      VRCON.1 = vstep.1 
      VRCON.2 

= vstep.2 
      VRCON.3 = vstep.3 
      VRCON.6 = 1
      pause 1
      if CMCON.7 = 0 then 
         CMCON.7 = 1
         CMCON7_changed = 1 
         

save_vstep = vstep
      endif
   wend
   if CMCON7_changed and (CMCON.7 = 0) then gosub Display
return

Display:                              
      

input_Val = (100 * save_vstep / 24) * 5 
      LCDout $FE,$C0,Dec (input_Val / 100),".",Dec2 input_Val," Volts"
return 



End

cozturk

Sevgili Üstad, eline sağlık. Çok güzel olmuş.
proje ISIS 6.2 SP5 ile çalışmadı. Bu projenin Daha sonraki versiyonda

yapıldığını söylüyor.  Hangi versiyon ?

fsan

-------------------------------------------------------------------------------------

cozturk

6.3 te section olarak kaydedersen 6.2den çağırabiliyorsun.  Fakat DSN olarak kaydedersen olmuyor.

fsan

cozturk,
sagolasin arkadasim bunuda ögrenmis olduk sayende.

Not:
Dosyalari yeniden upload ettim.

sezgin05

FSAN usta bu devre çıkışını 7segment displeye nasıl verebilirim ? iki veya üç digit olarak.
Teşekkürler.

fsan


sezgin05

F.SAN usta; göründüğü kadar zor değilmiş...teşekkürler. :idea: