Configuração do valor do Cristal utilizando compilador C18.

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Configuração do valor do Cristal utilizando compilador C18.

Mensagempor Kleber » 05 Jul 2009 17:23

Olá pessoal,

Alguém sabe me dizer aonde configuro o valor do Cristal utilizando o compilador da Microchip C18.
Utilizei o Project Wizard e não notei este campo, utilizo o MicroC onde e o mesmo tem um campo para configuração.

Obrigado.
Kleber
Kleber
Nibble
 
Mensagens: 99
Registrado em: 17 Out 2006 20:41
Localização: São Paulo

Mensagempor Sergio38br » 05 Jul 2009 17:57

Procure no help o item topics, Ache Language tools e escolha PIC18 Config Settings, veja quais fuses para o teu micro, escolha os quais vai utilizar e declare utilizando a diretiva #pragma config.

ex.:
Código: Selecionar todos
//Oscillator Selection bits:
#pragma config FOSC = HS // HS oscillator 
//#pragma config FOSC = HSPLL // HS oscillator, PLL enabled and under software control 
//#pragma config FOSC = EC // EC oscillator, CLKO function on OSC2 
//#pragma config FOSC = ECPLL // EC oscillator, PLL enabled and under software control, CLK function on OSC2


[]`s
Sergio
Avatar do usuário
Sergio38br
Word
 
Mensagens: 759
Registrado em: 22 Nov 2007 13:39
Localização: São Paulo - SP

Mensagempor Kleber » 05 Jul 2009 22:35

Mas eu encontro esses fuses no Menu Configure/Configuration Bits no MPLAB, entretanto, gostaria de muda o valor do Cristal. Por exemplo, 4MHz para 20MHz.
Kleber
Kleber
Nibble
 
Mensagens: 99
Registrado em: 17 Out 2006 20:41
Localização: São Paulo

Mensagempor Sergio38br » 06 Jul 2009 07:39

Kleber diferente do MikroC, o C18 não calcula a parte de temporização, delays usando o valor do cristal. Alem do mais, é aconselhavel vc definir no programa os fuses. caso vc precise apenas levar o main.c para outro local, não teria de ficar advinhando qual fuzes deixou configurado.

[ ]'s
Sergio
Avatar do usuário
Sergio38br
Word
 
Mensagens: 759
Registrado em: 22 Nov 2007 13:39
Localização: São Paulo - SP

Mensagempor Kleber » 06 Jul 2009 12:15

Sergio, obrigado pela resposta e pela dica.

Eu montei o pk2 sugerido neste fórum e o mesmo está funcionando corretamente. Quando utilizo os arquivos .hex gerado pelo MikroC, por exemplo um pisca led, e gravo pelo MPLAB, tudo funciona a contento. Agora, quando somente mando apagar ou ligar os leds utilizando o C18, nada funciona.
Daí pensei que tivesse algo errado com a declaração do Cristal que não vejo no C18. E ainda não funciona.rs
Kleber
Kleber
Nibble
 
Mensagens: 99
Registrado em: 17 Out 2006 20:41
Localização: São Paulo

Mensagempor Sergio38br » 06 Jul 2009 15:00

Posta o codigo , para podermos ajudar.. mas diz qual micro vc esta usando.

[ ]'s
Sergio
Avatar do usuário
Sergio38br
Word
 
Mensagens: 759
Registrado em: 22 Nov 2007 13:39
Localização: São Paulo - SP

Mensagempor proex » 06 Jul 2009 16:29

" Kleber diferente do MikroC, o C18 não calcula a parte de temporização, delays usando o valor do cristal.""

Não?

Não existe a função Delay no c18 entao?

Como ela calcula os valores de ajuste da UART para um determinado Baud rate?

Estranho heim !
proex
Dword
 
Mensagens: 2101
Registrado em: 11 Out 2006 14:05
Localização: São Paulo

Mensagempor Sergio38br » 06 Jul 2009 16:49

sim Existe as funções de delay , mas se vc olhar naum é cotados em uS ou mS e sim em tcy, quer dizer naum importa vc tem determinar as quantidade de tcy qdo necessitar. nas rotinas de uart por sotware vc tem de calcular os valores das variaveis de acordo com a frequencia do cristal e do baud... nada automatizado.

o headers da biblioteca delays.h
Código: Selecionar todos
* PIC18 cycle-count delay routines.
 *
 *   Functions:
 *       Delay1TCY()
 *               Delay10TCY()  // 17Cxx only
 *               Delay10TCYx()
 *               Delay100TCYx()
 *               Delay1KTCYx()
 *               Delay10KTCYx()
 */

/* For definition of Nop() */
#include <p18cxxx.h>

/* Delay of exactly 1 Tcy */
#define Delay1TCY() Nop()

#define PARAM_SCLASS auto

/* Delay of exactly 10 Tcy */
#define Delay10TCY() Delay10TCYx(1)

/* Delay10TCYx
 * Delay multiples of 10 Tcy
 * Passing 0 (zero) results in a delay of 2560 cycles.
 * The 18Cxxx version of this function supports the full range [0,255]
 * The 17Cxxx version supports [2,255] and 0.
 */
void Delay10TCYx(PARAM_SCLASS unsigned char);

/* Delay100TCYx
 * Delay multiples of 100 Tcy
 * Passing 0 (zero) results in a delay of 25,600 cycles.
 * The full range of [0,255] is supported.
 */
void Delay100TCYx(PARAM_SCLASS unsigned char);

/* Delay1KTCYx
 * Delay multiples of 1000 Tcy
 * Passing 0 (zero) results in a delay of 256,000 cycles.
 * The full range of [0,255] is supported.
 */
void Delay1KTCYx(PARAM_SCLASS unsigned char);

/* Delay10KTCYx
 * Delay multiples of 10,000 Tcy
 * Passing 0 (zero) results in a delay of 2,560,000 cycles.
 * The full range of [0,255] is supported.
 */
void Delay10KTCYx(PARAM_SCLASS unsigned char);

#endif


rotinas de delay para uart por soft

Código: Selecionar todos
//-----------------------------------------------------------------------------
//DelayTXBitGPS
//-----------------------------------------------------------------------------
//(((((2*Fosc)/(4* baud))+1)/2) - 12) in cycles
//Fosc = 11059200 Hz
//baud = 9600
//cycles = 276,5 => 276
void DelayTXBitUART(void)
{
   _asm
      movlw 92 // cycles/3 = 276/3 = 92
   delaygps1:
      decfsz WREG,1,0
      bra delaygps1
      nop
   _endasm
}
//-----------------------------------------------------------------------------
//DelayRXBitGPS
//-----------------------------------------------------------------------------
//(((((2*Fosc)/(4* baud))+1)/2) - 14) in cycles
//Fosc = 11059200 Hz
//baud = 9600
//cycles = 274,5 => 274
void DelayRXBitUART(void)
{
   _asm
      movlw 91 // cycles/3 = 274/3 = 91,5
   delaygps2:
      decfsz WREG,1,0
      bra delaygps2
      nop
   _endasm
}
//-----------------------------------------------------------------------------
//DelayRXHalfBitGPS
//-----------------------------------------------------------------------------
//(((((2*Fosc)/(8* baud))+1)/2) - 9) in cycles
//Fosc = 11059200 Hz
//baud = 9600
//cycles = 135,5 => 135
void DelayRXHalfBitUART(void)
{
   _asm
      movlw 45 // cycles/3 = 135/3 = 45
   delaygps3:
      decfsz WREG,1,0
      bra delaygps3
      nop
   _endasm
}
//-----------------------------------------------------------------------------


[ ]'s
Sergio
Avatar do usuário
Sergio38br
Word
 
Mensagens: 759
Registrado em: 22 Nov 2007 13:39
Localização: São Paulo - SP

Mensagempor Kleber » 06 Jul 2009 18:25

Olá Sérgio!

O código abaixo é somente para apagar o PORTB. No programa teste que fiz no MikroC, os LEDs ligados ao PORT piscavam. Porém, os mesmos permaneceram acesos quando coloquei o PicKit2 Clone.

Resumindo, só queria apagar os leds do PORTB.rs

#include<p18f452.h>

void main (void)
{
TRISB =0x00;
while(1)
{
PORTB = 0x00;
}
}
Kleber
Kleber
Nibble
 
Mensagens: 99
Registrado em: 17 Out 2006 20:41
Localização: São Paulo


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x