Autor Tópico: Transmissão rf com PIC...  (Lida 36822 vezes)

Description:

0 Membros e 1 Visitante estão vendo este tópico.

Offline Cláudio F.

  • Fuso
  • **
  • Posts: 222
  • Sexo: Masculino
  • Cidade - UF: São Paulo/SP
Re: Transmissão rf com PIC...
« Resposta #30 Online: 09 de Março de 2009, 12:43 »
plancton81, ele nao recebe somente dos 2 tx nao veio...

ele fica recebendo dados a doidado...

os txs funcionando ou nao, ele ta recebendo dados...

Smarley, posta seu codigo inteiro ai q fica mais facil

Offline plancton81

  • Fuso
  • **
  • Posts: 185
  • Sexo: Masculino
Re: Transmissão rf com PIC...
« Resposta #31 Online: 09 de Março de 2009, 16:35 »
Cfreund, é verdade, e já passei por isso fazendo um projetinho com um amigo meu, exatamente com módulos como estes.

Era um sistema de telemetria para enviar sinais biomédicos de um "paciente" para um PC, nada profissional, coisa da época de estudante mesmo.

Sem enviar nada, o receptor não parava de receber lixo. Na época, fizemos um esquema bem simples pra filtrar "tudo" isso.

Só aceitava o que fosse 0,1,2,3,...A,B,C,D,E, o resto todo descartava (mesmo assim não é muito seguro, sou chato!). Fora que pra enviar uma informação, antes era enviado um monte de lixo pra ele conseguir receber o resto, só me toquei o que eu estava fazendo quando li o que o jorge falou sobre o AGC.

Hoje em dia com certeza faria com pacotes. Alias, hoje em dia sou fã de pacotes! hehe  ;D

Offline EDSONCAN

  • Novato
  • *
  • Posts: 69
    • Projetos eletronicos consultoria
Re: Transmissão rf com PIC...
« Resposta #32 Online: 09 de Março de 2009, 17:40 »
Bem vindo ao mundo dos radios regenerativios, pega tudo que é porcaria, junto com o sinal que vc envia.

Offline C N C N o w !

  • CNCMASTER
  • ******
  • Posts: 6300
  • Sexo: Masculino
Re: Transmissão rf com PIC...
« Resposta #33 Online: 09 de Março de 2009, 18:06 »
Não sei se vosmecês estão familiarizados com ZigBee, mas é o que eu pensaria em utilizar em projetos de automação doméstica mais sérios.

Os módulos da XBee custam entre US$ 20 e US$ 35, coisa de gente grande, vale a pena conhecer. Tem gente usando até pra controle de aeromodelos, com alcance de alguns quilômetros ...

Há um bom artigo sobre a coisa aqui:

http://www.rogercom.com/ZigBee/ZigBee.htm

« Última modificação: 09 de Março de 2009, 19:17 por C N C N o w ! »

Offline EDSONCAN

  • Novato
  • *
  • Posts: 69
    • Projetos eletronicos consultoria
Re: Transmissão rf com PIC...
« Resposta #34 Online: 09 de Março de 2009, 18:56 »
Kms e força de expressão a não ser se voce usar configuração de rede com varios modulos em set reduzido.
Mas são muito bons para ambientes com interferencia principalmente se voce configurar para rede mesh.
A freescale manda amostras para o Brasil e tem um stack disponivel para brincar.

Edson

Offline C N C N o w !

  • CNCMASTER
  • ******
  • Posts: 6300
  • Sexo: Masculino
Re: Transmissão rf com PIC...
« Resposta #35 Online: 09 de Março de 2009, 19:21 »
Kms e força de expressão ...

Obrigado por me fazer notar que grafei incorretamente a unidade, já corrigi.

Não é força de expressão e o que vc citou não é a única maneira de estender o alcance. Há outras soluções.

Offline Cláudio F.

  • Fuso
  • **
  • Posts: 222
  • Sexo: Masculino
  • Cidade - UF: São Paulo/SP
Re: Transmissão rf com PIC...
« Resposta #36 Online: 10 de Março de 2009, 00:23 »
poisé plancton...

por essas e outras q hoje em dia, eu só uso esses receptores pra coisas bem simplistas mesmo e em pacotes + crc...hehehe (na minha visão nao tem nada mais eficiente).

pra assuntos profissionais, ja dou preferencia ao TRW-24G q utiliza o nRF2501A da nordic q é um excelente transceptor.
e quando preciso de potencia, mas sem preocupação com baterias, ja pulo pros xbee pro. que é uma delicia trabalhar com eles..., só configura ele uma vez só com canal, id, baudrate, potencia, etc... e ligar na uart.
pena q custa R$100,00 cada um desses bixo.

Smarley

  • Visitante
Re: Transmissão rf com PIC...
« Resposta #37 Online: 10 de Março de 2009, 12:35 »
ali quando aparece xxxx(x); é p u t c (x);
eu acho que deve ter algum bloqueio aqui no fórum contra isso.
Agora eu vou entrar para um grupo de pesquisa na faculdade e vou trabalhar com zigbee e outros métodos de comunicação.
Mas para usar em casa eu vou testar o RF, se não funcionar bem eu compro o zigbee. Onde se encontra aqui no brasil?
É que era só para ligar uma cafeteira, não vale a pena eu investir tanto dinheiro nisso...
Seria só colocar um relogio de tempo, mas eu resolvi fazer sem fio para aprender mais.
Vou colocar o programa completo aki.
Vai ter que ser por download pois é meio extenso.

abraço!

Offline Cláudio F.

  • Fuso
  • **
  • Posts: 222
  • Sexo: Masculino
  • Cidade - UF: São Paulo/SP
Re: Transmissão rf com PIC...
« Resposta #38 Online: 10 de Março de 2009, 17:02 »
Smarley,

faz +/- 2 anos q nao compro esses modulos

mas eu costumava comprar na vika controls que fica na av. paulista - centro de sao paulo.

http://vikacontrols.com.br/destaque_capamaxtream.htm

Smarley

  • Visitante
Re: Transmissão rf com PIC...
« Resposta #39 Online: 10 de Março de 2009, 21:36 »
Aqui está o programa.
Fiz com um pacote de 16 bytes, com os valores de 0 a 15.
Só falta o cabeçalho que eu não coloquei aqui...


Citar
#include "C:\Program Files\PICC\PICC\comando.h"
#include <DS1302.C>
#define LCD_ENABLE_PIN PIN_B0
#define LCD_RS_PIN PIN_B1
#define LCD_RW_PIN PIN_B2
#define LCD_TYPE 2
#include <lcd.c>
int8 hr,min,sec,day,day1,mth,year,dow,x,y;
int32 val32,tempo,val1,val2,val3,val4,val5,valor; //variaveis para leitura da temperatura
static boolean ler_temp=0,z=0,a=0;
char pacote[16],pacote1[16];


void escreve_data()
{
   printf(lcd_putc,"\f  %i:%i:%i %luC",hr,min,sec,valor);
   switch(dow)
   {
      case 1:printf(lcd_putc,"\nDomingo %i-%i-200%i",day,mth,year);
      break;
      case 2:printf(lcd_putc,"\nSegunda %i-%i-200%i",day,mth,year);
      break;
      case 3:printf(lcd_putc,"\nTerca  %i-%i-200%i",day,mth,year);
      break;
      case 4:printf(lcd_putc,"\nQuarta  %i-%i-200%i",day,mth,year);
      break;
      case 5:printf(lcd_putc,"\nQuinta  %i-%i-200%i",day,mth,year);
      break;
      case 6:printf(lcd_putc,"\nSexta  %i-%i-200%i",day,mth,year);
      break;
      case 7:printf(lcd_putc,"\nSabado  %i-%i-200%i",day,mth,year);
      break;
   }
}
void ler_data()
{
   hr = rm_bcd(read_ds1302(0x85));
   min = rm_bcd(read_ds1302(0x83));
   sec = rm_bcd(read_ds1302(0x81));
   day = rm_bcd(read_ds1302(0x87));
   mth = rm_bcd(read_ds1302(0x89));
   year = rm_bcd(read_ds1302(0x8d));
   dow = rm_bcd(read_ds1302(0x8b));
}
void envia_byte()

   envia_denovo:
   x=0;
   while(x<16)
   {
   xxxx(pacote
);
   delay_ms(50);
   x++;
   }
   x=0;
   while(x<16)
   {
   pacote1
=getc();
   x++;
   }
   x=0;
   while(x<16)
   {
   if(pacote
!=pacote1
)
   {
   goto envia_denovo;
   }
   x++;
   }
}
void liga_cafe()
{
   if(input(PIN_C3))
   {
   while(input(PIN_C3))
   {
   }
   printf(lcd_putc,"\fLigando\na cafeteira...");
   x=0;
   y=0;
   while(x<16)
   {
   pacote
=y;
   x++;
   y++;
   }
   envia_byte(); //Manda e verifica o pacote
   delay_ms(500);
   printf(lcd_putc,"\fCafeteira\nligada...");
   delay_ms(500);
   tempo=0;
   a=1;
   }
   if((hr>6)&&(min>15)&&(z==0))
   {
   if((hr<7)&&(min<10))
   {
   printf(lcd_putc,"\fLigando\na cafeteira...");
   x=0;
   y=0;
   while(x<16)
   {
   pacote
=y;
   x++;
   y++;
   }
   envia_byte(); //Manda e verifica o pacote
   delay_ms(500);
   printf(lcd_putc,"\fCafeteira\nligada...");
   delay_ms(500);
   z=1;
   day1=day;
   }
   if((hr==8)&&(min==15))
   {
   x=15;
   y=15;
   while(x>=0)
   {
   pacote
=y;
   x--;
   y--;
   }
   envia_byte(); //Manda e verifica o pacote
   delay_ms(500);
   printf(lcd_putc,"\fCafeteira\nDesligada...");
   delay_ms(500);
   }
   }
}
void atualiza_data()

   write_ds1302(0x86,get_bcd(day));
   write_ds1302(0x88,get_bcd(mth));
   write_ds1302(0x8c,get_bcd(year));
   write_ds1302(0x8a,get_bcd(dow));
   write_ds1302(0x84,get_bcd(hr));
   write_ds1302(0x82,get_bcd(min));
   write_ds1302(0x80,get_bcd(0));
}
void ler_valor()
{
   valor=read_adc();
   if(valor) valor += 1;
   val32=(valor*4+((int32)valor*113)/128);
   val32=(val32)/30;
   val1=val32;
   valor=read_adc();
   if(valor) valor += 1;
   val32=(valor*4+((int32)valor*113)/128);
   val32=(val32)/30;
   val2=val32;
   valor=read_adc();
   if(valor) valor += 1;
   val32=(valor*4+((int32)valor*113)/128);
   val32=(val32)/30;
   val3=val32;
   valor=read_adc();
   if(valor) valor += 1;
   val32=(valor*4+((int32)valor*113)/128);
   val32=(val32)/30;
   val4=val32;
   valor=read_adc();
   if(valor) valor += 1;
   val32=(valor*4+((int32)valor*113)/128);
   val32=(val32)/30;
   val5=val32;
   valor=(val1+val2+val3+val4+val5)/5;
}
#int_timer0
void trata_t0()
{
   int conta;
   static boolean led;
   set_timer0(131 + get_timer0());
   conta++;
   if(conta == 125)
   {
   conta=0;
   output_bit(PIN_D6,led);
   ler_temp=!ler_temp;
   led=!led;
   tempo++;
   }
}
void desliga_cafe()
{
   if(tempo==2400) //alterei o valor para 1 segundo só para testes.
   {
   x=0;
   y=15;
   while(x<16)
   {
   pacote
=y;
   x++;
   y--;
   }
   envia_byte(); //Manda e verifica o pacote
   delay_ms(500);
   printf(lcd_putc,"\fCafeteira\nDesligada...");
   delay_ms(500);
   a=0;
   }
}
void verifica_var()
{
   if(ler_temp==1)
   {
   ler_valor();
   }
   if(day1!=day)
   {
   z=0;
   }
   if(a==1)
   {
   desliga_cafe();
   }
}
void menu()
{
   if(input(PIN_D2))
   {
   hr++;
   write_ds1302(0x84,get_bcd(hr));
   while(input(PIN_D2))
   {
   }
   }
   if(input(PIN_D3))
   {
   min++;
   write_ds1302(0x82,get_bcd(min));
   while(input(PIN_D3))
   {
   }
   }
   if(input(PIN_D0))
   {
   mth++;
   write_ds1302(0x88,get_bcd(mth));
   while(input(PIN_D0))
   {
   }
   }
   if(input(PIN_D1))
   {
   day++;
   dow++;
   if(dow==7)
   {
   dow=0;
   }
   write_ds1302(0x86,get_bcd(day));
   write_ds1302(0x8a,get_bcd(dow));
   while(input(PIN_D1))
   {
   }
   }
}
void main()
{
   lcd_init();
   setup_adc_ports(AN0_AN1_AN3);
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_64);
   setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   enable_interrupts(global|int_timer0);
   set_adc_channel(0);
   rtc_init();
   delay_ms(100);
   ler_valor();
   ler_data();
   while(true)
   {
   delay_ms(100);
   verifica_var(); //verifica os timers e o acoinamento do café, 1 vez por dia.
   ler_data();     //le a data e hora do DS1302.
   escreve_data(); //identifica a data e hora, e mostra no LCD.
   menu();         //correção nos minutos e horas.
   liga_cafe();    //verifica o acionamento do café.
   }
}
« Última modificação: 11 de Março de 2009, 08:16 por fgilii »

Smarley

  • Visitante
Re: Transmissão rf com PIC...
« Resposta #40 Online: 10 de Março de 2009, 21:38 »
Onde se le
  • é [ x ]


Este é o programa do escravo.

Citar
#include "C:\Program Files\PICC\PICC\receptor 16f628A.h"

#int_timer0
void trata_to()
{
   int conta;
   static boolean led;
   set_timer0(131 + get_timer0());
   conta++;
   if(conta == 125)
   {
   conta=0;
   output_bit(PIN_B0,led);
   led=!led;
   }
}
char pacote[16],pacote_liga[16],pacote_desliga[16];
int x,y;
void carrega_valores()
{
   x=0;
   y=15;
   while(x<16)
   {
   pacote_desliga
  • =y;

   x++;
   y--;
   }
   x=0;
   while(x<16)
   {
   pacote_liga
  • =x;

   x++;
   }
}
void main()
{

   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_64);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   enable_interrupts(global|int_timer0);
   carrega_valores();
   while(true)
   {
   x=0;
   while(x<16)
   {
   pacote
  • =getc();

   x++;
   }
   x=0;
   while(x<16)
   {
   putc(pacote
  • );

   delay_ms(50);
   x++;
   }
   x=0;
   while(x<16)
   {
   if(pacote
  • ==pacote_liga
  • )

   {
   output_high(PIN_B3);
   }
   x++;
   }
   x=0;
   while(x<16)
   {
   if(pacote
  • ==pacote_desliga
  • )

   {
   output_low(PIN_B3);
   }
   x++;
   }
   }
}

Offline Cláudio F.

  • Fuso
  • **
  • Posts: 222
  • Sexo: Masculino
  • Cidade - UF: São Paulo/SP
Re: Transmissão rf com PIC...
« Resposta #41 Online: 11 de Março de 2009, 11:48 »
Smarley,

antes que eu seja mal compreendido ou falar besteira, eu nao trabalho com PIC e sim com AVR.
Nem imagino qual compilador vc esta usando.

mas partindo do ponto que c é c em qualquer lugar, vamos la...

dei uma olhada por cima e vi alguns problemas de conversao de tipos.
o mais engraçado é q o compilador deveria ter parado nesses pontos.

por ex:

char pacote[16],pacote_liga[16],pacote_desliga[16];
int x,y;

void carrega_valores(){
   x=0;
   y=15;
   while(x<16){
          pacote_desliga=y;     // aqui vc esta convertendo int em char[16]. nao seria: pacote_desliga
  • = y; ?

          x++;
          y--;
   }
   x=0;
   while(x<16){
          pacote_liga=x;           // aqui vc esta convertendo int em char[16]. nao seria: pacote_liga
  • = x; ?

          x++;
   }
}


Mais tarde eu vou dar uma sapiada melhor e se eu achar algum erro, vou te apontando.

Abs,

Offline Cláudio F.

  • Fuso
  • **
  • Posts: 222
  • Sexo: Masculino
  • Cidade - UF: São Paulo/SP
Re: Transmissão rf com PIC...
« Resposta #42 Online: 11 de Março de 2009, 11:51 »
ops, complicou os comments.

deixa eu tentar corrigir:

"aqui vc esta convertendo int em char[16]. nao seria: pacote_desliga[ x ]= y; ?"



"aqui vc esta convertendo int em char[16]. nao seria: pacote_liga[ x ]= x; ?"


Smarley

  • Visitante
Re: Transmissão rf com PIC...
« Resposta #43 Online: 11 de Março de 2009, 12:41 »
Mas é o que está escrito la.
É que o fórum apaga os [ x ].
Mas ta la, pacote_desliga[ x ]=y;

Smarley

  • Visitante
Re: Transmissão rf com PIC...
« Resposta #44 Online: 11 de Março de 2009, 14:32 »
Fiz a placa agora a pouco...
Só que estou pensando ainda se vou usar ela ou não.
As trilhas ficaram finas, fiz com 50mil. Deveria ter feito com 70mil.

 

/** * */