Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
New Nerd

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

Recommended Posts

New Nerd    48

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.

Editado por New Nerd

Compartilhar este post


Link para o post
Compartilhar em outros sites
Isadora Ferraz    1.587

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ê.

Compartilhar este post


Link para o post
Compartilhar em outros sites
New Nerd    48
  • Autor do tópico
  • post-673997-0-05278800-1448461833_thumb.

     

    Suspeito que possa haver erros no esquema disponibilizado pelo professor porque ao menos o LCD eu conseguia programar sob outras condições em outros esquemas.

    Editado por New Nerd

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    Isadora Ferraz    1.587

    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...

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    New Nerd    48
  • Autor do tópico
  • 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...

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    Isadora Ferraz    1.587

    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...

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    Visitante
    Este tópico está impedido de receber novos posts.





    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×