Autor Tema: elección de PIC básico  (Leído 4443 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Kspids

  • PIC16
  • ***
  • Mensajes: 192
elección de PIC básico
« en: 25 de Octubre de 2018, 08:45:56 »
Buenas a todos! qué tal?

Necesito un pic con 8 GPIO, (5 para salidas y 3 para entradas) sin tener en cuenta la memoria que tenga o velocidades, etc ya que su función será la de activar una salida cuando una de las entradas lo indiquen.

Saludos!!!
« Última modificación: 25 de Octubre de 2018, 09:20:55 por Kspids »

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re:elección de PIC básico
« Respuesta #1 en: 25 de Octubre de 2018, 11:00:26 »
Existen decenas de microcontroladores PIC con esas características.
Puedo sugerirte el PIC16F505. Pero te recomiendo echarle un vistazo a la pagina de microchip, específicamente en su tabla de busqueda parametrica. En tu caso busca micros de 14 pines, que como te dije hay decenas de ellos.

https://www.microchip.com/ParamChartSearch/chart.aspx?branchID=1002

elreypic.

Desconectado Ce.O

  • PIC10
  • *
  • Mensajes: 13
Re:elección de PIC básico
« Respuesta #2 en: 25 de Octubre de 2018, 15:17:19 »
un 16f628a

Desconectado Kspids

  • PIC16
  • ***
  • Mensajes: 192
Re:elección de PIC básico
« Respuesta #3 en: 26 de Octubre de 2018, 06:16:05 »
Gracias!
Al final me decanto por el PIC16F526.

Lo que no veo son ejemplos de proyectos o códigos con este micro. Sabéis algún enlace donde me pueda apoyar ya sea a nivel de esquemático o de código?

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re:elección de PIC básico
« Respuesta #4 en: 26 de Octubre de 2018, 09:34:54 »
Gracias!
Al final me decanto por el PIC16F526.

Lo que no veo son ejemplos de proyectos o códigos con este micro. Sabéis algún enlace donde me pueda apoyar ya sea a nivel de esquemático o de código?

Que tal kspids,

Estas en el foro mas grande de microcontroladores pic en el mundo, en donde hay miles de ejemplos de códigos, en ensamblador, basic y c. Lo maravilloso de estos microcontroladore es que básicamente todos los de la serie 16 (PIC16) son iguales en cuanto a sus instrucciones, se diferencian entre sí por la capacidad de memoria de programa, de memoria de datos, ram o los periféricos que contiene. Por lo que ejemplos específicos para el PIC16F526 no vas a encontrar, pero te puedo decir que casi cualquier ejemplo de otro PIC te va a servir para este, sobre todo si solo manipula los puertos de entrada y salida.
La recomendaciones son:
1) Te a la mano la hoja de datos. Este es el primero y más importante
2) Decide un lenguaje de programación: C, Basic, Pascal, ensamblador
3) ten a la mano el manual del lenguaje de programación escogido
4) obtén una copia (por lo menos un demo) del lenguaje a usar
5) obtén un programador como el pickit2, pickit3, pickit4, etc
6) Pon manos a la obra.

Espero que esto te sirva para iniciarte. En este foro como te dije existen miles de ejemplos de códigos para iniciar.

Elreypic

Desconectado Kspids

  • PIC16
  • ***
  • Mensajes: 192
Re:elección de PIC básico
« Respuesta #5 en: 27 de Octubre de 2018, 02:56:11 »
buenas!

suponía que era como dices pero por asegurarme, jeje. He visto que en proteus hay para simular así que ayer me puse manos a la obra jeje. El lenguaje que utilizaré serán dos, el ensamblador que lo manejo un poco más y el C que lo manejo menos (a la gente le suele extrañar pero así fue mi educación en la carrera...) jeje.
Preguntaba por esquemáticos ya que he visto que hay veces que le ponen en la pcb un oscilador de 4MHz y en otros casos no. En eso me entran dudas, en cuanto qué tiene que rodear al PIC y en qué pines (a parte de los IO). Para este micro que hablo solo cabe poner o no el oscilador porque poco más puede llevar a parte de los condensadores de desacoplo.

El pickit3 ya lo tengo a mano, y las instrucciones tb!

Gracias por todo compañeros!!

Desconectado Kspids

  • PIC16
  • ***
  • Mensajes: 192
Re:elección de PIC básico
« Respuesta #6 en: 30 de Octubre de 2018, 08:10:20 »
Por cierto, ya me he puesto a programarlo pero estoy intentado hacer la parte de pulsar y que se quede encendido el led y volver a pulsar y que se apague, pero no me hace nada y la salida del led parpadea haga lo que haga. Os paso el esquema y el código (ccs) por si me podéis ir diciendo fallos que veis.

Desconectado Eduardo2

  • PIC24H
  • ******
  • Mensajes: 1004
Re:elección de PIC básico
« Respuesta #7 en: 30 de Octubre de 2018, 09:36:47 »

Es que en tu código cuando se pulsa se activa el led y en la comparación siguiente se apaga.  Una vez que soltás queda apagado.

Cambiá las comparaciones por:
Citar
        if (input(boton)==1) {
           output_toggle(verde_1);
           while(input(boton)==1); 
        }

De todas formas eso es para el simulador porque para el circuito real habría que hacer algo antirrebote.


No se por qué usás el header del 16F526 y en Proteus el 16F506

Desconectado Kspids

  • PIC16
  • ***
  • Mensajes: 192
Re:elección de PIC básico
« Respuesta #8 en: 30 de Octubre de 2018, 10:32:43 »
Porque al menos mi proteus no tiene el modelo en la librería... y el más parecido es ese.

Cómo haría para antirrebote?

Desconectado Eduardo2

  • PIC24H
  • ******
  • Mensajes: 1004
Re:elección de PIC básico
« Respuesta #9 en: 30 de Octubre de 2018, 12:31:52 »
En su versión mas básica es suficiente insertar un retardo de 100ms...200ms

Código: [Seleccionar]
    if(input(boton)==1){
        output_toggle(verde_1) ;
        do delay_ms(100) ; while(input(boton)==1);
    }

Pero puede ser mas elaborado si agregamos autorepetición, el botón sea muy "ruidoso" o simplemente gustos del programador.

Desconectado Kspids

  • PIC16
  • ***
  • Mensajes: 192
Re:elección de PIC básico
« Respuesta #10 en: 31 de Octubre de 2018, 03:35:43 »
Así finalmente es como he conseguido hacerlo:

for(;;){

if (input(boton)==1){
   w++;
   output_high(verde_1);   
   do delay_ms(100);
   while(input(boton)==1);
}
else if (w>1){
   w=0;   
   output_low(verde_1);
}

}

Si tienen alguna mejora agradecería que la aportaran ya que esto se va a cargar en una aplicación
« Última modificación: 31 de Octubre de 2018, 07:08:03 por Kspids »

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re:elección de PIC básico
« Respuesta #11 en: 31 de Octubre de 2018, 07:39:06 »
Que tal kspids,

En realidad la opción que te da Eduardo es la mejor, porque es más compacta y consume mucho menos memoria de programa.

Tu código tiene un detalle, la primera vez que presionas el interruptor se enciende el led, luego incrementas tu variable w a 1. Esperas a que se libere el interruptor, vuelves a presionar, peo el led no se apaga sino que se enciende lo que ya está encendido e incrementas la variable w a 2. Luego esperas a que se libere el interruptor. Una vez liberado ahí es que entonces se cumple la condición de w>1 y entonces se apaga el led.
En resumen:
1) presionas el interruptor e inmediatamente de enciende el led
2) esperas a que se libere el interruptor
3) liberas el interruptor y el led sigue encendido
4) vuelves a presionar el interruptor, pero el led no se apaga, se mantiene encendido
5) esperas a que se libere el interruptor
6) liberas el interruptor y es entonces que se apaga tu led

En cambio si usas la opción que te presenta Eduardo, cada vez que presionas el interruptor el led se enciende y luego al presionarlo nuevamente se apaga.
Me inclino definitivamente a la opción de Eduardo

Elreypic

Desconectado Kspids

  • PIC16
  • ***
  • Mensajes: 192
Re:elección de PIC básico
« Respuesta #12 en: 31 de Octubre de 2018, 08:17:03 »
Vale!! es que lo intenté pero no funcionaba. Ahora que he vuelto a probar como dice Eduardo2 es cierto que funciona, algo no quitaría de lo que tenía puesto...

Por cierto, a parte de esta entrada y salida, tengo varias más y las tengo colocadas en condicionales, por ejemplo:

#include<16f526.h>
#fuses XT, NOWDT
#use delay (clock= 4000000)
#byte TRISB=0x86
#byte PORTB=0x06
#byte TRISC=0x87
#byte PORTC=0x07

#define boton PIN_C1
#define verde1 PIN_B0

#define rojo1 PIN_B2
#define verde2 PIN_C0
#define rojo2 PIN_C2
#define dm1 PIN_C3
#define dm2 PIN_C4
#define valvula PIN_C5

int w=0;
byte CONST salida[2]={0x0,0x1};     //Constante de dos posiciones

void main()
{
TRISC=0B00011010;     //Configuración de entradas(1) y salidas (0) en el puerto C
TRISB=0B00000000;     //Configuración de entradas(1) y salidas (0) en el puerto B
PORTB=0;              //Inicialización del puerto B
PORTC=0;              //Inicialización del puerto C

for(;;){


   if (input(dm1)==0){           
      output_high(verde1);     
      }
   else if (input(dm1)==1){   
      output_low(verde1);
      output_high(rojo1);
      output_high(valvula);     
      }
      }

}
}


Este tramo de código viene a decir que si si se cumple el primer if entonces luce un led y si se cumple el segundo if entonces se apaga el primero y se enciende el segundo. Hasta ahí lo hace. El problema viene cuando vuelve a cumplirse el primer if y entonces se queda clavado en el segundo, es como si cuando llega al segundo if no pudiera retornar al primero.

AYUDA!

Desconectado Eduardo2

  • PIC24H
  • ******
  • Mensajes: 1004
Re:elección de PIC básico
« Respuesta #13 en: 31 de Octubre de 2018, 09:13:20 »
...
Este tramo de código viene a decir que si si se cumple el primer if entonces luce un led y si se cumple el segundo if entonces se apaga el primero y se enciende el segundo. Hasta ahí lo hace. El problema viene cuando vuelve a cumplirse el primer if y entonces se queda clavado en el segundo, es como si cuando llega al segundo if no pudiera retornar al primero.

Nunca apagás el 2do led. 

Debería ser:

Código: [Seleccionar]
    for(;;)
    {       
        if (input(dm1)==0){
            output_high(verde1);     
            output_low(rojo1);     // apago el led
            output_low(valvula);   //  apago la EV , si es que este evento debe apagarla
        }       
        else                       // dm1 es 1 o 0 , para qué comparar de nuevo
        {   
            output_low(verde1);
            output_high(rojo1);
            output_high(valvula);     
        }
    }

Desconectado Kspids

  • PIC16
  • ***
  • Mensajes: 192
Re:elección de PIC básico
« Respuesta #14 en: 31 de Octubre de 2018, 09:16:27 »
Ok, la verdad es lógico :)

Ya lo he arreglado. Problema de proteus