Adaptadora ICSP PIC16F8X3/8X6

Esta placa que les traigo se trata de una placa adaptadora para los micro-controladores PIC16F873/873A/876/876A/883/883A/886/886A, ya que estos modelos tienen el mismo pinout pueden ser reemplazados fácilmente.
La placa es solamente adaptadora para facilitar proyectos, la misma cuenta con 3 conectores para puertos RA, RB y RC. También cuenta con pines de GND y +5V para facilitar el hardware externo (esta tensión es la que entrega el regulador de la fuente). 
Se ha incorporado un puente de diodos para proteger el circuito de posibles conexiones en polaridad inversa, es decir si se equivocan de polaridad el puente corregirá automáticamente esta. El regulador 7805 provee hasta 300mA sin disipador. pero si la corriente es mayor debe utilizarse un disipador.
El conector de carga es ICSP el mismo se cumple la función de programar en circuito y no tener que sacar el micro del zócalo, lo cual disminuye dramáticamente la vida útil de los pines del mismo. 
El reset se ha incorporado en forma de botón para reinicia el mismo.








DAC Virtual para MCU

Este circuito muy simple se trata de un sesudo DAC virtual el cual podría haber estado desarrollado a parir de una escalera R2R pero en este caso se ha utilizado un sumador de pesos ponderados, dándole un valor ponderado múltiplo de 2 a cada resistencia, el valor mínimo y máximo de cada resistencia sera en función de la corriente de salida del puerto del MCU, habrá que calcular el valor mínimo de la resistencia para no sobre cargar la corriente máxima de salida, en este caso se utiliza una resistencia de 220ohms.
El código fuente fue desarrollado a modo ejemplo para crear una señal "senoidal" con una resolución de 1024 pasos.
El circuito y firmware es a modo ejemplo, ya que se puede mejorar ampliamente con amplificadores operacionales, etc... es solo para mostrar el funcionamiento.


 

#include<16f628a.h>
#FUSES NOWDT,INTRC_IO,NOPUT,NOPROTECT,NOBROWNOUT,NOMCLR,NOLVP,NOCPD
#use delay(int=4000000)
void main()
{
int8 i;
   while(true){
      for(i=0;i<128;i++){
         output_b(i);
         delay_us(100);
      } 
      for(i=128;i>0;i--){
         output_b(i);
         delay_us(100);
      } 
   }
}