collapse

* Posts Recentes

O que é isto ? por SerraCabo
[12 de Abril de 2024, 14:20]


Amplificador - Rockboard HA 1 In-Ear por almamater
[11 de Abril de 2024, 20:46]


Emulador NES em ESP32 por dropes
[10 de Abril de 2024, 15:30]


Meu novo robô por josecarlos
[29 de Março de 2024, 18:30]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: EUSART PIC18F4550  (Lida 11884 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline jbecg

  • Mini Robot
  • *
  • Mensagens: 26
Re: EUSART PIC18F4550
« Responder #15 em: 21 de Setembro de 2011, 22:00 »
Alguma sugestão de como resolver este problema?

Offline ntrindade

  • Mini Robot
  • *
  • Mensagens: 8
Re: EUSART PIC18F4550
« Responder #16 em: 22 de Setembro de 2011, 00:34 »
caro jbecg,

Por favor confirme se de facto as "configuration bits" do MPLAB está definido com o pisco ou não.
Estar definido como a configuração é feita no código e nem uma linha existe sobre o mesmo, significa que cada vez que faz a programação do PIC não vai alterar os 'fuses' , vai sim utilizar os mesmos valores anteriores (da ultima vez que foram gravados).
Portanto a sugestão é retirar o pisco dos "configuration bits set on code", de certeza que  o que funciona para SPBRG=44 vai deixar de funcionar.

Offline jbecg

  • Mini Robot
  • *
  • Mensagens: 26
Re: EUSART PIC18F4550
« Responder #17 em: 22 de Setembro de 2011, 12:04 »
Essa dica já me tinha sido dada e inclusivé já fiz essa alteração, contudo não se verificou qualquer alteração de funcionamento, isto é, continua a funcionar. 

Offline ntrindade

  • Mini Robot
  • *
  • Mensagens: 8
Re: EUSART PIC18F4550
« Responder #18 em: 22 de Setembro de 2011, 14:50 »
desse modo, pela as configurações que tem no MPLAB o FOSC é de 48MHz para um cristal de 20MHz.
com SYNC =0, BRG16=0, BRGH=1 o SPBRG teria que ter um valor de 311, mas sendo um registo de 8bits não pode.
Sendo assim sugiro mudar BRGH para 0 e usar SPBRG=77.



Offline jbecg

  • Mini Robot
  • *
  • Mensagens: 26
Re: EUSART PIC18F4550
« Responder #19 em: 23 de Setembro de 2011, 03:04 »
Para já muito obrigado pelos conselhos. A minha questão agora passar por como redefinir FOSC para 20 MHz através de um cristal de 20MHz.

Offline Sérgio_Sena

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.649
    • Electronic Gear for Musicians
Re: EUSART PIC18F4550
« Responder #20 em: 23 de Setembro de 2011, 08:43 »
DATASHEET, capítulo do Oscilador, está lá tudo explicado! RTFM...

vocês vêem práqui fazer perguntas que estão respondidas no papel à vossa frente.... aprendam a pesquisar por vocês próprios, pois nesta área é fundamental.

Offline ntrindade

  • Mini Robot
  • *
  • Mensagens: 8
Re: EUSART PIC18F4550
« Responder #21 em: 23 de Setembro de 2011, 11:35 »
para ter um FOSC=20Mhz basta desactivar o PLL.
Se fazes as configurações no MPLAB, só é preciso mudar a 4ª linha de HS+PLL para HS ( o mesmo que HS-USB).

Saber a que velocidade o micro está a trabalhar é fundamental, caso contrario podemos estar a contar que ele está a fazer uma coisa e afinal é outra. Ter uma rotina com um led a piscar de 5 em 5 segundos é uma maneira de testar e saber se a velocidade está correcta.

Offline jbecg

  • Mini Robot
  • *
  • Mensagens: 26
Re: EUSART PIC18F4550
« Responder #22 em: 25 de Setembro de 2011, 13:25 »
Ok, obrigado pela dica, mas continua-se a passar algum problema, se estou a trabalhar com FOSC = 20MHz deveria ter SPBRG = 129 para ter uma comunicação a 9600bits/s através da EUSART, o que não acontece. Com SPBRG = 129 não acontece, isto é, os caracteres enviados não correspondem aos recebidos.

Outra questão que me leva pensar que realmente tenho um problema é precisamente na temporização do acender e apagar de LEDs. Defini para um segundo aceso e um segundo apagado cada um dos LEDs e não é isso que acontece, como não tenho acesso a nenhum osciloscópio não consigo verificar a minha suspeita, mas creio que permanecem 2s acesos e 2s apagados.

O código está em baixo.

unsigned int counter;

void interrupt handler (void)
{
   //TIMER 0
   if(T0IF == 1)
   {
      T0IF = 0;// clear timer 0 interrupt flag
      ++counter;
   }
}

void main (void)
{
       
        TRISE = 0x00;//porto E como saida
   PORTE = 0x00;// iniciam-se a 0
       
        //TIMER 0//
   T0CS = 0;
   PSA = 1;
   T0IE = 1;
   T0IF = 0;

   RE0 = 1;
   RE1 = 0;

        while(1)
   {
      asm("CLRWDT");

                if(counter >= 19531)
                // 1s em contagens : 1s/(256*(1/20E6)) = 19531 contagens       
               {
         RE0 = 0;
         RE1 = 1;      
      }
      
      if(counter >= 39062)
                //2s = 2*19531 contagens = 39062 contagens
      {
         counter = 0;
         RE0 = 1;
         RE1 = 0;
      }
          }
}

Offline FET_Destroyer

  • Mini Robot
  • *
  • Mensagens: 213
    • Fet Destroyer
Re: EUSART PIC18F4550
« Responder #23 em: 25 de Setembro de 2011, 13:49 »
Boas

Tenta este código ou compara com o teu.
Oscilador de 20Mhz e o SPRG = 129;

Cumps

Código: [Seleccione]

//#include <htc.h>
#include <p18cxxx.h>
#include <string.h>
#include <stdio.h>
#include <usart.h>
#include "pff.h"

#define _XTAL_FREQ 48000000

#define LED7 LATBbits.LATB7
#define LED6 LATBbits.LATB6
#define LED5 LATBbits.LATB5

#pragma config OSC     = HS_HSPLL
#pragma config PLLDIV   = 5 // (20 MHz crystal on PICDEM FS USB board)
#pragma config CPUDIV   = OSC1_PLL2 // Clock source from 96MHz PLL/2

void main(void)
{
BYTE res, i;

TRISB = 0x00;

// configuração USART
OpenUSART( USART_TX_INT_OFF & USART_RX_INT_OFF & USART_ASYNCH_MODE & USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_HIGH, 129 );
// Baudrate = Fosc / (16 * (spbrg + 1))
//spbrg = 64  para 10mhz para 9600
//spbrg = 255 para 10mhz com PLL para 9600
//spbrg = 21 para 10mhz com PLL para 19200
//spbrg = 25  para 4mhz int osc para 9600




printf("inserir cartao\n\r");
LED7 = 1;
printf("inicializado\n\r");

  while(1);       

}




Offline ntrindade

  • Mini Robot
  • *
  • Mensagens: 8
Re: EUSART PIC18F4550
« Responder #24 em: 25 de Setembro de 2011, 18:37 »
se colocares os leds a piscar durante mais tempo melhor. por exemplo se for de 5 em 5 segundos e ao olhar contarmos 6 segundos o erro é menor do que estar a contar um led a piscar 1 em 1 segundo.

o modo de programação também não é o mais correcto.
Por exemplo, na configuração do TIMER0, porquê colocar o PSA=1 se nem sequer colocaste o TMR0ON=1?! Activas primeiro a interrupção do timer e depois é que limpas a flag?!
confirmei que por defeito T0CON=0xFF mesmo num reset, mas não deixa de ser um bocado estranho porque se fosse o TMR1 já não funcioava.

Partilha o teu projecto para fazer download e dar uma vista de olhos(dropbox,etc)
No MPLAB na tab project, faz um 'Package in .zip' e põe na net.
« Última modificação: 25 de Setembro de 2011, 18:38 por ntrindade »

Offline jbecg

  • Mini Robot
  • *
  • Mensagens: 26
Re: EUSART PIC18F4550
« Responder #25 em: 25 de Setembro de 2011, 22:34 »
Ok, já fiz o upload no megaupload. Obrigado pela ajuda.

link: http://www.megaupload.com/?d=0X0RUP70 (este link já n corresponde ao meu projecto)
« Última modificação: 26 de Setembro de 2011, 21:06 por jbecg »

Offline ntrindade

  • Mini Robot
  • *
  • Mensagens: 8
Re: EUSART PIC18F4550
« Responder #26 em: 26 de Setembro de 2011, 02:35 »
vi o teu projecto em MPLAB, tens tudo na mesma!!!
1) configuration bits tens a dizer que são definidos no codigo (pisco activo), mas no codigo nao tens nada?!
2) mesmo considerando os configuration bits do MPLAB, tens definido o oscilador do tipo clock externo?! o que aconteceu ao cristal de 20MHz? clock externo é diferente de cristal.
3) o meu compilador Hi-tech nao reconhece o T0IE e afins.... só reconhece TMR0IE. Como é que compila sem dar erro?!





Offline jbecg

  • Mini Robot
  • *
  • Mensagens: 26
Re: EUSART PIC18F4550
« Responder #27 em: 26 de Setembro de 2011, 21:05 »
Não sei o que se passou, mas esse projecto não corresponde ao meu. O meu projecto (agora correcto) esta no link abaixo. De qualquer modo nunca tive problemas por itilizar T0IE e afins.

http://www.megaupload.com/?d=R4ABRJH7

Offline ntrindade

  • Mini Robot
  • *
  • Mensagens: 8
Re: EUSART PIC18F4550
« Responder #28 em: 27 de Setembro de 2011, 03:35 »
boas,

primeiro de tudo, dei uma vista de olhos no ficheiro HEX que tinhas no projecto e não tem configurações dos fuses, logo cada vez que programas o pic não alteras os fuses e fica sempre o que está gravado anteriormente. O melhor é começares a definir os fuses no código, assim o compilador introduz automaticamente.

segundo, para gravar o pic que software usas? MPLAB directamente? software do PICKIT2? nao é que seja relevante mas pode estares a fazer export do HEX no MPLAB para gravar com o PICKIT Programmer e não tens a opção de fazer export com configuration bits.

terceiro como é que ligas o pic ao PC? ligando directamente á porta RS232 propria ou algum dongle rs232-usb? se for este o caso para além de definires a velocidade da porta no hyperterminal, tambem tens q definir nos dispositivos do windows.

por ultimos se nao usas nenhum chip rs232 entre o pic e a porta do PC tens q inverter o sinal dos pinos
TXCKP=1; //sem max232
RXDTP=1; //sem max232

alterei o teu codigo minimamente, compilei e deu com cristal 20mhz.
usei um dongle rs232-usb e o pic ligado directamente á porta.

http://dl.dropbox.com/u/19843563/18f4550alterado.zip

Offline jbecg

  • Mini Robot
  • *
  • Mensagens: 26
Re: EUSART PIC18F4550
« Responder #29 em: 27 de Setembro de 2011, 18:01 »
Ok, obrigado. Bem tive a tentar ver como se poderia fazer para activar a definição dos fuses no ficheiro .hex para programar o pic e não vi nada ao nível do software do PICKIT2 para o fazer. E sim para programar o utilizo o software do PICKIT2 faço Auto Import Hex+Write File e programo o pic. Relativamente à ligação com o computador faço a directamente através da com de um pc desktop que tenho e de um max 233.

Programei e testei o funcionamento. Ao nível do tempo do piscar do LED isto é para dez segundo? (tentei medir assim a olho com um cronometro e contei perto de 12 s). Ao nível da porta serie com as definições feitas os caracteres enviados não correspondem aos recebidos.

Será um problema do meu PC? Será que tenho algum problema nesta porta? Ou será ao nível do meu hardware? Sera que tenho algo queimado?

Cumprimentos