Ir ao conteúdo
  • Cadastre-se

Preciso de ajuda na Programação do PIC18F4520 em linguagem C


Ir à solução Resolvido por .if,

Posts recomendados

Boa tarde!

 

Preciso de ajuda para fazer uma atividade do curso de eletrônica. Está sendo impossível de concluir a tarefa até agora.

 

Deve ser tudo feito e simulado através do Proteus, o enunciado é:

 

Faça um programa para acionar as saídas da seguinte forma:
a) Caso a chave S8 seja pressionada exibe no LCD o valor de tensão na entrada AN2.
B) Caso a chave S7 seja pressionada exibe no LCD o valor de tensão na entrada AN1.
c) Caso a chave S6 seja pressionada exibe no LCD o valor de tensão na entrada AN0.
d) Caso a chave S1 seja pressionada pisca os LEDs D1,D3, D5 e D7 a cada 30 segundos.
e) Caso a chave S2 seja pressionada pisca os LEDs D2,D4,D6 e D8 a cada 30 segundos.

 

Um esquemático pronto do Proteus foi dado pelo professor, o qual irei anexar aqui.

 

O código que fiz até agora que deveria ao menos ligar o LCD não está funcionando. Não entendo por que, já tentei de tudo e nada.

#include <P18f4520.h>#include <delays.h>#pragma config	OSC=XT#pragma	config	WDT=OFF#pragma	config	MCLRE=ON#pragma	config	DEBUG=OFF#pragma	config	LVP=OFF#pragma	config	PWRT=ON#define 	RS 		PORTEbits.RE0#define 	RW 		PORTEbits.RE1#define 	EN 		PORTEbits.RE2#define 	DATA_PORT 	PORTD int ADC_RESH, ADC_RESL,Resultado;#pragma code isr = 0x0008#pragma interrupt ISRvoid ISR (){	if (PIR1bits.ADIF==1)	{		Resultado=ADRES;		PIR1bits.ADIF=0; 				ADCON0bits.GO=1; 	}}#pragma codevoid enable();void imprime();void inicializa();void linha_1();void linha_2();void limpa_tela();void start();void enable (){	EN=1;	Delay100TCYx(10);	EN=0;}void inicializa (){		RW=0;	RS=0;	enable();		DATA_PORT=0X38;	enable();	DATA_PORT=0X38;	enable();	DATA_PORT=0X38;	enable();	DATA_PORT=0X38;	enable();	DATA_PORT=0X0A;	enable();	DATA_PORT=0X01;	enable();	DATA_PORT=0X06;	enable();	DATA_PORT=0X0C;	enable();}	void linha_1 () {	RS=0;	DATA_PORT=0X80;	enable();	RS=1;}void linha_2 () {	RS=0;	DATA_PORT=0XC0;	enable();	RS=1;}void limpa_tela() {	RS=0;	DATA_PORT=0X01;	enable();	RS=1;}void imprime(char frase1[], char frase2[], int sz1, int sz2){	int x;	linha_1();	for (x = 0; x < sz1; x++)	{		DATA_PORT = frase1[x];		enable();	}	linha_2();	for (x = 0; x < sz2; x++)	{		DATA_PORT = frase2[x];		enable();	}}void main () {        TRISB=1;	TRISC=0;	TRISD=0;	TRISE=0; 	inicializa();	start();}void start(){	char f1[] = "tensão em Volts ";	char f2[] = "                ";		limpa_tela();	imprime(f1, f2, sizeof(f1), sizeof(f1));	ADCON2=0xA1;				ADCON1=0x0D;	ADCON0=0x03;	PIE1bits.ADIE=1;		INTCONbits.PEIE=1;	INTCONbits.GIE=1;		ADCON0bits.GO=1;}

Se alguém puder me ajudar ficarei imensamente grato!

 

Obrigado a todos.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Amigo, algumas pessoas (tipo eu) não se sentem a vontade em baixar arquivos do forum (não baixei). Sugiro que publique o desenho do seu esquemático mesmo.

 

Provavelmente nos exemplos que vêm com seu compilador, há algum de display. Teste com ele. Escreva algo nele, uma veriável mutante qualquer e etc. Pisque alguns leds e etc...Dê uma olhada no d.s. do seu mc pra ver como ele trata os periféricos e depois veja no seu compilador como este trata o tratamento dos periféricos. Talvez seja isto que seu professor espera de você.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

percebo que os controles do display estão no portE cujos pinos são compartilhados com AN. Verifique no d.s do seu mc se precisa desabilitar os AN´s. Outra.. como você não lê o busyflag do display, não precisa conectar o wr. Coloque-o em gnd ou garanta que o sinal do mc pra ele esteja sempre em 0.

 

Ah sim.. quase esqueci... de nada, desulpe...

Link para o comentário
Compartilhar em outros sites

percebo que os controles do display estão no portE cujos pinos são compartilhados com AN. Verifique no d.s do seu mc se precisa desabilitar os AN´s. Outra.. como você não lê o busyflag do display, não precisa conectar o wr. Coloque-o em gnd ou garanta que o sinal do mc pra ele esteja sempre em 0.

 

Ah sim.. quase esqueci... de nada, desulpe...

 

Muito obrigado pelas dicas, mas ainda não estou conseguindo resolver.

Deve haver algum bug pois mesmo com o código mais básico possível ao simular as saídas RB do PIC oscilam entre 0 e 1 loucamente e nada mais funciona.

 

Cheguei a mostrar o problema ao professor e ele admite que possa ser algum bug, mas também não propôs uma solução...

 

Obs: O resto da minha turma está tendo problemas também.

 

Não sei mais o que fazer, só me resta esperar novas sugestões...

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
  • Solução

Que bom que pode se dar ao luxo de esperar. Caso decida pelo contrário e se servir nova sugestão de pessoa velha, a que dou é tentar retroceder um pouco até o elementar pisca led.

#include definicoes_do_seu_mcvoid delay (unsigned int dl){while (dl--);}void main (void){//inicialize algum hwTRISB=0;PORTB=0xaa;for(;{delay(30000);//a 4MHz deve dar alguns décimos de segundoPORTB^=0xff; // vai ver alternar os bits do port. Ponha leds se desejar}}
Note-se ausência de lib´s externas.

Em caso de insucesso, a dica que dou é trocar de compilador. Não sei se é seu caso mas as vezes bugs são propositais devido a falta de licença ou é algum "alternativo remediado". Neste caso, continuando com a saga de dicas, uma outra é usar outro compilador. P.ex. mikroc é (era, ainda é .. acho) parcialmente gratuito. O sdcc é 100% free e funciona direitinho pra alguns pics. Pelo menos vai expandir seus horizontes.

 

Mas se queres apenas concluir este treco pra ficar livre do seu professor, infelizmente nisso não posso te ajudar. É melhor esperar mesmo...

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...