MPLAB + CCS - PIC24FJ128GC010

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

MPLAB + CCS - PIC24FJ128GC010

Mensagempor fabim » 18 Out 2018 13:18

Boa tarde pessoal!
Depois de passar toda a manhã fazendo todos possiveis testes descobri um problemão.
Possuo um toolchain comprado pela empresa em 2014, de:
CCS PIC C 5.026
MPLAB 8.86

Ao compilar o código, ao final, aparecia uma mensagem " NOT LOADED".
Resolvi então, compilar o arquivo direto na IDE do CCS, e a quantidade de flah/ram utilizados mudou totalmente!
Porém o CCS não reconhece nem o PIC KIT3 ou sequer o ICD3 (para gravação, apenas para debug, no caso).
Eu importei o HEX no mplab e gravei, pronto, o micro startou e o led de debug começou a piscar!!

Enfim, não da samba compilar o PIC24Fj128GC010 no MPLAB com o CCS, porém esta parte para mim tudo bem, não me importo de compilar em um e gravar no outro.

O Que acontece é que tudo funcionou, menos o display.
O esquema básico seria este:

https://drive.google.com/open?id=1MhbVKDfMw3CfBmJlGuJ0_1nMf-QJFTzS


E a inicialização que estou utilizando seria esta:

Código: Selecionar todos
#include <24FJ128GC010.H>


#device ICD=3

//frc clock interno de                                                                        8mhz                             
#fuses NOWINDIS, NOWDT, NODEBUG, NOWRT, NOPROTECT, NOJTAG, FRC, NOIESO

#device ADC=16

#use delay(clock=8000000)// 8mhz suficiente para aplicação que não possui necessidade de alto processamento



//associação de endereços dos SFRS

#byte   BUFCON1 = getenv("SFR:BUFCON1")

//controle do display lcd
#byte LCDCON   = getenv("SFR:LCDCON")
#byte LCDREG   = getenv("SFR:LCDREG")
#byte LCDPS    = getenv("SFR:LCDPS")
#byte LCDSE0   = getenv("SFR:LCDSE0")  //segmento 0 a 15
#byte LCDSE1   = getenv("SFR:LCDSE1")  //segmento 16 a 31
#byte LCDSE2   = getenv("SFR:LCDSE2")  //segmento 31 a 46
#byte LCDSE3   = getenv("SFR:LCDSE3")  //segmento 31 a 46
#byte LCDDATA0 = getenv("SFR:LCDDATA0")//segmento milhar e centena
#byte LCDDATA1 = getenv("SFR:LCDDATA1")//segmento dezena e unidade
#byte LCDREF   = getenv("SFR:LCDREF")  //controle de tensão de referencia para lcd, como contraste


//inicializa hardware de escrita no display
//poderia ter utilizado o drive do ccs porém existe muito pouca informação lógica de como utilizar
//de forma que li o datasheet e fiz a configuração dos registradores
void Start_Display(void){
   
      LCDPS    = 1<<7 |1<<5|1<<4|1<<1;
      LCDREG   = 1<<15|1<<5|1<<4|1<<3|1<<1;
      LCDREF   = 1<<15|1<<5|1<<4|1;// não usa bias 
     
      LCDSE0   = 0xFFFF;
      LCDSE1   = 0x7FFF;
      LCDSE2   = 0x0000;
      LCDSE3   = 0x0000;
      LCDDATA0 = 0xFFFF;// segmentos milhar e centena desligados
      LCDDATA1 = 0xFFFF;// segmentos dezena a unidade desliagdos
      LCDCON   = 1<<15|1<<6;
}


Os registradores que eu inicializei na unha, tiveram os valores definidos através do estudo de um documento como segue:

https://drive.google.com/open?id=17GxMo

Eu fiz alguns testes simples, e verifiquei que o display PN - LCD-S401C52TR-49, funciona bem após 2,7V.

Peço a ajuda dos caros pois esgotaram as possibilidades de minha competencia para este core com display, é a primeira vez que faço tal projeto!!!

Obrigado antecipadamente!!

Sem mais;
Você não está autorizado a ver ou baixar esse anexo.
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Re: MPLAB + CCS - PIC24FJ128GC010

Mensagempor fabim » 24 Out 2018 11:55

Resolvido!!
Pessoal, existem vários pontos que devem ser analisados!!

Primeiro de todos, mesmo o core sendo 16Bits, por algum motivo o CCS+MPLAB não consegue entender o comando (1<<15), ele entende até 1<<14. Para setar o bit 15 é necessário fazer a setagem com valor direto, sendo por exemplo 0x8000.

Outro ponto importante é que o core sendo 16 bits, é importante lembrar que quando se vai utilizar o comando GETENV para criar uma instancia de um SFR, é necessário utilizar o denominador #BYTE ou #WORD da forma correta, sendo #BYTE para 8 bits, e #WORD para 16 bits. Eu estava utilizando BYTE, e por este motivo não alcançava os bits 8 a 15 dos registradores.

Um outro ponto, é que por algum motivo mesmo quando você insere o header do core que vai utilizar manualmente no MPLAB, ele ainda dá preferencia pelo header apontado pelo core que você selecionou no menu. No meu caso, o header do core PIC24FJ128GC010 está bugado, e por este motivo acontece de compilar cheio de erros etc. Resolvi o problema compilando direto pelo CCS e gravando pelo MPLAB.

Outra coisa muito importante nos PIC24F, no caso do CCS, é que a IDE para cada core deixa default alguns bits dos fuses. Por este motivo é importante que sempre sete os fuses conforme necessidade sem deixar os importantes para trás!!

Ao observar estes pontos, após perder um bom tempo lendo o manual do CCS e navegando por alguns fóruns.

O display está operando perfeitamente, e o clock do sistema e tempos de delays estão perfeitos!!

Outra coisa muito importante sobre a Microchip é a organização das informações dos cores.
No site da microchip para determinado core/família, logo abaixo possuem os documentos de APP note dos hardwares que compõem o core, como exemplo o link abaixo.
https://www.microchip.com/wwwproducts/e ... FJ128GC010 // link do core, logo abaixo em documents tudo sobre quase tudo

Basicamente o datasheet trata dos SFRs de forma superficial e mais profunda para cada tópico em documentos separados, conforme link citado!



Espero ajudar com estas informações!
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Re: MPLAB + CCS - PIC24FJ128GC010

Mensagempor cfreund » 25 Out 2018 00:33

fabim escreveu:Primeiro de todos, mesmo o core sendo 16Bits, por algum motivo o CCS+MPLAB não consegue entender o comando (1<<15), ele entende até 1<<14. Para setar o bit 15 é necessário fazer a setagem com valor direto, sendo por exemplo 0x8000.


Não serio o caso de: (1u << 15) ou (1ul << 15)?
Cláudio F
Avatar do usuário
cfreund
Word
 
Mensagens: 672
Registrado em: 14 Out 2006 14:02
Localização: São Paulo

Re: MPLAB + CCS - PIC24FJ128GC010

Mensagempor xultz » 25 Out 2018 11:23

É por estas e outras que migrei do CCS há alguns anos para o XC8, XC16 e XC32. Tive uns problemas bem cabulosos com problemas de interrupção no PIC24 usando o CCS, que funcionaram de cara no XC16. Daí larguei mão desse compilador faz tempo...
98% das vezes estou certo, e não estou nem aí pros outros 3%.
Avatar do usuário
xultz
Dword
 
Mensagens: 3001
Registrado em: 13 Out 2006 18:41
Localização: Curitiba


Voltar para PIC

Quem está online

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

x