domingo, 12 de febrero de 2012

Radio despertador

Muestro unas fotos de una radio despertador basado en un sintonizador de TV, un demodulador de FM en formato SMD, un decodificador de estereo en formato SMD y un DS1307 para las funciones de hora y fecha con una pila de respaldo en caso de corte de alimentación, (la parte de abajo es el amplificador de audio).


Detalle de la fuente de alimentación.


Detalle del receptor de FM.Los integrados demoduladore de FM y decodificador de estereo son SMD, están por debajo de la placa.


Etapa de control basada en un PIC18F452 y programado en CCS, junto con el RTC DS1307 y la pila de respaldo.


Detalle de montaje del display LCD.


Detalle de montaje de la botonera.


domingo, 5 de febrero de 2012

Timbre telefónico supletorio.

Este proyecto surge como un encargo por parte de una persona que trabaja en un ambiente, en ocasiones ruidoso, y eso junto la perdida de oído, hace que a veces no oiga el teléfono cuando suena.

Es muy sencillo, del hardware no se puede decir mucho, el optoacoplador para aislar la linea del resto del circuito, el condensador de 470nF y la resistencia de 10K/1W para limitar la corriente y quedarnos con la componente alterna de la señal que aparece en la linea cuando se recibe una llamada, y los diodos y el condensador de 470uF para rectificar y filtrar la señal de llamada.

Por otro lado, el condensador de 2,2uF sirve para evitar que el transistor BDX53 quede el altavoz conectado, provocando un consumo alto, en caso de que el PIC por algún motivo deje la salida a '1'.

El software lo que hace es encender de forma intermitente los led por medio de una interrupción del timer1, y generar una señal alterna para el altavoz. Esta señal alterna hace un barrido de frecuencias, pues una persona con perdición de audición, no pierde todas las frecuencias por igual, de esta forma al hacer un barrido, algún tono puede no oírlo bien, pero otros sí.

Unos altavoces adecuados, pueden ser estos, incluso se pueden poner dos en paralelo poniendo un transformador de 500mA, en lugar del de 300mA.
 

El código en CCS es el siguiente:

//  CCS 4.107
# include <12f683.h>
# use delay(clock=4000000)
# use fast_io(a)
# fuses INTRC,WDT,NOPROTECT,NOMCLR,PUT,BROWNOUT,NOCPD,INTRC_IO


#byte PORTA       = 0x05
#define Periodo     40536//para interrupcion cada 200msg.
#define ON          1
#define OFF         0
#bit  ZUMBADOR   = PORTA.0
#bit  LED        = PORTA.1
#bit  LLAMADA    = PORTA.5
/******************************************************************************/
/******************************************************************************/
int8 cont,i,cont_inter=0; 
/******************************************************************************/
/******************************************************************************/
/******************************************************************************/
#INT_TIMER1
void Tempo(void){
   set_timer1(Periodo);
   cont_inter++;
   if(cont_inter==2)
      LED=OFF;
   if(cont_inter==3){
      LED=ON;
      cont_inter=0;
   }
   restart_wdt();
  
}
/******************************************************************************/
/******************************************************************************/
void main(void){
SET_TRIS_A(0b11111100);//Configuracion del puerto. '0' salida. '1' entrada.
disable_interrupts(GLOBAL);
setup_timer_1(T1_INTERNAL  | T1_DIV_BY_8);
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);
set_timer1(Periodo);
restart_wdt();
LED=OFF;
disable_interrupts(GLOBAL);

do{

while(LLAMADA==1){
restart_wdt();
}

LED=ON;
enable_interrupts(GLOBAL);

while(LLAMADA==0){
   restart_wdt();
   cont=cont+2;
   for(i=0;i<33;i++){
      restart_wdt();
      Delay_us(cont*16);
      ZUMBADOR=OFF;
      Delay_us(cont*16);
      ZUMBADOR=ON;
   }
}

LED=OFF;
disable_interrupts(GLOBAL);

}while(TRUE);
}