TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: fabian12 en 18 de Febrero de 2011, 23:40:02
-
Estimados Picmaniaticos es grato saludarlos y su vez pedirles porfavor su apoyo en este pequeño impase pero que lamentablemente he probado de varias formas y nada. ademas,
he estado leyendo las consultas y respuestas sobre este tema, he aplicados varios de los consejos y no me ha resultado
para empezar utilizo un pic18f4520 Dip-40 , acabado de bajar el MPLAB 8.63(Supongo q el ultima version) y ademas el
compilador hitech lite : HI-TECH C PRO for the PIC18 MCU Family V9.65
Copyright (C) 1984-2010 HI-TECH SOFTWARE. todo me compila bien sin errores he migrado a estas versiones porque el regisro CMCON y CVRCON, no era reconocido por mi compilador hitech de version anterior: v8.20PL4 , tambien he probado con el css que porlo q he visto es lo mas utilizado por la mayoria IDE VERSION 3.34 ,en fin he leido el datasheet del 18f4520 este tiene algunas diferencias con su anteceso 18f452 precisamente el las entradas analogas y comparadoes , recurro a ustedes porque no me quedan mas ideas al respecto a pesar que estoy configurando los registros involucrados para trabajar con entradas digitales ,
un abrazo y de antemano gracias por cooperacion
saludos
FABIAN12
Aca pego mi Codigo:
#include <htc.h>
#include <stdio.h>
#include <stdlib.h>
#include<conio.h>
#include<string.h>
#include "series1.h"
#define led RC0
#define ledx RC3
/
//#define Bit_High RA1
//#byte CMCOM 0x07;
int contaxx;
//////////////////////////
#pragma interrupt_level 1
/* Serial initialization */
void interrupt ITTIMER0()
{
if(TMR0IF)
{
TMR0IF =0;
led=!led;
PORTB=~(PORTB);
if (contaxx==4){contaxx=0;}
else {contaxx++;}
}
}
///////////////////////////USART//////////////////////////////////////
/* Serial initialization */
void init_comms(void)
{
SPBRG = DIVIDER;
TXSTA = (SPEED|NINE_BITS|0x26);
RCSTA = (NINE_BITS|0x90);
TRISC6=OUTPUT;
TRISC7=INPUT;
}
void putch(unsigned char byte)
{
/* output one byte */
while(!TXIF) /* set when register is empty */
continue;
TXREG = byte;
}
unsigned char getch() {
/* retrieve one byte */
while(!RCIF) /* set when register is not empty */
continue;
return RCREG;
}
void put_char(unsigned/////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////
void main(void)
{
//double i;
int i;
init_comms();
setup();
CMCON=0x07; //DESHABILITA COMPARADORES ANALOGICOS
CVRCON=0x00;
//DESHABILITA VOLTAJE DE REFERENCIA
ADCON1=0x0F;
ADCON0=0x00;
/* Set first 2 bits to input to read DIP switch values */
TRISA=0xff; /* LED panel shows current frequency of TIMER2*/
TRISE=0xff;
while(1)
{
if ( (RA5)==0x01 )
{
printf("%cONTADOR: %d \n",13,contaxx);
for(i=0;i<500;i++);
ledx=1;
} //LEDs: 0000 0001
else if ((RA4)==0x01 )
{
printf("%c CALLAO \n",13);
ledx=1;
} //NNE 0000 0011
else if ((RA5)==0x01 )
{
printf("%c HOLA PERU \n",13);
ledx=1;
} //NE 0000 0010
else if ((RA3)==0x01)
{
printf("%c R GOOD \n",13);
} //ENE 0000 0110
else if ((RA2)==0x01)
{
printf("%c SENAL DEL LA E \n",13);
ledx=1;
} //ENE 0000 0110
else if ((PORTE)==0x02)
{
ledx=1;
printf("%c SENAL DOBLE E\n",13);
} //ENE 0000 0110
else if ((PORTE)==0x03)
{
printf("%c SENAL TRIPLE EEE\n",13);
} //ENE 0000 0110
}
}
¡Te he borrado lo referente a la procedencia del compilador, evitalo! (Pocher)
-
¿Podrías mostrar como tenés conectados los pines del PORTA y PORTE a los DipSwitchs? ¿No te estarán faltando resistencias de pull-up o push-down, según sea el caso?
-
Hola.
Los bits de configuración como están configurados?
Saludos
-
En lo que respecta al hardware recibo senales del puerto B de un pic18f242, hacia el ptoB del pic18f452
CMCON=0x07; //DESHABILITA COMPARADORES ANALOGICOS
CVRCON=0x00;
//DESHABILITA VOLTAJE DE REFERENCIA
ADCON1=0x0F;
ADCON0=0x00;
/* Set first 2 bits to input to read DIP switch values */
TRISA=0xff; /* LED panel shows current frequency of TIMER2*/
TRISE=0xff;
-
En lo que respecta al hardware recibo senales del puerto B de un pic18f242, hacia el ptoB del pic18f4520(pic del problema) y de otro pic18f242 de su PTO B hacia el ptoD del pic18f4520 anteriomente mencionado, lo he probado directamente sin resistencias y nada y no hay ningun problema recibe los datos sin problemas , justamente el PTOA lo quiero utilizar para control de los bits recibidos por el PTOB Y PTOD respectivamnete ..asi q estos pines PTOA, tambien estan conectados directamente de otros pines de los pics 18f242 , alguna sugerencia respecto a como conectar los puertos de dos pic's que intercambian datos ? , muestro como configuro registros y pines..
CMCON=0x07; //DESHABILITA COMPARADORES ANALOGICOS
CVRCON=0x00;
//DESHABILITA VOLTAJE DE REFERENCIA
ADCON1=0x0F;
ADCON0=0x00;
/* Set first 2 bits to input to read DIP switch values */
TRISA=0xff; /* LED panel shows current frequency of TIMER2*/
TRISE=0xff;
-
No sé que pueda estar pasando. Lo único que se me ocurre es que hagas un programa mas sencillo que solo lea los pines del puerto A y en refleje el estado de dicho puerto en el puerto B. Como para saber si está haciendo bien la lectura.
-
Hola....soy Carlos y yo tengo un problema similar.
tengo un 18f4520 y estoy haciendo un reloj para una materia, pero aunque configure el puerto B y le de la indicacion de que empiese en1 (PORTB=0xFF;) des pues de un tiempo se empuesan a poner todos los bits del puerto b en cero y asi se queda, en este puerto tengo los botones de ajuste y obviamente se quede en esta seccion del cpodigo.....intente cambiarlos a l puerto E pero me hace exactamente lo mismo....
con programas sencillos si responde a los botones el puerto b...pero con este ya no, tambien estoy manejando una interrupcion.
solicito su ayuda ya que apenas empiezo en esto de los pics y no ce que pueda ser....ya ley el data sheet y a mi poco conocimiento no pude encontrar una solucion a mi problema..Gracias!
aqui abajo pongo el código:
//******************************************************************************
// ; Programa de Apagado/Encendido
//
// *******************************************************************
/** C O N F I G U R A T I O N B I T S ******************************/
#pragma config OSC = HS // CONFIG1H
#pragma config PWRT = ON, BOREN = ON, BORV = 3 // CONFIG2L
#pragma config WDT = OFF, WDTPS = 32768 // CONFIG2H
#pragma config MCLRE = ON, LPT1OSC = OFF, PBADEN = OFF, CCP2MX = PORTC // CONFIG3H
#pragma config STVREN = ON, LVP = OFF, XINST = OFF // CONFIG4L
#pragma config CP0 = OFF, CP1 = OFF, CP2 = OFF, CP3 = OFF // CONFIG5L
#pragma config CPB = OFF, CPD = OFF // CONFIG5H
#pragma config WRT0 = OFF, WRT1 = OFF, WRT2 = OFF, WRT3 = OFF // CONFIG6L
#pragma config WRTB = OFF, WRTC = OFF, WRTD = OFF // CONFIG6H
#pragma config EBTR0 = OFF, EBTR1 = OFF, EBTR2 = OFF, EBTR3 = OFF // CONFIG7L
#pragma config EBTRB = OFF // CONFIG7H
//** ************ Entradas Digitales *****************************************************/
//****************************************************************************************
//****************** DEFINICON DE ALGUNAS CONSTANTES *************************************
#define TIMER0L_VAL 0x77//0x02
#define TIMER0H_VAL 0xEC//0xD9
#define progra LATBbits.LATB0
#define ajuste LATBbits.LATB1
#define ajuste1 LATBbits.LATB2
//****************************************************************************************
/** I N C L U D E S **************************************************/
#include "p18f4520.h"
#include "delays.h"
/** V A R I A B L E S ********************************************************/
#pragma udata
unsigned int count;
unsigned int contL;
unsigned int contH;
unsigned int Useg;
unsigned int Dseg;
unsigned int Umin;
unsigned int Dmin;
unsigned int Uhora;
unsigned int Dhora;
unsigned int rcorr;
unsigned int pm;
unsigned int parpadeo;
#pragma romdata
unsigned char mynum[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98,0xff};
unsigned char meridiano[]={0x88,0x8c};
/** D E C L A R A T I O N S ******************************************/
/************* DECLARACION DE LOS PROTOTIPOS *******************************/
//----------------------------------------------------------------------------
void main (void);
void InterruptHandlerHigh (void);
union
{
struct
{
unsigned Timeout:1; //flag to indicate a TMR0 timeout
unsigned None:1;
unsigned Ajuste:1;
unsigned Intie:1;
} Bit;
unsigned char Byte;
} Flags;
//----------------------------------------------------------------------------
// High priority interrupt vector
#pragma code InterruptVectorHigh = 0x08
void
InterruptVectorHigh (void)
{
_asm
goto InterruptHandlerHigh //jump to interrupt routine
_endasm
}
//----------------------------------------------------------------------------
// High priority interrupt routine
#pragma code
#pragma interrupt InterruptHandlerHigh
void
InterruptHandlerHigh ()
{
if (INTCONbits.TMR0IF)
{ //check for TMR0 overflow
TMR0H=TIMER0H_VAL;
TMR0L=TIMER0L_VAL;
INTCONbits.TMR0IF = 0; //clear interrupt flag
Flags.Bit.Timeout = 1; //indicate timeout
LATA=rcorr;
if (rcorr==0b11111110)
{rcorr=0b11111011;
PORTD=meridiano[pm];}
else if(rcorr==0b11111011)
{rcorr=0b11110111;
PORTD=mynum[Umin];}
else if (rcorr == 0b11110111)
{rcorr = 0b11101111;
PORTD=mynum[Dmin];}
else if (rcorr ==0b11101111)
{rcorr = 0b11011111;
PORTD=mynum[Uhora];}
else if (rcorr == 0b11011111)
{rcorr= 0b11111110;
PORTD=mynum[Dhora];}
// Delay1KTCYx(parpadeo);
}
}
//----------------------------------------------------------------------------
/************************ PROGRAMA PRINCIPAL *************************************/
/*********************************************************************************/
void main ()
{
//Configura PORTA como E/S digitales
PORTA = 0; //Inicializa PORTA borrando latches de salidas
LATA = 0; //Método Alternativo para borrar los latches de salidas
ADCON1 = 0x007; //Configura el A/D para entradas digitales
CMCON = 0x007; //Configura comparadores para entradas digitales
TRISA = 0x000; //Configura PUERTA A como salidas
//Configura PORTB como E/S digitales
PORTB=0x00; //Inicializa PORTB borrando latches de salidas
ADCON1=0x00A; //Puerto B como E/S digitales
TRISB = 0xFF;
INTCON2bits.RBPU=0; //PORT B PULL UP ACTIVADO
PORTB=0xFF;
//Configura PORTD como E/S digitales
PORTD= 0;
TRISD = 0; //Configura Puerto D todas salidas
Flags.Byte = 0;
INTCON = 0x20; //disable global and enable TMR0 interrupt
INTCON2 = 0x84; //TMR0 high priority
RCONbits.IPEN = 1; //enable priority levels
TMR0H = 0; //clear timer
TMR0L = 0; //clear timer
T0CON = 0x88; //set up timer0 - prescaler 1:8
INTCONbits.GIEH = 1; //enable interrupts
TRISC = 0;
LATC=0;
count=0;
// Coloca los valores iniciales 12:00 am
Useg = 0;
Dseg = 0;
Umin = 9;
Dmin = 5;
Uhora = 1;
Dhora = 1;
// Contador en 100
contL = 0x000;
rcorr = 0b11111110;
pm=1;
parpadeo=0;
Flags.Bit.None=0;
Flags.Bit.Ajuste=0;
// Prepara para iniciar a las 12:00 am
while (1)
{
if(progra==0){Flags.Bit.Ajuste=1;LATCbits.LATC1=1;parpadeo=500;}
while(Flags.Bit.Ajuste==1)
{
if(ajuste==0){Umin=Umin++;}
if(ajuste1==0){Uhora=Uhora++;}
if(pm==2){pm=0;}
if (Umin==10){Umin=0;Dmin=Dmin++;}
if(Dmin==6){Dmin=0;Uhora=Uhora++;}
if(Uhora==10){Uhora=1;Dhora=1;}
if (Dhora==1 && Uhora==2 && Flags.Bit.None==0)
{pm=pm++;Flags.Bit.None=1;}
if(Uhora==3 && Dhora==1){Uhora=1;Dhora=10;Flags.Bit.None=0;}
Delay10KTCYx(50);
if(progra==0 && Flags.Bit.Ajuste==1){Flags.Bit.Ajuste=0;LATCbits.LATC1=0;parpadeo=0;}
}
if (Flags.Bit.Timeout == 1) // Ve si pasaron 5 mseg.
{
Flags.Bit.Timeout = 0; //Borra bandera pasaron 5 ms
contL = contL++;}
if(contL==100){LATCbits.LATC0=0;LATCbits.LATC2=0;}
if(pm==2){pm=0;}
if (contL==200){contL=0;Useg=Useg++;LATCbits.LATC0=1;}
if (Useg==10){ Useg = 0;Dseg = Dseg ++;}
if (Dseg==6){Dseg = 0;Umin = Umin ++;}
if (Umin==10){Umin=0;Dmin=Dmin++;}
if(Dmin==6){Dmin=0;Uhora=Uhora++;LATCbits.LATC2=1;}
if(Uhora==10){Uhora=1;Dhora=1;}
if (Dhora==1 && Uhora==2 && Flags.Bit.None==0)
{pm=pm++;Flags.Bit.None=1;}
if(Uhora==3 && Dhora==1){Uhora=1;Dhora=10;Flags.Bit.None=0;}
//14090
}
}