PIC16f887, osäker på inställningar för intern oscillator

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Anders_Peter
Inlägg: 66
Blev medlem: 24 juli 2008, 00:40:30
Ort: Skövde

PIC16f887, osäker på inställningar för intern oscillator

Inlägg av Anders_Peter »

Har bara kört på kristall tidigare men har ett projekt där kristall nog vore bra att slippa.
Skulle vilja ha kommentarer på dels om jag missat något för att köra den på 4MHz intern oscillator och även övriga kommentarer på koden.

Kod: Markera allt

;****************************************************************
;*********************** Processor-modell ***********************
;****************************************************************
;Se till att rätt processor är vald under Configure > Select device
		list 	  p=16F887		
		#include <p16f887.inc> 
;****************************************************************
;******************* Slut på processor-modell *******************
;****************************************************************

;****************************************************************
;******************** Stäng av varning **************************
;****************************************************************
		errorlevel -302 	;Register in operand not in bank 0.  Ensure that bank bits are correct.
;****************************************************************
;******************** Slut på stäng av varning ******************
;****************************************************************

;****************************************************************
;********************* Configurationsbitar **********************
;****************************************************************
 __CONFIG _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CP_OFF & _CPD_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
 __CONFIG _CONFIG2, _WRT_OFF & _BOR21V
;****************************************************************
;******************** Slut på configurationsbitar ***************
;****************************************************************

;****************************************************************
;******************* Uppstartsrutin efter Reset *****************
;****************************************************************
		org 	0x00		;Normal programkörning
		goto 	init		;Hoppa till första instruktionen i programmet
;****************************************************************
;************* Slut på uppstartsrutin efter Reset ***************
;****************************************************************

;*************************************************************************
;***************** Initiering av klocka och portar ***********************
;*************************************************************************
init	
		;Sätt processorhastighet till 4 MHz vid användning av intern oscillator
		BANKSEL	OSCCON			
		bcf		OSCCON,0			;SCS Klockans inställningar definieras av FOSC<2:0> från CONFIG1-registret	
		bcf		OSCCON,4			;IRCF<0> Välj intern oscillator-frekvens					
		bsf		OSCCON,5			;IRCF<1> Välj intern oscillator-frekvens		
		bsf		OSCCON,6			;IRCF<2> Välj intern oscillator-frekvens	
		
		;Nolla alla utgångar
		BANKSEL PORTA
		clrf	PORTA
		clrf	PORTB
		clrf	PORTC
		clrf	PORTD
		clrf	PORTE	

		BANKSEL TRISA              
      ;Riktningsregister port A
		movlw	b'00000000'
		movwf   TRISA

		;Riktningsregister port B      	
		movlw	b'00000000'
		movwf   TRISB

		;Riktningsregister port C
		movlw	b'00000000'
		movwf   TRISC

		;Riktningsregister port D
		movlw	b'00000000'
		movwf   TRISD
		
		;Riktningsregister port E
		;Port E är 4 bitar, bit 0-3
		;Bit 3 kan endast användas som ingång, i detta fall MCLR, master clear reset
		movlw	b'00001000'
		movwf   TRISE

		;Väljer om det är en digital eller analog ingång, 0 = digita1, 1 = analog
		;Här måste ändras vid användning av analogingångar
		BANKSEL ANSEL    
		movlw	b'00000000'       	;AN7, AN6, AN5, AN4, AN3, AN2, AN1, AN0
 		movwf   ANSEL
		movlw	b'00000000'		  	;AN13, AN12, AN11, AN10, AN9, AN8
                movwf   ANSELH

		BANKSEL PORTA				;Välj bank där portar finns
;*******************************************************************
;*********** Slut på initiering av port A, B, C, D, E **************
;*******************************************************************

;*******************************************************************
;********************* Huvudprogram ********************************
;*******************************************************************
Main 
		;Här skrivs programmet.
;*****************************************************************
;************************ Slut på huvudprogram *******************
;*****************************************************************
	End		
DJNZ
Inlägg: 16
Blev medlem: 19 augusti 2012, 20:15:41
Ort: Götene

Re: PIC16f887, osäker på inställningar för intern oscillator

Inlägg av DJNZ »

Hej
Du verkar skriva kod i MPLAB ? , det finns en del konfigurerings flaggor i din kod, har du ingen som talar om vilken frekvens du vill använda i den interna osc ?

Annars så står det i data bladet hur du ställer in registren, det finns ett som heter OSCCON och håller bitar för olika frekvensval
4MHz är i IRCF<2.0> 110 (sidan 65)

//
Anders_Peter
Inlägg: 66
Blev medlem: 24 juli 2008, 00:40:30
Ort: Skövde

Re: PIC16f887, osäker på inställningar för intern oscillator

Inlägg av Anders_Peter »

Ja det är MPLAB jag använder.

Jag har använt mig av databladet för de olika inställningarna men känner inte att jag fått helt kläm på det men här är svar på dina frågor.

I configurationsbitarna har jag använt "_INTRC_OSC_NOCLKOUT" och detta har jag tolkat som att den interna oscillatorn ska användas och att de pinnar som kristallen normalt sitter på går att använda som vanliga I/O men om man kan sätta frekvensen här vet jag inte, har inte hittat det i databladet iallafall.

OSCCON finns med i koden men om jag har ställt in det rätt vet jag inte.
BANKSEL OSCCON
bcf OSCCON,0 ;SCS Klockans inställningar definieras av FOSC<2:0> från CONFIG1-registret
bcf OSCCON,4 ;IRCF<0> Välj intern oscillator-frekvens
bsf OSCCON,5 ;IRCF<1> Välj intern oscillator-frekvens
bsf OSCCON,6 ;IRCF<2> Välj intern oscillator-frekvens

En annan fundering:
Sen ser jag att det i OSCCON finns bitar(HTS, LTS) som ser ut att tala om ifall oscillatorn är stabil eller inte? Förstår inte vad man menar om detta i databladet?
I mitt projekt finns inga tidskritiska delar så det är visserligen inte så noga om hastigheten skulle variera lite.
sodjan
EF Sponsor
Inlägg: 43231
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: PIC16f887, osäker på inställningar för intern oscillator

Inlägg av sodjan »

_INTRC_OSC_NOCLKOUT i CONFIG är rätt.

Med default OSCCON (d.v.s efter reset) så får du 4 MHz.
Det står tydligt i kapitel "4.2 Oscillator Control", "110 = 4 MHz (default)".

LTS och HTS beskrivs i "4.5.5 HFINTOSC AND LFINTOSC CLOCK SWITCH TIMING".
Och nej, det är ingenting som du behöver bry dig ifall du inte använder "clock switching".
Anders_Peter
Inlägg: 66
Blev medlem: 24 juli 2008, 00:40:30
Ort: Skövde

Re: PIC16f887, osäker på inställningar för intern oscillator

Inlägg av Anders_Peter »

Tack va bra då löser det sig.
Skriv svar