martes, 23 de diciembre de 2014

Radio-baliza automatica Hecha con PIC 12F629

Radio-baliza automática

Hola Seguidores del blog, hace un tiempo un conocido de internet me pidio que le ayude con el codigo de una radio-baliza y me puse y salio esta version de radio-baliza automatica hecha con PIC. Por el momento solo emite en codigo morse el mensaje que uno le pone en el codigo del PIC, como por ejemplo su identificacion de emisora. Para emitir un mensaje solo deben agregar al main del codigo esta linea por ejemplo:
                                                      Mensaje="CA6UGT";
                                                      Tx_morse(Mensaje);
con esa linea emitira el mensaje CA6UGT en codigo morse...ustedes lo pueden cambiar por el que sea identificativo de su emisora y antes de emitir habilitar algun PIN no usado para manejar el emisor. Aqui el codigo del PIC:

--------------------------------------------------------------------------------------------------------------------------------
#include <12F629.h>
#FUSES NOWDT                    // No Watch Dog Timer
#FUSES INTRC_IO                 // >>> Oscilador interno, no CLKOUT
#FUSES PUT                      // Power Up Timer
#FUSES NOMCLR                   // Master Clear pin used for I/O
#FUSES BROWNOUT                 // Reset when brownout detected
#FUSES PROTECT                // Code not protected from reading
#FUSES NOCPD                    // No EE protection
#byte PortA=0x05
#use delay(int=4000000,wdt) // Especifica al compilador que hace uso del OSC interno
int8 MedioSeg=0,Segundos=0;
int16 SegundosRestantes=0;
const int8 duracionPunto=100;
int1 bit=0;
unsigned char Mensaje[7]=" ";
#include <Mitones.c>
#include <PuntosRayas.c>
const unsigned char Table[100]={
0b00000001,//032 espacio interpalabra 7 units
0b01101011,//033 ! -ú-ú--
0b01010010,//034 " ú-úú-ú
0b00111011,//035 # --ú-- para usar la ¥
0b10001001,//036 $ úúú-úú-
0b00000001,//037 % No usado
0b00101000,//038 & ú-úúú Wait
0b01011110,//039 ' ú----ú
0b00110110,//040 ( -ú--ú
0b01101101,//041 ) -ú--ú-
0b00000001,//042 * No usado
0b00101010,//043 + ú-ú-ú
0b01110011,//044 , --úú--
0b01100001,//045 - -úúúú-
0b01010101,//046 . ú-ú-ú-
0b00110010,//047 / -úú-ú
0b00111111,//048 0 -----
0b00101111,//049 1 ú----
0b00100111,//050 2 úú---
0b00100011,//051 3 úúú--
0b00100001,//052 4 úúúú-
0b00100000,//053 5 úúúúú
0b00110000,//054 6 -úúúú
0b00111000,//055 7 --úúú
0b00111100,//056 8 ---úú
0b00111110,//057 9 ----ú
0b01111000,//058 : ---úúú
0b01101010,//059 ; -ú-ú-ú
0b00000001,//060 < No usado
0b00110001,//061 = -úúú-
0b00000000,//062 > No usado
0b01001100,//063 ? úú--úú
0b01011010,//064 @ ú--ú-ú
0b00000101,//065 A ú-
0b00011000,//066 B -úúú
0b00011010,//067 C -ú-ú
0b00001100,//068 D -úú
0b00000010,//069 E ú
0b00010010,//070 F úú-ú
0b00001110,//071 G --ú
0b00010000,//072 H úúúú
0b00000100,//073 I úú
0b00010111,//074 J ú---
0b00001101,//075 K -ú-
0b00010100,//076 L ú-úú
0b00000111,//077 M --
0b0000110,//078 N -ú
0b00001111,//079 O ---
0b00010110,//080 P ú--ú
0b00011101,//081 Q --ú-
0b00001010,//082 R ú-ú
0b00001000,//083 S úúú
0b00000011,//084 T -
0b00001001,//085 U úú-
0b00010001,//086 V úúú-
0b00001011,//087 W ú--
0b00011001,//088 X -úú-
0b00011011,//089 Y -ú--
0b00011100,//090 Z --úú
0b00000001,//091 [ No usado
0b00000001,//092 \ No usado
0b00000001,//093 ] No usado
0b00000001,//094 ^ No usado
0b01001101,//095 _ úú--ú-
0b00000001,//096 ` No usado
0b00000101,//097 a ú-
0b00011000,//098 b -úúú
0b00011010,//099 c -ú-ú
0b00001100,//100 d -úú
0b00000010,//101 e ú
0b00010010,//102 f úú-ú
0b00001110,//103 q --ú
0b00010000,//104 h úúúú
0b00000100,//105 i úú
0b00010111,//106 j ú---
0b00001101,//107 k -ú-
0b00010100,//108 l ú-úú
0b00000111,//109 m --
0b00000110,//110 n -ú
0b00001111,//111 o ---
0b00010110,//112 p ú--ú
0b00011101,//113 q --ú-
0b00001010,//114 r ú-ú
0b00001000,//115 s úúú
0b00000011,//116 t -
0b00001001,//117 u úú-
0b00010001,//118 v úúú-
0b00001011,//119 w ú--
0b00011001,//120 x -úú-
0b00011011,//121 y -ú--
0b00011100,//122 z --úú
0b00000001,//123 { No usado
0b00000001,//124 | No usado
0b00000001,//125 } No usado
0b00000001,//126 ~ No usado
0b00000001 //127  No usado
};
void ProducirSonidos()
{
if (bit==0)
   {
   Punto();
   gap();
   }
else
   {
   Raya();
   gap();
   }
}
void Barrido(unsigned char Cmorse)
/*{
int8 i=0,k=0;
int1 codificar=0;
for(i=7;i>=0;--i)
 {
 if (codificar==1)goto Reproducir;
 if(bit_test(Cmorse,i))codificar=1;
 goto nada;
Reproducir:
           bit=bit_test(Cmorse,i);
           ProducirSonidos();
 }
gap();
gap();///separo caracter
nada:++k;
}*/
{
signed int i=7;
while(!bit_test(Cmorse,i))--i;
--i;
while(i>=0)
   {
   bit=bit_test(Cmorse,i);
   ProducirSonidos();
    --i;
   }   

}

//------------------------FIN TABLA MORSE---------------------------------------
void  TIMER1_isr(void)//Función de interrupción por desbordamiento TMR1  
{
      MedioSeg=MedioSeg+1;
      if (MedioSeg==2)
      {
       Segundos=Segundos+1;
       MedioSeg=0;
       SegundosRestantes=SegundosRestantes-1;
      }
Nada: 
      set_timer1(0x0BDC);//(0x0BDC);//carga del TMR1
    //  restart_wdt();
}

void codec(unsigned char letra)
{
int8 indice=0;
unsigned char morse=0;
if(letra==32)Espacio();
else 
   {
   morse=Table[letra-32];
   Barrido(morse);
   }
gap();
gap();
}

void Tx_morse( unsigned char texto[20]) 
{
int x=0;
while(texto[x]!=0)
   {
   codec(texto[x]);
   x++;
   }
}
void main()
{
   //setup_wdt(WDT_1152MS);
   setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_8 ); //Para poder generar 200ms
   setup_comparator(NC_NC);   // Todo digital
   set_tris_a(0xF0);   // 
   output_A(0x00);
   enable_interrupts(INT_TIMER1);
   disable_interrupts(GLOBAL);
   set_timer1(0x0BDC);//set_timer1(0x0BDC);//carga del TMR1
   SegundosRestantes=0;
   delay_ms(1000);
   Mensaje="CA6UGT";
   Tx_morse(Mensaje);
   while(TRUE){
  
              }
}              
--------------------------------------------------------------------------------------------------------------------------------
Aqui un video de la baliza en funcionamiento...
Espero les sirva y comenten si les gusto...

lunes, 23 de junio de 2014

Dimmer para leds de 42A

 DIMMER LED DE POTENCIA


Hola, les traigo el circuito de un dimmer leds que puede manejar hasta 42A, con un buen disipador de calor.
El circuto esta basado en un 555 y una salida mosfet.

Aqui el video de su funcionamiento:
Si lo bajan, comenten...

lunes, 17 de marzo de 2014

Termometro USB con PIC y adaptador USB-USART

Termometro USB con PIC y adaptador USB-USART

Hola, hace un tiempo compre un adaptador usb-usart y ahora lo agarre y me puse a experimentar y salio este termometro usb.

Para conectarme a la PC uso el adaptador USB y uso un PIC y un sensor DS1820 para medir la temperatura. La programacion del PIC la Hice en CCS.Esta es la placa:
Lo que hace el PIC es ir tirando continuamente el valor de la temperatura por el puerto serie,  esta es una captura de una hiperterminal llamada "hercules utility":
 Tambien hice un programa en delphi para leer la temperatura usando la libreria comport, esta es una captura del programa:
El programa de delphi es basico y no se refresca bien, pero anda.
Les dejo los arhivos para grabar el PIC y para Delphi:
Espero les guste y se animen a hacer su propia version...

domingo, 2 de marzo de 2014

VOLTIMETRO DE 0 A 35V

VOLTIMETRO DE 0 A 35V

Les traigo todo para armarse un voltimetro para varios usos, desde medir la bateria del auto o la moto a usarlo para medir el voltaje para una fuente de alimentacion.
Este es el circuito:
Para ajustar el voltimetro se conecta el voltimetro sin el pic, se conecta el voltaje a la entrada, por ejemplo 12V, y se ajusta el potenciometro para lograr una tension en el polo positivo del zener disminuida en una relacion 12/40.La idea es que al tener una entrada de voltaje a medir de 35 V, el voltaje en la entrada del PIC no sobrepase los 5V.
Una vez echo esto, se coloca el pic y se, se mide un voltaje conocido y se hace el ajuste fino para que la medicion sea correcta.
En el circuito no estan los display CC pero lleva 2 display de 7 segmentos multiplexados, cuyos segementos se conectan a la salida del 74hc164, los colectores de los transistores manejan la pata comun de los display de la decenas y las unidades.

Este es el Codigo para el PIC: Codigo para el PIC

Espero les sirva. Visiten tambien mi canal de Youtube: MI CANAL