RSS

Software (pic 16f84) y hardware radio baliza

La radiobaliza fue la primera de una serie de experimentos que realizamos junto con el grupo "Rosario Vuela", Claudio LU7FQP, Guillermo LU5FGA y Willy LU7FIA.

En el primer vuelo logramos que llegue a unos 150 metros de altura y recibimos reportes de estaciones que escucharon la radio baliza desde Arteaga, Casilda, San Nicolás y Villa Ramallo. Mauro nos escuchó con una radio FM (88-108Mhz.) modificada.

Algunos de los presentes la noche que hicimos la primer prueba, fue el 30 de Abril de 2009:

Circuito radiobaliza.(Fe de erratas unir la pata 4 del PIC con la 14)

Radiobaliza (Handy Yaesu FT-23r)


Código fuente de la radiobaliza:

/////////////////////////////////////////////////////////////////////////////////
//
// BALIZA IDENTIFICADORA EN CODIGO MORSE LU6FPJ - LU4FHJ
//
// MICRO: 16F84A ROSARIO 09/04/09
//
/////////////////////////////////////////////////////////////////////////////////

// RB 0
// RB 1
// RB 2
// RB 3
// RB 4
// RB 5
// RB 6
// RB 7

// RA 0 TX
// RA 1 TONO
// RA 2
// RA 3
// RA 4

asm{__FUSES _CP_OFF & _WDT_OFF & _XT_OSC & _PWRTE_ON}

#pragma CLOCK_FREQ 4000000

unsigned char morse;

unsigned char frec;
unsigned char wpm;

unsigned int frecuencia=1000; // desde 400 HZ hasta 1000 HZ
unsigned const char palabrasxm=10; // desde 4 palabras por minuto

//---------------------------TABLA MORSE----------------------------------------
//
//El primer uno a la izquierda es un marcador que no se reproduce
//
//a partir del mismo de izquierda a derecha 1=raya(DA) 0=punto (DI)

const unsigned char Table[200]={
00000001b,//032 espacio interpalabra 7 units
01101011b,//033 ! -ú-ú--
01010010b,//034 " ú-úú-ú
00111011b,//035 # --ú-- para usar la ¥
10001001b,//036 $ úúú-úú-
00000001b,//037 % No usado
00101000b,//038 & ú-úúú Wait
01011110b,//039 ' ú----ú
00110110b,//040 ( -ú--ú
01101101b,//041 ) -ú--ú-
00000001b,//042 * No usado
00101010b,//043 + ú-ú-ú
01110011b,//044 , --úú--
01100001b,//045 - -úúúú-
01010101b,//046 . ú-ú-ú-
00110010b,//047 / -úú-ú

00111111b,//048 0 -----
00101111b,//049 1 ú----
00100111b,//050 2 úú---
00100011b,//051 3 úúú--
00100001b,//052 4 úúúú-
00100000b,//053 5 úúúúú
00110000b,//054 6 -úúúú
00111000b,//055 7 --úúú
00111100b,//056 8 ---úú
00111110b,//057 9 ----ú

01111000b,//058 : ---úúú
01101010b,//059 ; -ú-ú-ú
00000001b,//060 < No usado
00110001b,//061 = -úúú-
00000000b,//062 > No usado
01001100b,//063 ? úú--úú
01011010b,//064 @ ú--ú-ú

00000101b,//065 A ú-
00011000b,//066 B -úúú
00011010b,//067 C -ú-ú
00001100b,//068 D -úú
00000010b,//069 E ú
00010010b,//070 F úú-ú
00001110b,//071 G --ú
00010000b,//072 H úúúú
00000100b,//073 I úú
00010111b,//074 J ú---
00001101b,//075 K -ú-
00010100b,//076 L ú-úú
00000111b,//077 M --
00000110b,//078 N -ú
00001111b,//079 O ---
00010110b,//080 P ú--ú
00011101b,//081 Q --ú-
00001010b,//082 R ú-ú
00001000b,//083 S úúú
00000011b,//084 T -
00001001b,//085 U úú-
00010001b,//086 V úúú-
00001011b,//087 W ú--
00011001b,//088 X -úú-
00011011b,//089 Y -ú--
00011100b,//090 Z --úú

00000001b,//091 [ No usado
00000001b,//092 \ No usado
00000001b,//093 ] No usado
00000001b,//094 ^ No usado
01001101b,//095 _ úú--ú-
00000001b,//096 ` No usado

00000101b,//097 a ú-
00011000b,//098 b -úúú
00011010b,//099 c -ú-ú
00001100b,//100 d -úú
00000010b,//101 e ú
00010010b,//102 f úú-ú
00001110b,//103 q --ú
00010000b,//104 h úúúú
00000100b,//105 i úú
00010111b,//106 j ú---
00001101b,//107 k -ú-
00010100b,//108 l ú-úú
00000111b,//109 m --
00000110b,//110 n -ú
00001111b,//111 o ---
00010110b,//112 p ú--ú
00011101b,//113 q --ú-
00001010b,//114 r ú-ú
00001000b,//115 s úúú
00000011b,//116 t -
00001001b,//117 u úú-
00010001b,//118 v úúú-
00001011b,//119 w ú--
00011001b,//120 x -úú-
00011011b,//121 y -ú--
00011100b,//122 z --úú

00000001b,//123 { No usado
00000001b,//124 | No usado
00000001b,//125 } No usado
00000001b,//126 ~ No usado
00000001b //127  No usado
};

//------------------------FIN TABLA MORSE---------------------------------------
void segundos(unsigned int seg)
{
unsigned int x;

for(x=0;x clear_wdt();
delay_ms(250);
clear_wdt();
delay_ms(250);
clear_wdt();
delay_ms(250);
clear_wdt();
delay_ms(250);
}
}

void micropausa(void)
{
delay_us(frec);
delay_us(frec);
delay_us(frec);
delay_us(frec);
delay_us(frec);
}
void pausa (unsigned char c)
{
unsigned char t,x;
t=wpm;

for(x=0;x {
clear_wdt();

while(t>0){
PORTA=1;
PORTA=1;
PORTA=1;
PORTA=1;
micropausa();

PORTA=1;
PORTA=1;
PORTA=1;
PORTA=1;
micropausa();

PORTA=1;
PORTA=1;
PORTA=1;
PORTA=1;
micropausa();

PORTA=1;
PORTA=1;
PORTA=1;
PORTA=1;
micropausa();

PORTA=1;
PORTA=1;
PORTA=1;
PORTA=1;
micropausa();

PORTA=1;
PORTA=1;
PORTA=1;
PORTA=1;
micropausa();

PORTA=1;
PORTA=1;
PORTA=1;
t--;
asm{nop}
micropausa();

PORTA=1;
micropausa();
}
}
}

void punto()
{
unsigned char t;
t=wpm;

while(t>0){
PORTA=3;
PORTA=3;
PORTA=3;
PORTA=3;
micropausa();

PORTA=1;
PORTA=1;
PORTA=1;
PORTA=1;
micropausa();

PORTA=3;
PORTA=3;
PORTA=3;
PORTA=3;
micropausa();

PORTA=1;
PORTA=1;
PORTA=1;
PORTA=1;
micropausa();

PORTA=3;
PORTA=3;
PORTA=3;
PORTA=3;
micropausa();

PORTA=1;
PORTA=1;
PORTA=1;
PORTA=1;
micropausa();

PORTA=3;
PORTA=3;
PORTA=3;
t--;
asm{nop}
micropausa();

PORTA=1;
micropausa();
}
pausa(1);
}

void raya()
{
unsigned char t;
t=3*wpm;

while(t>0){
PORTA=3;
PORTA=3;
PORTA=3;
PORTA=3;
micropausa();

PORTA=1;
PORTA=1;
PORTA=1;
PORTA=1;
micropausa();

PORTA=3;
PORTA=3;
PORTA=3;
PORTA=3;
micropausa();

PORTA=1;
PORTA=1;
PORTA=1;
PORTA=1;
micropausa();

PORTA=3;
PORTA=3;
PORTA=3;
PORTA=3;
micropausa();

PORTA=1;
PORTA=1;
PORTA=1;
PORTA=1;
micropausa();

PORTA=3;
PORTA=3;
PORTA=3;
t--;
asm{nop}
micropausa();

PORTA=1;
micropausa();
}
pausa(1);
}


void codec(unsigned char letra)
{
unsigned char c=7,x;

letra=letra&0x7F;
morse=Table[letra-0x20];
if(morse==0){morse=1;}

while(morse<0x80){morse=morse<<1;c--;}
morse=morse<<1;

// ú 1 unidad de tiempo
// - 3 unidades de tiempo
// gap intra caracter 1 unidad de tiempo
// gap entre caracteres 3 unidades de tiempo
// gap entre palabras 7 unidades de tiempo
//
// cada punto o raya termina con un gap de 1 para encadenarlo
// con el siguiente simbolo del caracter
// por eso agrego un gap de 2 al final para completar los 3
// luego de cada caracter
//
// de la misma manera agrego 4 para completar los 7 entre palabras
//

if(c==0){pausa(4);} //3 del gap de la ultima letra mas 4 = 7

else {
for(x=0;x morse=morse<<1;
}
pausa(2);
}
}

void tx_morse(unsigned const char *texto)
{
unsigned char x=0;

while(texto[x]!=0){codec(texto[x]);x++;}

}

void inicio_var(void)
{
unsigned int x,y;

frec=20000/frecuencia;
frec=frec*5;

x=1200/palabrasxm; //unidad de tiempo (duracion del punto) en mseg

y=frec*40/1000; //periodo del loop (T*4)

y=palabrasxm*frec;

wpm=30000/y;

if(wpm>85){wpm=85;}

if(frec<100){frec=100;}

}
void power_on(void)
{
PORTA=1;
clear_wdt();
delay_ms(250);
clear_wdt();
delay_ms(250);
clear_wdt();
}
void power_off(void)
{
clear_wdt();
delay_ms(250);
clear_wdt();
delay_ms(250);
clear_wdt();
PORTA=0;
}

//******************************************************************************

void main(void)
{
unsigned char x;

set_bit( STATUS, RP0 );

set_tris_a( 00000000b );
set_tris_b( 00000000b );

OPTION_REG= 11111111b;

clear_bit( STATUS, RP0 );

PORTA=0;

clear_wdt();

inicio_var();

segundos(5);

while(1){
for(x=0;x<12;x++)
{power_on();
tx_morse("VVV ");
tx_morse("ROSARIO ");
tx_morse("VUELA ");
power_off();
segundos(20);
}
power_on();
tx_morse("Beacon by LU4FHJ LU6FPJ ");
power_off();
segundos(20);
}
}

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

5 comentarios:

Anónimo dijo...

en que lenguaje esta este código 73" gracias pretendo armar una baliza con el pic16f84a

Anónimo dijo...

hola colegas soy de chile titular de la ca6ugt
me interesa el armado de la baliza para una repetidora tengo todo el material, para dicho proyecto ustedes me pueden ayudar ???? agradesco ayuda ce6ugt@hotmail.com estaré atento saludos 73" en que lenguaje esta esta rutina??? gracias ...

Anónimo dijo...

Hola

Podeis poner el codigo ASM, para el pic

Facundo A. Fernández dijo...

Hola anónimo, el código fuente está en c++ ¿Qué es exactamente lo que buscas? ¿El archivo para grabar el pic?

Saludos.

Javier Fernandez dijo...

Buenas tardes,

Estoy intentando compilar el programa y me salen errores "Linea 26(42,49) Expecting a declaration o Expecting a ( " y me gustaria que me ayudaran.

Gracias

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.