Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

Pic18f4550 dahili osilatör

Başlatan kenan_re, 13 Haziran 2013, 16:11:43

kenan_re

iç osilatörle başlayıp daha sonra harici osilatöre geçiş için bilgi verebilecek var mı arkadaşlar ?

Tagli

Daha önce denemedim ama datasheet'ten anladığım kadarıyla durum şöyle:

Konfigurasyon bitlerinde başta dahili osilatör seçilmeli. Ayrıca, IESO (Internal/External Oscillator Switchover) biti de 1 yapılmalı.

Daha sonra çalışma sırasında OSCCON register'ının küçük 2 biti (SCS0 ve SCS1) ile değişiklik yapılabiliyor.
Gökçe Tağlıoğlu

kenan_re

Teşekkürler. Datasheet inde bakarak bişeyler yaptım. 8Mhz olarak ayarlardım 9600 baud seri haberleşmeyle gayet güzel çalıştı.
#include <pic18.h>
#include <usart.h>
#include <delays.h>

#include "fuse.h"

   // CONFIG1H
      #pragma config FOSC = HSPLL_HS  //INTOSCIO_HS Oscillator Selection bits (HS oscillator, PLL enabled (HSPLL))

      #pragma config FCMEN = ON      // Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor disabled)

      #pragma config IESO = ON       // Internal/External Oscillator Switchover bit (Oscillator Switchover mode disabled)

#define _XTAL_FREQ 8000000L //48000000L
        
void main()
{
	TRISA=0x00;	TRISB=0x00; TRISC=0b01000000; TRISD=0x00; TRISE=0x00;
	
	PORTA=0; PORTB=0; PORTC=0; PORTD=0; PORTE=0;
	
CCP1CON=0x00;CCP2CON=0x00;

OSCTUNE=0b10000000;
OSCCON =0b01110110;

baudUSART (
				BAUD_IDLE_RX_PIN_STATE_HIGH & 
				BAUD_IDLE_TX_PIN_STATE_HIGH &
				BAUD_IDLE_CLK_LOW &
                BAUD_8_BIT_RATE &
                BAUD_WAKEUP_OFF &
                BAUD_AUTO_OFF); 
	
// configure USART
OpenUSART((USART_ADDEN_OFF & 
USART_TX_INT_OFF
&USART_RX_INT_ON
&USART_ASYNCH_MODE
&USART_EIGHT_BIT
&USART_CONT_RX
&USART_BRGH_HIGH),51 );  //1249
 
//USART Kesme ayarları
RCIF	=0x00;		// usart alma kesmesi açık(PIR,5 biti)
TXIE	=0x00;		// usart gönderme kesmesi kapalı(Pie1,4 biti)
RCIE	=0x01;		// usart alma kesmesi açık(Pie1,5 biti))----Gönder/Alma esnasında açıp kapatıyorum

PEIE	= 0x01; 	// Yardımcı kesme izni veriliyor(INTCON,6. biti)
GIE		= 0x01; 	// Genel kesme izni veriliyor(INTCON,7. biti)

while(1)
	{
	PORTB=0x00;
	Delay10KTCYx(150);
	
	PORTB=0xff;
	Delay10KTCYx(150);

	}
}

static void interrupt // Kesme fonksiyonu
kesme(void) 			  // Kesme fonksiyon ismi (önemsiz)
{
if(DataRdyUSART())
     {
		PORTD =	ReadUSART();
		WriteUSART(PORTD);
     }
	
}

hamza777

Alıntı YapYUKSEK = read_sensor();