Página 1 de 1

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

MensagemEnviado: 05 Jul 2009 17:23
por Kleber
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.

MensagemEnviado: 05 Jul 2009 17:57
por Sergio38br
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

MensagemEnviado: 05 Jul 2009 22:35
por Kleber
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.

MensagemEnviado: 06 Jul 2009 07:39
por Sergio38br
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

MensagemEnviado: 06 Jul 2009 12:15
por Kleber
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

MensagemEnviado: 06 Jul 2009 15:00
por Sergio38br
Posta o codigo , para podermos ajudar.. mas diz qual micro vc esta usando.

[ ]'s
Sergio

MensagemEnviado: 06 Jul 2009 16:29
por proex
" 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 !

MensagemEnviado: 06 Jul 2009 16:49
por Sergio38br
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

MensagemEnviado: 06 Jul 2009 18:25
por Kleber
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;
}
}