• Martes 5 de Noviembre de 2024, 22:00

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - alcidesramos

Páginas: [1]
1
Microcontroladores / Re: Pic Y Trf2.4 Ghz Marca Laipac
« en: Viernes 18 de Julio de 2008, 05:53 »
El codigo esta hecho en micropascal pero anexo declaraciones y funciones psra que analicen es facil de interpretar.
La instruccion shl rota a la izquierda  ejemplo shl 2 rota dos casillas: creo que es lo unico a aclarar lo otro se puede deducir analizando elcodigo.

las declaraciones para el programa son:
const
//pines en el micro
cs=0;
ce=1;
ck1=2;
dato1=3;
dr1=5;
ck2=2;
dato2=6;
dr2=7;


//para la configuracion trf

nbyte_1=2;  // numero de bytes canal 1
nbyte_2=2;  // numero de bytes canal 2
nbytedir=2; // numero de byte de las dirreciones a usar

// para crc
l_crc=1
e_crc=0;
crc_8=1 shl 1;
crc_16=0 shl 1;
crc_on=1;
crc_off=0;
// para la potencia

rf_20=0;
rf_10=1;
rf_5=2;
rf0=3;
// para el cristal
cristal_4=0 shl 2;
cristal_8=1 shl 2;
cristal_12=2 shl 2;
cristal_16=3 shl 2;
cristal_20 =4 shl 2;
// la velocidad
rata_250k=0 shl  5;
rata_1m=1 shl  5;
// el modo
modo_direct=0 shl 6;
modo_burst=1 shl 6;
//recibe 2 o un canal
rx_2=1 shl 7;
rx_1=0 shl 7;

//trasmite o recibe
txmodo=0;
rxmodo=1;
// canal deseado
canal=16 shl 1;   //2464GHz
// bit superios de configuracion
test_1=%10001110;
test_2=%00001000;
test_3=%00011100;
// pin recibe datos 2 porque sera el puero c,2
DATO1IN=2;

var
dir1_1,dir1_2,dir1_3,dir1_4,dir1_5:byte;
dir2_1,dir2_2,dir2_3,dir2_4,dir2_5:byte;
trf : byte; absolute $08; volatile;   //defino trf en el puerto d;
trfin : byte; absolute $07; volatile;   //defino trfin en el puerto c;
nbit_1,nbit_2:byte;
nbitdir:byte;
byte_c1,byte_c2,byte_c3:byte;
datos1:array[nbyte_1] of byte;
var
 txt:string[5];

Los procedimientos y funciones implemantadas son:

procedure delay_ck();//
begin
delay_us(1);
end;

procedure delay_cs();
begin
delay_us(4);
end;

procedure delay_setup();
begin
delay_ms(4);
end;

procedure envia_spi(b:byte);
var
i:byte;
begin

   for i:=7  downto 0 do
   begin
   trf.ck1:=0;
    if testbit(b,i) then trf.dato1:=1
    else trf.dato1:=0;
    delay_ck();
    trf.ck1:=1;
    delay_ck();
   end; // for
    trf.ck1:=0;
end;

function recibe_spi :byte;
var i ,buffer: byte;
begin
    result:=0;
//    result := Soft_Spi_Read(buffer);
      for i:=7 downto 0 do
   begin
   trf.ck1:=0;
delay_ck();
  trf.ck1:=1;
delay_ck();
   if testbit(trfin,dato1in) then result.i:=0
   else result.i:=1;
   end;//for
      trf.ck1:=0;
end;


function recibe_spi2 :byte;
var i ,buffer: byte;
begin
    result:=0;
//    result := Soft_Spi_Read(buffer);
      for i:=7 downto 0 do
   begin
   trf.ck2:=0;
delay_ck();
  trf.ck2:=1;
delay_ck();
   if testbit(trf,dato2) then result.i:=0
   else result.i:=1;
   end;//for
      trf.ck2:=0;
end;


procedure configrtf();
begin
   trisd.dato1:=0;
   nbit_1:=nbyte_1 shl 3;
   nbit_2:=nbyte_2 shl 3;
   dir1_1:=17;
   dir1_2:=21;
   dir1_3:=0;
   dir1_4:=0;

   dir2_1:=17;
   dir2_2:=21;
   dir2_3:=0;
   dir2_4:=0;
   nbitdir:=nbytedir shl 5;
   byte_c1:=nbitdir or crc_8 or crc_on;   // primer byte configuracion
   byte_c2:=rx_2 or modo_burst or rata_250k or cristal_16 or rf0;// segundo byte de configuracion
   byte_c3:=canal or rxmodo;  // tercer byte de configuracion  para transmision sera: or txmodo

 // comienza a enviar informacion
    trf.ce:=0;
   trf.cs:=0;
   trf.ck1:=0;
    trf.dato1:=0;
   delay_setup();
   trf.cs:=1;
   delay_cs();
   envia_spi(test_1);
   envia_spi(test_2);
   envia_spi(test_3);
   envia_spi(nbit_2);
   envia_spi(nbit_1);
   envia_spi(dir2_5);
   envia_spi(dir2_4);
   envia_spi(dir2_3);
   envia_spi(dir2_2);
   envia_spi(dir2_1);
   envia_spi(dir1_5);
   envia_spi(dir1_4);
   envia_spi(dir1_3);
   envia_spi(dir1_2);
   envia_spi(dir1_1);
   envia_spi(byte_c1);
   envia_spi(byte_c2);
   envia_spi(byte_c3);
   trisd.dato1:=1;  // debe pasar a entrada aunque el dato se lee por el portc,2
   trf.cs:=0;
   trf.ck1:=0;
   trf.ce:=1;
end;

procedure tx_modo;
begin
trisd.dato1:=0;
trf.ck1:=0;// puede ser opcional
trf.ce:=0;
trf.cs:=1;
delay_cs();
trf.dato1:=1;
trf.ck1:=1;
delay_ck();
trf.ck1:=0;
delay_ck();
trf.cs:=0;

end;

procedure rx_modo;
begin
trisd.dato1:=0;
trf.ck1:=0;// puede ser opcional
trf.ce:=0;
trf.cs:=1;
delay_cs();
trf.dato1:=0;
trf.ck1:=1;
delay_ck();
trf.ck1:=0;
delay_ck();
trf.cs:=0;
trisd.dato1:=1;  // muerto
trf.ce:=1;
end;

procedure tx_modocanal(c:byte);
begin
trisd.dato1:=0;
trf.ck1:=0;// puede ser opcional
trf.ce:=0;
trf.cs:=1;
delay_cs();
envia_spi((c shl 1)or 0) ;
trf.cs:=0;
trf.ck1:=0;
end;


procedure rx_modocanal(c:byte);
begin
trisd.dato1:=0;
trf.ck1:=0;// puede ser opcional
trf.ce:=0;
trf.cs:=1;
delay_cs();
envia_spi((c shl 1)or 1) ;
trf.cs:=0;
trisd.dato1:=1;
trf.ck1:=0;
trisd.dato1:=1;  // muerto
trf.ce:=1;
end;

procedure enviatrf(var b:array[nbyte_1] of byte);
var
i:byte;
begin
   trf.ce:=1;
   delay_cs;
    envia_spi(dir1_2);
    envia_spi(dir1_1);
   for i:=0 to nbyte_1-1 do
   begin
   envia_spi(b);
   end;// for
   trf.ce:=0;
   trf.ck1:=0;
end;

procedure recibetrf();
var
i:byte;
begin
   for i:= 0 to  nbyte_1-1 do
   begin
   datos1:=recibe_spi;
  end;
   trf.ck1:=0;
   end;

procedure recibetrf2();
var
i:byte;
begin
   for i:= 0 to  nbyte_2-1 do
   begin
   datos1:=recibe_spi2;
   end;
   trf.ck2:=0;
   end;

* el procedimiento principal  para trasmitir implementado en un 16f919 es utilizando puerto b:


begin
OSCTUNE:=0;
OSCCON.IRCF2:=1;
OSCCON.IRCF1:=1;
OSCCON.IRCF0:=1;
PIE1:=0;
PIR1:=0;
PIE2:=0;
PIR2:=0;
PCON:=0;

 OPTION_REG := $0;
 intcon:=0;
  ADCON1     := $06;
  TRISA      := $00;
  trisb.cs:=0;
  trisb.ce:=0;
  trisb.ck1:=0;
  trisb.dato1:=0;
  trisb.dr1:=1;
  trisb.ck2:=0;
  trisb.dato2:=1;
  trisb.dr2:=1;
   portb:=0;
   porta:=0;
    configrtf();
    txmodo();
    repeat
     datos1[0]:=31;   // primer dato a trasmitir
     datos1[1]:=33;   // segundo dato a trasmitir
     enviatrf(datos1);
      porta:=not(porta); // indica que se estan enviando datos
      delay_ms(300);
     
    until 0=1;// pincipal

* el codigo para recibir los datos en este caso solo es una prueba y se recibenn el dato 31 y 33 y se muestran en un display si no hay señal se vera el mensaje ayudame dios mio (este mensaje lo vei todo un dia de verdad que me ayudo y ya no salen sino los datos) si si hay enlace los datos enviados, utilizo un pic16f877a.


begin
 OPTION_REG := $80;
  ADCON1     := $06;                // configure VDD as Vref, and analog channels
  TRISA      := $FF;                // designate porta as input
PIE1:=0;
PIR1:=0;
PIE2:=0;
PIR2:=0;
PCON:=0;
OPTION_REG := $0;
intcon:=0;
trise:=0;
trisd:=0;
trisb:=0;
TRISC.DATO1IN:=1;

  trisd.cs:=0;
  trisd.ce:=0;
  trisd.ck1:=0;
  trisd.dato1:=0;
  trisd.dr1:=1;
  trisd.ck2:=0;
  trisd.dato2:=1;
  trisd.dr2:=1;

   portd:=0;
   portb:=0;
   delay_ms(1000);
   configrtf();
    rx_modo();
   

Lcd_Config(PORTb,7,6,5,4,PORTb,3,2,1);
Lcd_Cmd(LCD_CLEAR);                //  send command to LCD "clear display"
 Lcd_Cmd(LCD_CURSOR_OFF);           //  send command cursor off
Lcd_Out(1, 1, 'AYUDAME DIOS MIO'); // Si no hay datos solo se pide ayuda
delay_ms(5);
    repeat
     if trf.dr1=1 then
     begin

              datos1[0]:=0;
              datos1[1]:=0;

              recibetrf(); // recibe el dato y queda guardado en el buffer datos1
               Lcd_Out(1, 4, 'Datos enviados'); // Wr
                  wordToStr(datos1[0], txt);   //convierte a cadena eldato
                      Lcd_Out(2, 1, txt  ); // Wr     // lo muestra en display linea 2
                          wordToStr(datos1[1], txt);
                              Lcd_Out(3, 1, txt  ); // Wr  line 3´
                               delay_ms(500);
                                Lcd_Cmd(LCD_CLEAR); // limpia el display

        end;//dr1=1;
until 0=1;// pincipal



* es todo espero que sea de su ayuda y les ayude aclarar dudas y solucionar algun problema.

2
Microcontroladores / Re: Pic Y Trf2.4 Ghz Marca Laipac
« en: Viernes 18 de Julio de 2008, 05:23 »
Hola ya puse a funcionar los TRF2.4.

Oara aclarar un poco la  dificultad es que solo trabajan a 3V los mciros pueden trabajar a ese voltaje siempre tengan las iniciales L ejemplo el 16LF874a trabaja de 2 a 5v pero el 16F877A  no.

Haci que alimente el micro a 5V y con un zener de 3.3V a un vatio el TRF.

Al trabajar con un solo canal quedaria.

* Los pines de entrada del TRF (CK1,CE,CS) irian del micro sale una resistencia de 680 en serie a 1k  que va a tierra y de la union de esta a la entrada deseada del micro.

* los pines  de salida del TRF(DR1) salen con el negativo de un diodo 1n4148 al micro que va con una resistencia de 10k al positivo.

* el pin entrada salida (DR1) iria similar con la resistencia de 680 y 1k pero cuando actua de salida iria algo diferente  con un trasistor

Adjunte un dibujo ilustrativo pero si tienen dudas me pueden escribir a mi correo: alcidesramos@yahoo.es.
[attachment=0:1z8zl30y]trf.JPG[/attachment:1z8zl30y]

El programa lo hice con un compilador llamado mikropascal la verdad siempre programe en ensamblador pero por cuestiones de tiempo y como se delphi que es pascal orientado a objeto inicie con este compilador y la verdad es poderosisimo.
el codigo lo hice de clarando contantes para facil entendimiento si alguien le interesa se lo envio para que lo analice no debe ser dificil pasarlo a otro compilador.
utilice pura instrucciones para el SPI.
La verdad en la RED Hay muy poca informacion de poner a funcionar los TRF por eso estoy dispuesto a compartir si alquien tiene  problemas como ayudarlo.
Mi proyecto con el TRF2.4 es un radio telefonio digital de varios canales. con el DAC mcp4821 de microchip.
Por ultimo utilicen el TRF2.4 con minimo 2 bytes de direcciones no se porque presenta algo de ruido al configurar solo uno.

Bueno no es mas solo a la orden a quien pueda colaborarle nunca habi participado en un foro y me vi en apuros con esto y trate buscar ayuda pero la verdad no fue muy valiosay ahora que ya los manejo quisiera ayudar a otros. chao.

3
Microcontroladores / Re: Pic Y Trf2.4 Ghz Marca Laipac
« en: Lunes 14 de Julio de 2008, 15:01 »
Hola me puedes ayudar no ubico el codigo fuente del que hablas del trf2.4  yo aun no los hago funcionar.
mi mail es alcidesramos@yahoo.es
gracias.

Páginas: [1]