Ir al contenido principal

PROGRAMAR PIC EN C - IDENTIFICAR 0, 1 LOGICO [PIC -C]

Hola, continuamos con estas pequeñas guías  para saber como programar PIC's en C, ya sea usando MPLAB o PIC C Compiler. En anteriores entradas ya he escrito acerca de como usar estos programas y algo de teoría pero ya es hora de empezar a a aplicarla así que esta vez veremos cosas fáciles pero muy esenciales en ellas son; como el PIC puede identificar 1 o 0 lógico, prender leds,  usar IF y  algunos problemas al usar un botón.

Y recuerden si quieren ver las entradas anteriores pueden revisar en las etiquetas la llamada "PIC-C" y ahí podrán ver todas las relacionadas. Y bueno como siempre algo de teoría para estar relacionados:

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
0 , 1 LÓGICO


Los rangos de voltaje para los niveles lógicos, en los dispositivos TTL, Vcc normalmente es de +5V. En los circuitos integrados CMOS, VDD puede varias desde +3V hasta + 18 V, aunque +5V es el volatje mas utilizado cuando se emplean circuitos integrados.
 Un cero lógico es cualquier voltaje desde 0 hasta 0.8 V; un valor lógico 1 es cualquier voltaje desde 2 hasta 5 V. Los voltajes que no se encuentran en esos rangos son indeterminados y no deben emplearse como entradas ya que el uso de estos valores asegura la forma en que responda el circuito

Entradas sin conectar (entrada "flotante")

Una entrada flotante en TTL actúa como un nivel lógico 1(generalmente). Lo que nos dice que el circuito actúa como si la entrada tuviese conectado un nivel logico alto. Aunque el nivel de cd esta entre los 1.4 y 1.8 V esta en la región de indeterminación, por eso generalmente lo toma como un 1 logico.
 La entrada flotante de un CMOS no tiene un valor espeficico de volatej, lo que hará es fluctuar de forma aleatoria, a medida que capta ruido.

Lo anterior solo ocurre si quieren hacerlo en las pruebas practicas pero no en las simulaciones. 

BOTONES

 Un botón simplemente es un simple interruptor mecanismo para controlar algún aspecto de una máquina o un proceso. 


Y en electrónica son muy utilizados, ya sea para iniciar cualquier sistema que se tenga. Y la imagen anterior se puede apreciar dos formas de conectar un botón de entregarnos un uno o un cero lógico a su salida por "pull-up" y "pull-down". El Pull-down es el del lado derecho y sin presionar el botón nos manda un 1 y cuando se presiona nos mando un 0. El Pull-up lado izquierdo es de manera contraria, sin presionar tenemos un 0 a la salida (por eso el led apagado) y cuando se presiona nos manda un 1 (y así se prenderá el led).

EL EFECTO REBOTE 
En el momento de presionar un botón pulsador o cualquier conmutador electromecánico es inevitable que se produzca un pequeño arco eléctrico durante el breve instante en que las placas del contacto se aproximan o se alejan de sus puntos de conexión, ya que las distancias microscópicas entre los puntos a diferente potencial son suficientes para romper por un instante la resistividad del aire. Este fenómeno se conoce como rebote (bounce) y se ilustra en la siguiente figura

Duración del rebote.- La experiencia empírica indica que el periodo transitorio de un rebote depende entre otros factores, de la calidad de los switches y de la rapidez de su accionamiento, pero a lo más puede durar unos 20 milisegundos,



//////////////////////////////////////////////////////

USANDO IF, IF ELSE 
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include <16F1938.h>     //PIC A USAR

//Los fusibles que usará nuestro PIC, recuerden que cambian dependiendo del PIC a usar. Y si gustan pueden escribir los fusibles de la sig manera. #FUSES INTRC_IO, NOWDT, WST_SW,...
#FUSES INTRC_IO             
#FUSES NOWDT                    
#FUSES INTRC_IO                  
#FUSES WDT_SW                    
#FUSES NOBROWNOUT                
#FUSES NOLVP                    
          
//Igualmente el cristal de cuarzo que usarán para trabajar depende de lo que necesiten
#use delay(clock=4000000)
///////////////////////////////////////
//----------NOMBRAR PRINES----------
#define LED0 pin_b0
#define LED1 pin_b1
#define LED2 pin_b2
#define LED3 pin_b3
#define LED4 pin_b4
#define LED5 pin_b5
#define LED6 pin_b6
#define LED7 pin_b7
//Esto es una forma de nombrar a los pines de cada puerto, resulta a menudo util nombrarlo segun lo requiramos

//----------------VARIABLES GLOBALES--------------


char valor2[8];
int16 hola;
////////////////////////////////////////////
 //---------------LIBRERIAS EXTERNAS----------- 
//#include <lcd.c> usar librerias



///////////////////////////////////////
//---------------SUB-RUTINAS--------------
void cargando()  //Nombre de tu sub-rutina

{
/*
//HOLA SOY UNA SUB RUTINA
if(input(pin_c0)){  //En entradas posteriores veremos para que sirve las comandos input
while(TRUE) { 

delay_ms(100);
if(!input(pin_c0))  break;
}
}
*/
}
//------------------------------------------


////////////////////////////////////////////
//-------PROGRAMA--------------
void main() 


////////////////////////
//-----------------PUERTOS--------------
set_tris_a(0xff); //Todo puerto A como entradas
set_tris_b(0x00); //Todo puerto B como salidas
set_tris_c(0xC0); //Solo los primeros 4 pines son salidas
//1 - Entradas
//0 - Salidas
//En este caso todos son entradas

/////////////////////////////////////////////
//-------LIMPIAR-PUERTOS--------------
output_c(0x00); 
output_b(0x00); 
output_a(0x00);
//
////////////////////////
while(true) 
  { 
    if  (input(pin_a0)){//Si en a0 al un 1 entonces
  output_high(LED0);
        delay_ms(500);
output_high(LED1);
delay_ms(500);
output_high(LED2);
delay_ms(500);
output_high(LED3);
delay_ms(500);
output_high(LED4);
delay_ms(500);
output_high(LED5);
delay_ms(500);
output_high(LED6);
delay_ms(500);
output_high(LED7);
delay_ms(500); 
//Como pueden apreciar solo está prendiendo un led cada 500 mseg de todo el puerto b
  } //Ahora pongamos un ejemplo de un else if

if(input(pin_a0)){ 
//Si se sigue presionando el botón entonces también prenderá el puerto C, pero esto como segunda instrucción
output_c(0x0f); 
delay_ms(500); 
}
else if(!input(pin_a2)) { //Si es 0 entonces  prenderá los leds un seg, solo lo hará si no el primer if
output_b(0x00); 
output_high(pin_c0);

output_high(pin_c1);
output_high(pin_c2);
output_high(pin_c3);

delay_ms(1000); 
}
else //Si no se cumplió las dos condiciones ejecutará esto
 output_b(0x70); 
output_c(0x07); 
delay_ms(500); 
output_b(0x00); 
output_c(0x00); 
delay_ms(500); 

}

}
//////////////////////////////////


Como ya saben después de tener el codigo fuente, deben compilarlo y pueden probarlo en físico o en ISIS PROTEUS, puede tener la sig. forma pero depende de ustedes como quede y recuerden al compilarlo debió decir Build Succeeded y debió crear el .hex para que así lo puedan probar.
Si gustan pueden cambiar los tiempos para apreciar mejor lo que pasa con las instrucciones, o también modificarlas para ver lo que pasa. Eso es todo por el momento espero les sirva de algo.


////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

PARTE 3:

Comentarios

Entradas populares de este blog

PROGRAMAR EN MICROCODE (PIC BASIC PRO)[PIC]

Hola, aquí les traigo un pequeño manual de como programar un PIC en MICROCODE. Pero antes de empezar con el ejemplo les dejare un poco de teoría para que se familiaricen un poco acerca de que trata este programador. Microcóde es un lenguaje de instrucciones a nivel de hardware o estructuras de datos que intervienen en la ejecución de instrucciones de código máquina de nivel superior en las unidades centrales de procesamiento, y en la implementación de la lógica interna de muchos controladores de canal, los controladores de disco, controladores de interfaz de red, procesadores de red, unidades de procesamiento de gráficos, y otros equipos. Reside en especial de memoria de alta velocidad y traduce las instrucciones de la máquina en secuencias de operaciones detalladas a nivel de circuito. Se ayuda a separar las instrucciones de la máquina de la electrónica subyacentes de modo que las instrucciones pueden ser diseñados y alterados más libremente. También hace que sea factible constr

PROGRAMAR EN PIC C COMPILER [CCS - PIC - C]

Para las personas que están un poco más familiarizadas a hacer programas en lenguaje C o sus derivados, en esta sección les traigo un manual de como programar un PIC usando el lenguaje C, pero como siempre un poco de teoría para que estén familiarizados un poco. PIC C Compiler  es un compilador C que contienen operadores estándar del lenguaje C y funciones incorporados en bibliotecas que son específicas a los registros de PIC, proporcionando a los desarrolladores una herramienta poderosa para el acceso al hardware las funciones del dispositivo desde el nivel de lenguaje C.  El compilador de CCS (Custom Computer Services) contiene más de 307 funciones integradas que simplifiquen el acceso al hardware, mientras que la producción eficiente y altamente optimizado código. Se incluyen funciones de hardware del dispositivo de características tales como: * Temporizadores y módulos PWM  * Convertidores A / D  * de datos on-chip EEPROM  * LCD controladores  * Memoria externa

STRUCTURE DECK - FREEZING CHAINS (Yu-Gi-Oh!)

En el 2020 se realizó el  Structure Deck Voting Contest OCG para elegir el nuevo deck de estructura que se lanzaría en el 2021. Y el ganador fue el arquetipo Ice-Barrier. En el siguiente video se muestran con realidad aumentada los modelos 3D de las cartas que se pueden encontrar. Continuando con la misma temática del 2019 Konami realizó una votación para elegir el próximo Structure Deck OCG, que posteriormente se llegaría también a TCG. Se enlistaran los arquetipos participantes del que obtuvo más votos al de menos: Ice Barrier Cyber Style Gusto Trickstar Morphotronic Kuriboh Kaiju Star Seraph Tour Guide Superheavy Samurai El Structure Deck: Freezing Chains fue lanzado el 19 de febrero del 2021, incluye 46 cartas (Deck Principal de 41 cartas + Deck Extra de 5 cartas): 37 Comunes 3 Súper Raras 6 Ultra Raras 1 Tapete de Juego  El regreso de Trishula A medida que el invierno se hace más crudo, la Prisión Helada es incapaz de contener la creciente tormenta en su interior, anunciando el re