lunes, 16 de diciembre de 2013

Documentación PIC 16F877A - Diseño de placa + programa comunicación serie

DOCUMENTACIÓN - 
PIC 16F877A

Listado de componentes:
 



Características de la placa: 
La placa del PIC 16F877A está diseñada sobre una placa simple de cobre, empleando la técnica del ácido para hacer las pistas.

Las dimensiones de la placa son 7,9 cm. de ancho y 7,5 cm. de largo.



Este es nuestro diseño de la PCB:

Para descargar a tamaño original, listo para imprimir, hacer click en este enlace.



Esta es nuestra serigrafía:

Para descargar a tamaño original, listo para imprimir, hacer click en este enlace (la imagen ya lleva el mirror X).


Y así quedaría la placa final:



Programa y explicación: 
Para crear el programa usamos PICC Compiler, una herramienta para programar gran variedad de PICs usando el lenguaje C. 


#include "D:\Modulo Electronica\segundo año\16f877A\programa luces rs232\luces.h"
// Primero tenemos que usar el PIC Wizard para que el programa nos genere el fichero ***.h. 
// En PIC Wizard indicamos el PIC indicado (16F877A), la velocidad del cristal que hemos 
// puesto, en nuestro caso 4MHz, también comprobamos que la opción de RS232 esta activa 
// y el Watchdog desactivado.


void setup() // Función de configuración
{
  SET_TRIS_B(0x00); // Configuramos todo el puerto B como salida
  OUTPUT_LOW(PIN_B0); // Ponemos todas las salidas a nivel bajo por seguridad ya
  OUTPUT_LOW(PIN_B1); // que podríamos tener un estado indeterminado
  OUTPUT_LOW(PIN_B2);
  OUTPUT_LOW(PIN_B3);
  OUTPUT_LOW(PIN_B4);
  OUTPUT_LOW(PIN_B5);
  OUTPUT_LOW(PIN_B6);
  OUTPUT_LOW(PIN_B7);
  delay_ms(800); // Pausa de 800 ms antes de empezar
}



void loop() // Función repetitiva
{
 char tecla; // Creamos la variable "tecla"
  WHILE(1) // Bucle infinito
  {
     printf("tecla = %c \n",tecla); // Sacamos por pantalla el contenido de "tecla"
     if(kbhit()) // Solo entra si se detecta que se pulsa una tecla
     {
         tecla = getc(); // Guarda el valor de la tecla pulsada en la variable "tecla"
         if(tecla=='p')OUTPUT_LOW(PIN_B0); // Si se pulsa "p", se apaga el led
if (tecla=='o')OUTPUT_HIGH(PIN_B0); // Si se pulsa "o", se enciende el led
      }  
      delay_ms(200);       // Pausa de 200 ms
   }
}


void main() // Función main generada por el Wizard. Tenemos que
{ // llamar a setup() y loop() desde aquí.
  setup_adc_ports(NO_ANALOGS);
  setup_adc(ADC_OFF);
  setup_psp(PSP_DISABLED);
  setup_spi(FALSE);
  setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
  setup_timer_1(T1_DISABLED);
  setup_timer_2(T2_DISABLED,0,1);
  setup_comparator(NC_NC_NC_NC);
  setup_vref(FALSE);
  setup(); // Llamada a la función de configuración
  loop(); // Llamada a la función de bucle
}
                     

En este enlace podemos ver el programa original sin modificar (no se muestran los comentarios) por si por algún error este no funcionara.

Con este programa queremos controlar un led en la patilla RB0 pulsando la tecla "o" para encenderlo y la "p" para apagarlo. Para ello, una vez configurado el puerto B como salida, creamos la función de bucle en la cual hacemos varias comprobaciones.

Lo primero es detectar que se ha pulsado una tecla cualquiera desde nuestro ordenador y si no es así, el programa salta ese paso, pero si en efecto detecta que se ha pulsado una tecla, pasamos a la siguiente comprobación, que consiste en detectar si esa tecla pulsada es una "o" (para encenderlo) o una "p" (para apagarlo). Si no se pulsa ninguna de estas teclas, la variable "tecla" guardará igualmente esa tecla pero el led mantendrá su estado anterior y el programa seguirá su curso.

Constantemente mostramos en pantalla el contenido de la variable "tecla" para hacer saber al usuario cual es su último estado, así como para comprobar que el programa no se ha quedado bloqueado.


Descripción:
Este es un programa de prueba para comprobar que funciona la comunicación serie.
El programa consiste en un led en la patilla RB0 que se encenderá cuando pulsemos la tecla “o”, se apagará cuando pulsemos la tecla “p”, y mantendrá su anterior estado cuando se pulse otra tecla cualquiera.

El contenido de la variable "tecla" se muestra por pantalla cada 1/5 segundos para comprobar que el PIC no se haya quedado bloqueado.

Como vemos que la comunicación serie ha sido un éxito, podemos ver actuar los Leds que se han  puesto en las patillas Tx y Rx, los cuales se iluminarán en función de la cantidad de datos que se están transmitiendo.


Fotos del proyecto:



Diseñado, construido y programado por:

Jorge Fuentes Celdrán
Jose Antonio Victoria Francés

No hay comentarios:

Publicar un comentario