TODOPIC
Otros Microcontroladores / Dispositivos programables => Microcontroladores 8 bits => Mensaje iniciado por: PabloElMatatan en 10 de Diciembre de 2021, 03:54:47
-
Soy nuevo en programacion de PIC. Estoy diseñando un circuito para una bomba de tiempo. Uso el compilador XC8 y proteus. El microcontrolador es el pic 16f88. Al pic le conecte un teclado matricial, un decodificador 4511. Al decodificador 4 displays. El tema del temporizador y multiplexacion de display lo puede hacer. Lo que odio y ya no aguanto es que el pic en vez de ponerme en el display un 0 me pone un 7. Alguien sabe porque? Yo conecte el 4511 al puerto A, y si pongo el puerto A en 0, me tiene que aparecer un 0 no un 7. Es frustrante porque yo si quiero usar un while por ejemplo: while(tecla1==0) no puedo porquer el pic pone al Puerto A en 7 automaticamente. :c. OSea es normal que haga eso el pic?
Puse una parte de mi codigo para que vean que nunca pongo el Puerto A en 7:
int tecla1=0,tecla2=0,tecla3=0,tecla4=0;
TRISA=0;
TRISB=0b00001111;
while(tecla1!=6){
PORTA=tecla1;
D0=1;
__delay_ms(3);
if(fila_1){tecla1=1;}
if(fila_2){tecla1=4;}
if(fila_3){tecla1=7;}
D0=0;
PORTA=tecla2;
D1=1;
__delay_ms(3);
if(fila_1){tecla1=2;}
if(fila_2){tecla1=5;}
if(fila_3){tecla1=8;}
if(fila_4){tecla1=0;}
D1=0;
PORTA=tecla3;
D2=1;
__delay_ms(3);
if(fila_1){tecla1=3;}
if(fila_2){tecla1=6;}
if(fila_3){tecla1=9;}
D2=0;
PORTA=tecla4;
D3=1;
__delay_ms(3);
D3=0;
}
-
Soy nuevo en programacion de PIC. Estoy diseñando un circuito para una bomba de tiempo. Uso el compilador XC8 y proteus. El microcontrolador es el pic 16f88. Al pic le conecte un teclado matricial, un decodificador 4511. Al decodificador 4 displays. El tema del temporizador y multiplexacion de display lo puede hacer. Lo que odio y ya no aguanto es que el pic en vez de ponerme en el display un 0 me pone un 7. Alguien sabe porque? Yo conecte el 4511 al puerto A, y si pongo el puerto A en 0, me tiene que aparecer un 0 no un 7. Es frustrante porque yo si quiero usar un while por ejemplo: while(tecla1==0) no puedo porquer el pic pone al Puerto A en 7 automaticamente. :c. OSea es normal que haga eso el pic?
Puse una parte de mi codigo para que vean que nunca pongo el Puerto A en 7:
int tecla1=0,tecla2=0,tecla3=0,tecla4=0;
TRISA=0;
TRISB=0b00001111;
while(tecla1!=6){
PORTA=tecla1;
D0=1;
__delay_ms(3);
if(fila_1){tecla1=1;}
if(fila_2){tecla1=4;}
if(fila_3){tecla1=7;}
D0=0;
PORTA=tecla2;
D1=1;
__delay_ms(3);
if(fila_1){tecla1=2;}
if(fila_2){tecla1=5;}
if(fila_3){tecla1=8;}
if(fila_4){tecla1=0;}
D1=0;
PORTA=tecla3;
D2=1;
__delay_ms(3);
if(fila_1){tecla1=3;}
if(fila_2){tecla1=6;}
if(fila_3){tecla1=9;}
D2=0;
PORTA=tecla4;
D3=1;
__delay_ms(3);
D3=0;
}
¿Estas configurando los bits 0, 1, 2, 3 y 4 de PORTB como entradas?
¿Pero a su vez, esos mismo bits son las salidas para activar el display?
-
Tampoco veo en que parte configuras el puerto A como digital.
elreypic.
-
El puerto A lo configuró en las 1ras. líneas dónde dice TRISA=0
El tema es que me parece que le faltan las resistencias pull-dwn en las entradas multiplexadas al PIC desde el teclado.
Habrá que seguir, cómo se asignan los valores a las variables fila_X.
-
El puerto A lo configuró en las 1ras. líneas dónde dice TRISA=0
El tema es que me parece que le faltan las resistencias pull-dwn en las entradas multiplexadas al PIC desde el teclado.
Habrá que seguir, cómo se asignan los valores a las variables fila_X.
El Rey creo que se refiere a deshabilitar el ADC y el comparador analógico.
-
#define fila_1 RB0
#define fila_2 RB1
#define fila_3 RB2
#define fila_4 RB3
#define D0 RB4
#define D1 RB5
#define D2 RB6
#define D3 RB7
esos son los pines del puerto b
-
#define fila_1 RB0
#define fila_2 RB1
#define fila_3 RB2
#define fila_4 RB3
#define D0 RB4
#define D1 RB5
#define D2 RB6
#define D3 RB7
esos son los pines del puerto b
-
#define fila_1 RB0
#define fila_2 RB1
#define fila_3 RB2
#define fila_4 RB3
#define D0 RB4
#define D1 RB5
#define D2 RB6
#define D3 RB7
esos son los pines del puerto b
(https://pbs.twimg.com/media/FGhmSAsXMAEzRdM?format=jpg&name=small)
Fuente:
https://www.unioviedo.es/ate/alberto/TEMA4-puertos.pdf (https://www.unioviedo.es/ate/alberto/TEMA4-puertos.pdf)
-
Dominus, el PIC16F88 posee el registro ANSEL y el ADCON1 nada que ver con lo que mostras.
https://ww1.microchip.com/downloads/en/DeviceDoc/30487D.pdf (Este es el link al datasheet del micro)
Pagina 113
Para el autor del POST.
No hay nada mas fiel que el datasheet del micro.
Por otro lado y lo mas importante, OBSERVANDO EL DATASHEET del microcontrolador, RA5 es únicamente ENTRADA! ( Pagina 8 del datasheet )
Por lo cual ese pin no le sirve para activar el display. Usar otro pin. Específicamente te quedaría mejor intercambiar las entradas del teclado que son del puerto RB, por el puerto RA.
#define fila_1 RA2
#define fila_2 RA3
#define fila_3 RA4
#define fila_4 RA5
#define D0 RB4
#define D1 RB5
#define D2 RB6
#define D3 RB7
Lo que no se que es el tecla1, tecla2, tecla3 y tecla4. Pero eso es para otro tema.
-
Dominus, el PIC16F88 posee el registro ANSEL y el ADCON1 nada que ver con lo que mostras.
Tienes razón, no puse atención que microcontrolador usaba. Sólo quería indicar lo que el Rey intentaba decir por arriba acerca de configurar como digitales los terminales del MCU.