12f675 adc ve seri iletişim

Başlatan demorgan, 07 Aralık 2011, 00:21:51

demorgan

Devreyi İsiste denediğimde sorunsuz çalıştı fakat board üzerinde bir türlü çalıştıramadım.Sorun yazılımsal bi eksiklikte mi yoksa kurduğum devrede mi bi sıkıntı var merak ediyorum o yüzden yazılımıma bi göz atarsanız sevinirim.

Verici;

Device=12F675
DEFINE OSCCAL_1K 1         
  Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_OFF, BODEN_OFF, CP_OFF, MCLRE_OFF
'***************************************************************************
Declare Adin_Res   10
Declare Adin_Tad   FRC         
Declare Adin_Stime   50
'*****************************************************************************
TRISIO=%000001
ANSEL.0=1
ANSEL.1=0
ANSEL.2=0
ANSEL.3=0
ADCON0.7=1
ADCON0.6=0
ADCON0.3=0
ADCON0.2=0
GPIO=0
'**********************************************************************************
Dim ADC As Byte
ADC=0
'**********************************************************************************
OKU:
ADIn 0,ADC
ADC=(ADC*/500)>>2
GoTo GONDER
GONDER:
SerOut GPIO.1,2400,[250,ADC]
SerOut GPIO.1,2400,[250,ADC]
SerOut GPIO.1,2400,[250,ADC]
GoTo OKU
End
'**************************************************************************************


Alıcı;
Device = 16F628A     
All_Digital TRUE
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_OFF, BODEN_OFF, LVP_OFF, MCLRE_OFF,CP_OFF
Xtal=4
'**************************************************************************************'
Declare LCD_DTPin PORTB.4   'DATA girişi PORTB'nin 4. ucundan başlayacak
Declare LCD_ENPin PORTB.0   'LCD'nin ENable ucu
Declare LCD_RSPin PORTB.1   'LCD'nin Register Select ucu
Declare LCD_Interface 4   'LCD veri yolu 4 bit olacak
Declare LCD_Lines 2      'LCD 2 satırdan oluşuyor
Cls
'************************************************************************************************'   
TRISA=%00001
TRISB=0
'*****************************************************************************************************
Dim SICAKLIK As Byte
SICAKLIK=0
Dim K As Byte
K=0
Print $FE,1
'*******************************************************************************************************

BASLA:
Print At 1,1,"SICAKLIK:",Dec3 SICAKLIK," C"

SerIn PORTA.0,2400,[Wait(250),SICAKLIK]

Print At 1,1,"SICAKLIK:",Dec3 SICAKLIK," C"
GoTo BASLA
End

                 
Şimdiden teşekkürler arkadaşlar.

pwm.c

ilk gözüme çarpan hata ADC dönüşümünü 10 bit olarak ayarlamışın ama sonucu 8 bitlik Byte değişkenine kaydetmişin.
seri iletişim yaparken picin dahili osilatörünü kullanmanı tavsiye etmem. 4mhz kristal bağlayıp öyle dene. 12f serisi piclerde dahili osilatör için kalibrasyon yapman gerekiyor.
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

demorgan

#2
Haklısınız kristal ile tekrardan denicem teşekkür ederim.

Düzeltme:
kristallede denedim beceremedim aynı programı 16f877a ya göre düzenleyip çalıştırdım rf ve adc sorunsuz şekilde çalıştı.adc işlemini 12f675 entegresiyle yapabiliyorum  fakat gönderemiyorum sorunum burda acaba sigortalarda mı bi yanlış yapıyorum.

karbal656

merhaba 12f675 te ADC kullanmak için ADin komutu kullanılmıyor bildiğim kadarıyla proton helpinde örnek program var bir incele istersen kod aşağıda:
Device = 12F675
 XTAL = 4
        
 SERIAL_BAUD = 9600 
 RSOUT_PIN = GPIO.0
 RSOUT_MODE = TRUE
 RSOUT_PACE = 10
        
'-------[DEFINE SOME ALIAS'S TO ADC REGISTERS]---------------------------

' ANSEL register's bits
 Symbol ANS0 = ANSEL.0
 Symbol ANS1 = ANSEL.1
 Symbol ANS2 = ANSEL.2
 Symbol ANS3 = ANSEL.3
 Symbol ADCS0 = ANSEL.4  ' ADC conversion clock select bit
 Symbol ADCS1 = ANSEL.5  ' ADC conversion clock select bit        
 Symbol ADCS2 = ANSEL.6  ' ADC conversion clock select bit       
  
' ADCON0 register's bits  
 Symbol ADFM = ADCON0.7
 Symbol VCFG = ADCON0.6
 Symbol CHS2 = ADCON0.4  ' ADC channel select bit
 Symbol CHS1 = ADCON0.3  ' ADC channel select bit
 Symbol CHS0 = ADCON0.2  ' ADC channel select bit
 Symbol GO_DONE = ADCON0.1  ' ADC Conversion status/ plus enable conversion-bit
 Symbol ADON = ADCON0.0  ' ADC Enable bit: 1 = enabled, 0 = disabled.
        
'-------[ASSIGN A VARIABLE FOR THE ADC RESULT]---------------------------
        
 Dim AD_RESULT as ADRESL.WORD ' Convert the ADRESL register into a WORD variable 

'-------[INITIALISE THE PICMICRO]----------------------------------------
 Delayms 500    ' Wait for the PICmicro to stabilise
 Goto OVER_ADC_SUBS   ' Jump over the subroutines
        
'-------[START AN ADC CONVERSION]----------------------------------------
GET_ADC:
 ADON = 1     ' Enable the ADC
 Delayus 50                ' Wait for sample/hold capacitors to charge
 GO_DONE = 1              ' Start conversion
 While GO_DONE = 1 : Wend  ' Poll the GO_DONE flag for completion of conversion
 ADON = 0     ' Disable the ADC, to save power
 Return
          
'-------[INITIALISE THE ADC REGISTERS]----------------------------------
' Standard procedures for setting up the ADC 
OVER_ADC_SUBS:                
 TRISIO = %11111111   ' All pins set for input
        
 ADCS0 = 1    ' \
 ADCS1 = 1    '   Setup ADC's clock for FRC
 ADCS2 = 0    ' /
        
 VCFG = 0     ' VREF is set to VDD of PICmicro
 ADFM = 1     ' Right justify the ADC result
        
 ANS0 = 0     ' Set AN0 (GPIO.0) as Digital input
 ANS1 = 0     ' Set AN1 (GPIO.1) as Digital input
 ANS2 = 1     ' Set AN2 (GPIO.2) as Analogue input
 ANS3 = 1     ' Set AN3 (GPIO.3) as Analogue input
        
'-------[MAIN PROGRAM LOOP STARTS HERE]----------------------------------
' Perform ADC conversions and display the result serially
       
 While 1 = 1     ' Create an infinite loop
  ADCON0 = ADCON0 | (2 << 2)   ' Select the channel to read
  Gosub GET_ADC    ' Perform an ADC conversion
  Rsout "CHANNEL 2 = " , DEC AD_RESULT,13  ' Display the result serially
  Delayms 500     ' Wait for half a second
 Wend      ' Do another conversion

F.T

Device = 12F675
Config CPD_OFF, CP_OFF,BODEN_ON,MCLRE_Off,PWRTE_ON,WDT_Off,INTRC_OSC_NOCLKOUT                                                     
XTAL = 4              ;ÇALIŞMA FREKANSI
#DEFINE ALL_DIGITAL = TRUE  ;TÜM GİRİŞLER GERÇEK DİJİTAL
Declare ADIN_RES 10       ' 10-bit result required
Declare ADIN_TAD FRC      ' RC OSC chosen
Declare ADIN_STIME 50     ' Allow 50us sample time
'***********************************************************************************
TRISIO     = %00000001  ;TRISIO İLE GİRİS ÇIKIŞLAR AYARLANIR
ANSEL      = %00000001  ;1 NOLU GİRİŞ ANALOG OLARAK AYARLANIR
ADCON0     = %10000000  ;HAM KONTROL REG,7 NOLU BİT 1  HAM OKUMA 10 BİT OLUR
CMCON      = 7          ;KOMPERATORLER KAPATILIR   
WPU        = %00000000  ;PULLUPLAR DEVREDE 1 OLANLAR, 0 LAR DEVRE DIŞI
Hakk şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

demorgan

#5
Dahili osc kullanmadım ve sorunu çözdüm arkadaşlar.Daha önceki denememde sadece 12f675 e kristal bağlamıştım ondan dolayı çalışmamış.Hem alıcıda hemde vericide kristal kullandım gayet güzel haberleşiyorlar.