Ir ao conteúdo
  • Cadastre-se

Módulos RR3 e RT4 da Telecontrolli


chacalgbi

Posts recomendados

Olá pessoal gostaria de saber do pessoal que tem conhecimento dos Módulos RR3 e RT4 da Telecontrolli saberia me dizer se vários transmissores(rt4) poderiam comunicar com um mesmo receptor(rr3)?

Vou fazer um sistema de garçon eletrônico aqui pra um restaurante de um amigo meu. As mesas que estão na beira das paredes e fixas, eu fiz com fio mesmo, interno nas paredes e fixado... fica até melhor, mas tem mesas do lado de fora que tem que ser retiradas todos os dias.... ai só rola se for sem fio....

Ou alguma outra ideia?

Link para o comentário
Compartilhar em outros sites

Olá amigo, é possivel sim, porém, tem um detalhe, a transmissão simultanea, eles transmitindo ao mesmo tempo, com certeza anularia a transmissão toda dos dispositivos, a solução que eu vejo é colocar um modulo receptor + 1 transmissor nos dispositivos nas mesas, e antes de transmitir fazer uma checagem no modulo receptor, para ver se está ocorrendo alguma transmissão, se não houver inicia a transmissão, com isso todos os modulos vão verificar se existe transmissão no momento ,e teoricamente ninguem vai transmitir em cima do outro ... acho que é isso, abraços.

Edição:

Se o sinal transmitido for apenas um "chamado ao garçon" , nem precisa disto que citei ... porque a transmissão seria muito rapida. Falou

Link para o comentário
Compartilhar em outros sites

Olá amigo, é possivel sim, porém, tem um detalhe, a transmissão simultanea, eles transmitindo ao mesmo tempo, com certeza anularia a transmissão toda dos dispositivos, a solução que eu vejo é colocar um modulo receptor + 1 transmissor nos dispositivos nas mesas, e antes de transmitir fazer uma checagem no modulo receptor, para ver se está ocorrendo alguma transmissão, se não houver inicia a transmissão, com isso todos os modulos vão verificar se existe transmissão no momento ,e teoricamente ninguem vai transmitir em cima do outro ... acho que é isso, abraços.

Edição:

Se o sinal transmitido for apenas um "chamado ao garçon" , nem precisa disto que citei ... porque a transmissão seria muito rapida. Falou

é só mesmo apertar e pronto... acho que tb não tem a necessidade disso tudo, se o garçom não vier, aperte de novo.. rs

Mas me dia uma coisa, se você puder ajudar é claro: Com por exemplo, 10 transmissores e 1 receptor. e o 1° receptor mandar a informação. como fazer a informação chegar ao decoder ligado ao receptor RR3 comunicar com o PIC para que ele acione o Display com o número da mesa 1 correspondente ao 1° transmissor?

Resumindo: como fazer o receptor receber 10 sinais diferentes de casa transmissor?

Ele recebe em binário? você sabe como funciona a codificação/decodificação do MC145026/MC145027 ??

Gostaria de conhecer mais desses CIs e suas possíveis ligações com os PICs. Sinto que daria pra fazer muita coisa com eles se eu pudesse dominá-los:(:(:(

Link para o comentário
Compartilhar em outros sites

Estou num projeto onde teria q enviar o sinal de 100 transmissores p 1 único receptor e digo q é praticamente impossível caso você queira q as informações cheguem inteiras.

Como o colega disse ali em cima, quando 1 ou mais enviam junto, dá zebra.

Mas como é apenas o chamado do garçom, acredito q não terá problemas.

Qual a linguagem de programação q você está acostumado?

Para você saber de qual mesa veio, apenas envie o número da mesa junto de um "senha". A senha é para evitar interferência.......

você não precisa saber como o PIC faz a comunicação. Apenas ponha o que você quer transmitir na saída....

Levando emconta que não é tão simples mas funciona.

Tenho um código pronto......... mas pelo visto é para fins comerciais sua aplicação né......

Falou

Link para o comentário
Compartilhar em outros sites

Estou num projeto onde teria q enviar o sinal de 100 transmissores p 1 único receptor e digo q é praticamente impossível caso você queira q as informações cheguem inteiras.

Como o colega disse ali em cima, quando 1 ou mais enviam junto, dá zebra.

Mas como é apenas o chamado do garçom, acredito q não terá problemas.

Qual a linguagem de programação q você está acostumado?

Para você saber de qual mesa veio, apenas envie o número da mesa junto de um "senha". A senha é para evitar interferência.......

você não precisa saber como o PIC faz a comunicação. Apenas ponha o que você quer transmitir na saída....

Levando emconta que não é tão simples mas funciona.

Tenho um código pronto......... mas pelo visto é para fins comerciais sua aplicação né......

Falou

Eu programo em C. Programo não... vou na tentativa e erro até chegar em algum resultado..... rsrsrsrs

Fins comerciais não.... pelo menos por enquanto... nem sei mexer no bicho ainda..... rsrsrs

Mas como vai ser no restaurante de um chegado meu, ( se der certo) eu passo a lista do que vai precisar pra ele comprar e eu monto pra ele.....

O "preço" seria mais uma troca de favor que eu devo para ele...

Se você puder ajudar eu agradeceria, se não puder o código, diz ai ao menos por onde devo começar.

Um botão em uma mesa. Pressiona. Depois? esse botão mandar um PIC mandar um número específico para o rt4 que manda para o rr3 que manda para outro PIC que mostra no display?

Mais ou menos isso?

Link para o comentário
Compartilhar em outros sites

aqui vai uma ideia que talvez o possa ajudar

usar modulos XBee

aqui tem boa informaçao mas claro tera que estudar o seu funcionamento

http://www.rogercom.com/

Conheço bem esse site, mas tá fora de cogitação.... é caro demais!! rs

mas no mesmo site tem a parada que eu achei interessante, olha as imagens.

A função DisponibilizaDados() põe os dados nos pinos (D6, D7, D8 e D9) para posterior transmissão pelo módulo RT4

//Disponibiliza os dados ao ENCODE MC145026 (pinos D6, D5, D4 e D3.

//--------------------------------------------------------------------------------------------------------

void DisponibilizaDados(int byte_num)

{

output_bit(pin_c0, bit_test(byte_num, 0) );

output_bit(pin_c1, bit_test(byte_num, 1) );

output_bit(pin_c2, bit_test(byte_num, 2) );

output_bit(pin_c3, bit_test(byte_num, 3) );

}

Só que no receptor ele joga pra placa que entra na USB, queria que essa informação fosse pra outro PIC.

Que tipos de dados são esses? binário? hex?

Se eu conseguisse fazer com que cada PIC mandasse só um valor fixo para o encoder(MC145026) e depois para o RT4. Ai lá no receptor(RR3)recebia a informação e mandava pro decoder (MC145027) que mandava pra outro PIC, esse sim ia fazer o trabalho.

As ligações de entrada desse pic seria os mesmos pinos do PIC que enviou? (c0, c1, c2 e c3) definidos como input_bit?

post-801738-13884959624442_thumb.gif

post-801738-13884959624991_thumb.gif

Link para o comentário
Compartilhar em outros sites

Supondo que se a informação de cada mesa (um TX para cada mesa) fosse orientada a bit, ou seja, se cada mesa acionada enviasse e tivesse um endereço de 1 byte, como por exemplo:

* Os 4 primeiros bits mais significativos são correspondentes a parte de endereçamento

** Os 4 bits restantes, menos significativos, são correspondente a parte de dados

Mesa 01: 0 0 0 0 - 0 0 0 0

Mesa 02: 0 0 0 0 - 0 0 0 1

Mesa 03: 0 0 0 0 - 0 0 1 0

Mesa 04: 0 0 0 0 - 0 0 1 1

Mesa 05: 0 0 0 0 - 0 1 0 0

.

.

.

Mesa 256: 1 1 1 1 - 1 1 1 1

Existiria uma possibilidade de 256 combinações (2^8), ou melhor, 256 mesas cada uma com um TX correspondente e mais um endereçamento via hardware.

O funcionamento dos CIs para trasmissão dos se da de maneira serial, enviando a informação bit a bit para ser transmitida pelo TX, como mostra da figura abaixo:

AnimaMC.gif

Isso somente discutindo uma possibilidade, creio que seja melhor você verificar algumas topologias sobre redes, o que pode facilitar ainda mais o desenvolvimento do seu projeto.

Link para o comentário
Compartilhar em outros sites

os Mc145026/7 pemitem muito mais que isso

permitem 243 endereços e mais 16 combinaçoes de dados por endereço

com estes numeros de combinaçoes daria para fazer pedidos por mesa e por produto

mas o problema nao sera esse mas sim evitar o conflito de tramissão simultanea atraves dos RR3 e RT4 da Telecontrolli

---------------------------

chacalgbi

a quantas mesas pretende, no maximo, aplicar o sistema ?

se o objectvo e apenas chamar o empregado

o problema das transmissoes simultaneas ate pode nem ser critico pois o cliente pode sempre voltar a chamar

alem disso o circuito ate fica simples

se for assim diga que lhe coloco aqui o diagrama de blocos com o qual pode implementar facilmente

Link para o comentário
Compartilhar em outros sites

os Mc145026/7 pemitem muito mais que isso

permitem 243 endereços e mais 16 combinaçoes de dados por endereço

com estes numeros de combinaçoes daria para fazer pedidos por mesa e por produto

mas o problema nao sera esse mas sim evitar o conflito de tramissão simultanea atraves dos RR3 e RT4 da Telecontrolli

---------------------------

chacalgbi

a quantas mesas pretende, no maximo, aplicar o sistema ?

se o objectvo e apenas chamar o empregado

o problema das transmissoes simultaneas ate pode nem ser critico pois o cliente pode sempre voltar a chamar

alem disso o circuito ate fica simples

se for assim diga que lhe coloco aqui o diagrama de blocos com o qual pode implementar facilmente

Oceano, valeu pela força!!!:)

Seria 10 ou 15 mesas.... No máximo no futuro distante umas 25.

Eu nem tava muito preocupado com as transferências simultâneas porque seria mesmo só um aperto no botão, questão de 0,5 segundos, e a possibilidade de apertarem neste mesmo meio segundo é muito difícil, e mesmo se acontecer, as pessoas não atendidas pode apenas apertar novamente.

Como seria esse circuito? você faz ideia? O que precisaria em cada mesa além do RT4 e do MC145026? O que iria fazer a combinação de cada mesa? Teria que ser um PIC? pra enviar a informação em bits diferente?

Supondo que se a informação de cada mesa (um TX para cada mesa) fosse orientada a bit, ou seja, se cada mesa acionada enviasse e tivesse um endereço de 1 byte, como por exemplo:

Existiria uma possibilidade de 256 combinações (2^8), ou melhor, 256 mesas cada uma com um TX correspondente e mais um endereçamento via hardware.

O funcionamento dos CIs para trasmissão dos se da de maneira serial, enviando a informação bit a bit para ser transmitida pelo TX, como mostra da figura abaixo:

AnimaMC.gif

Isso somente discutindo uma possibilidade, creio que seja melhor você verificar algumas topologias sobre redes, o que pode facilitar ainda mais o desenvolvimento do seu projeto.

OPa! eu tava pensando justamente nisso! Eu perguntei pro colega Oceano logo acima qual a possibilidade de fazer isso, ou seja, o que iria mandar essa informação de 1 byte para o MC145026. Como cada mesa seria apenas um único código (informação, bit, byte, sei lá) desperdiçar um PIC pra isso é quase pecado! rsrs

você tem outra ideia? vou esperar o colega oceano responder. Aqui no forum ele e o matheus são os salva-vidas dos ignorantes como eu.... hehehe

Link para o comentário
Compartilhar em outros sites

Li uma coisa agora aqui, num outro tópico chamado:

Implementar decodificação por software Controle RF + PIC

Neste link

http://forum.clubedohardware.com.br/implementar-decodificacao-software/941721

O colega respondeu essa dúvida que eu postei aqui da seguinte maneira:

"Olá, eu acho que, se você está utilizando um pic, nao existe necessidade de um encoder / decoder, já que se você aplicar 5v no data do transmissor, o receptor no pino data vai estar 5v tb ... ou seja, você pode usar UART ou USART do pic pra transmitir os dados tranquilamente ... no meu caso nao posso usar usart porque quero decodificar um codigo já pronto, mas no seu caso, é só usar UART ou USART do pic ... =) Falou"

vocês acham que dá certo? o pic poderia mandar uma informação direto pro módulo transmissor usando esse tal de UART ou USART?? Pelo que vi aqui, Usart é para comunicação serial. Não é o MC145026 que converte os dados seriais para RF? ou poderia ligar diretamente o PIC no RT4??

No livro PIC programação em C de Fábio Pereira fala um pouco sobre ele, mas como tudo o mais no livro é confuso pra iniciantes, acho que o fábio acha que já nascemos sabendo o básico do C, ai não é necessário explicar os pormenores... rsrs

Comprei o livro com frete por 120,00. Até agora não serviu de muita coisa.... :(:(

Link para o comentário
Compartilhar em outros sites

uhauhaahuauh

Essa do livro foi f*****

Tá, o comentário ali que você citou está correto. O grande lance do MC145026 é eliminar o uso dos PICs....

Mas se você quiser usar dois PIC pequenos para fazer o interfaceamento dos transmissores e receptores.. dá certo sim!

Mas nao sei qual sai mais barato. Pois com PIC você precisará de um gravador, coisa q não sei se você tem.

Do lado do receptor, podemos colocar um computador para verificar qual mesa foi chamada. Dessa forma, todas as solicitaçoes ficam à mostra.

P falar a verdade, nunca trabalhei com os MC145026, então vou esperar o colega OCEANO dar sua posição em relação ao problema. Se eu ou mais alguem julgar que convém faezr com PIC, coloco o circuito e o código.

E sim, o PIC vai direto no transmissor e do outro lado vai direto no receptor. Só programar p ele enviar e receber.....

Falou

Link para o comentário
Compartilhar em outros sites

uhauhaahuauh

Essa do livro foi f*****

Tá, o comentário ali que você citou está correto. O grande lance do MC145026 é eliminar o uso dos PICs....

Mas se você quiser usar dois PIC pequenos para fazer o interfaceamento dos transmissores e receptores.. dá certo sim!

Mas nao sei qual sai mais barato. Pois com PIC você precisará de um gravador, coisa q não sei se você tem.

Do lado do receptor, podemos colocar um computador para verificar qual mesa foi chamada. Dessa forma, todas as solicitaçoes ficam à mostra.

P falar a verdade, nunca trabalhei com os MC145026, então vou esperar o colega OCEANO dar sua posição em relação ao problema. Se eu ou mais alguem julgar que convém faezr com PIC, coloco o circuito e o código.

E sim, o PIC vai direto no transmissor e do outro lado vai direto no receptor. Só programar p ele enviar e receber.....

Falou

MatheusLPS, eu tenho o gravador sim (grava qualquer PIC... e acho que com PIC é melhor. OLha só os preços:

MC145026 é R$ 2,60

MC145027 R$ 7,68

PIC12F675 (8pinos) R$ 3,85

PIC12F629 (8pinos) R$ 4,30

PIC16F628 (18pinos) R$ 6,50

fonte: www.proesi.com.br (Compro sempre nele, o atendimento do cara é 100%, já estamos até negociando na confiança, ele me manda e depois eu pago). Sou da bahia e ele de santa cataria!!! Recomendo...

Os pics tão mais baratos que o decoder MC145027!! Esses PICs de 8 pinos, eles tem porta serial de comunicação? Se não tiverem, faço com o PIC16F628 que ele eu sei que tem.

Tem ideia de como seria isso?

E esses módulos? só vendem o par? ou vendem separadamente tb? Eu usaria apenas 1 receptor e vários transmissores?

Perguntas, perguntas, perguntas.... rsrsr:confused::confused:

Link para o comentário
Compartilhar em outros sites

Isso mesmo. Para transmitir qualquer PIC desse aí serve.

caso queira colocar um PC para armazenar os chamados, um PIC maior seria mais fácil! Tipo um 18F4550.

Sobre os módulos, você pode comprar separadamente... sem problemas.....

Vou colocar um exemplo.

veja que utilizo PICs 18F4550 que são muito mais doq você precisa. Só trocar. Nesse exemplo envio 6 números, 123456........ E o código pode ser otimizado.

Circuito d teste de um transmissor e receptor:

trans.jpg

Código do Transmissor:


//Feito por MatheusLPS - [email protected]

#include <18f4550.h>
#device adc = 8
#include <STRING.H>
#include <STDIO.H>
#include <STDLIB.H>

#define WireTX PIN_C6
#define WireRX PIN_C7


#FUSES HS, NOWDT, NOPROTECT,NOLVP,BROWNOUT, PUT
#use delay (clock = 12000000)
#use rs232(baud=2400, xmit=WireTX, rcv=WireRX, ERRORS, STREAM=Wireless)

int8 i;

int8 envio[7]={1,2,3,4,5,6,0x00};
char teste = 123;


void main()
{
while(1)
{
if(!input(PIN_D2)) //Só enviar quando o botão for precionado.
{
output_high (PIN_C2); //Ligo o transmissor (IMPORTANTE)
delay_ms (50);
fprintf(Wireless, "%c", 0xBA); // LAM - algo para que o RX's USART "lock onto", algo do tipo, olhe receptor, estoua qui
fprintf(Wireless, "%c", 0xBE); // LAM - algo para que o RX's USART "lock onto", algo do tipo, olhe receptor, estoua qui
fprintf(Wireless, "%c", 0xFA); // LAM - algo para que o RX's USART "lock onto", algo do tipo, olhe receptor, estoua qui
fprintf(Wireless, "%c", 0xCE); // LAM - algo para que o RX's USART "lock onto", algo do tipo, olhe receptor, estoua qui
fprintf(Wireless,"Dave "); // Vou enviar isso ao recptor e ele vai procurar por Dave como sendo a senha, se for correta, ele interpreta a variável temp_1
for (i=0;i<8;i++)
{
fprintf(Wireless,"%d",envio[i]);
}
//putc(temp); // teste.
//fprintf(Wireless,"Dave %u\r",temp); // teste
output_low (PIN_C2); //Desligo o tnsmissor (MAIS IMPORTANTE AINDA)
/*output_high (PIN_D1); //Ligo um LED para ver que voi enviado os dados
delay_ms(1000);
output_low (PIN_D1); //desligo o led
delay_ms(1000);*/
do
{
} while (!input(pin_d2));
}
}
}
//Código de exemplo para transmissão de IDs por RF

Códio do receptor:


//Feito por MatheusLPS

//Comentários em Inglês para facilitar a portabilidade e posterior publicação

#include <18f4550.h>

#define WireTX PIN_C6
#define WireRX PIN_C7

#FUSES HS, NOWDT, NOPROTECT,NOLVP,BROWNOUT, PUT
#use delay(clock = 12000000)
#use rs232(baud=2400, xmit=WireTX, rcv=WireRX, ERRORS, STREAM=Wireless)

#include <stdlib.h>
#include <LCD.c>

#define RX_BUFFER_SIZE 80
#define TX_BUFFER_SIZE 80

int8 x;
int8 temperatura[7];
float temp;

int8 rx_wr_index = 0, tx_rd_index = 0, tx_wr_index = 0, tx_counter = 0, received = 0;
int8 lock_state = 0, rxd, i, valid_data_count;
unsigned int8 rx_buffer[RX_BUFFER_SIZE + 1], tx_buffer[TX_BUFFER_SIZE + 1];
int1 data_avail = FALSE, got_id = FALSE;

#int_RDA
void RDA_isr(void)
{
rx_buffer[rx_wr_index] = getc();
rxd = rx_buffer[rx_wr_index];
rx_wr_index++;

if (rx_wr_index > RX_BUFFER_SIZE) {
rx_wr_index = 0;
}

// now look for unique ID: "Dave "
if (rxd == 'D' && lock_state == 0) {
lock_state++;
}
else if (rxd == 'a' && lock_state == 1) {
lock_state++;
}
else if (rxd == 'v' && lock_state == 2) {
lock_state++;
}
else if (rxd == 'e' && lock_state == 3) {
lock_state++;
}
else if (rxd == ' ' && lock_state == 4) { // got the entire string "Dave ", in that order
lock_state = 0; // reset our "combination lock"
got_id = TRUE;
valid_data_count = 0xff; // get ready to count the number of data bytes - we know we have to expect 5 (Rocks)
// also going to reset the buffer write index back to 0, so that I know where my valid data will be
rx_wr_index = 0;
}
else { // we didn't receive "Dave ", so reset the lock back to the beginning
lock_state = 0;
}

if (got_id && ++valid_data_count == 7) {
data_avail = TRUE;
got_id = FALSE;
}
}

/*#int_TBE
void TBE_isr(void) {
if (tx_counter != 0) {
putc(tx_buffer[tx_rd_index]);
if (++tx_rd_index > TX_BUFFER_SIZE) {
tx_rd_index = 0;
}
tx_counter--;
if (tx_counter == 0) {
disable_interrupts(INT_TBE);
}
}
}*/

/*void bputc(int c) {
int restart = 0;

while (tx_counter > (TX_BUFFER_SIZE - 1));

if (tx_counter == 0) {
restart = 1;
}
tx_buffer[tx_wr_index++] = c;
if (tx_wr_index > TX_BUFFER_SIZE) {
tx_wr_index = 0;
}
tx_counter++;
if (restart == 1) {
enable_interrupts(INT_TBE);
}
}*/

void main()
{
//temperatura[3] = 0x00;
enable_interrupts(INT_RDA);

enable_interrupts(global);

lcd_init();

printf(lcd_putc,"working\n");
while (TRUE) {
restart_wdt();
if (data_avail)
{
output_high(PIN_B0);
data_avail = FALSE;
//printf(lcd_putc,"\r\n\r\nData is now available\r\nData: ");
/*output_high (PIN_c2);
delay_ms (1000);
output_low (PIN_C2);*/
for (i = 0; i < 7; i++)
{
//temperatura[i] = rx_buffer[i];
printf(lcd_putc,"%c",rx_buffer[i]);
}

//x = atol(temperatura);

//temp = (x * 5 * 100) / 254.00;

//printf(lcd_putc,"\n%d",x);



}
}
}
//Programa teste para recepção de Ids por RF

Falou

Link para o comentário
Compartilhar em outros sites

chacalgbi

ok aqui vai a ideia

siga a imagem abaixo

note que estamos a falar de apenas fazer chamada do empregado

ainda deve notar que no caso de interferencia de comunicaçao o circuito nao faz nada, isto e nao da indicaçao de chamada, logo o cliente tera de premir o botao de novo

descriçao:

----------

para compreender a ideia partimos do ponto em que nenhuma chamada foi feita e o sistema esta em espera

nas mesas precisa apenas do transmissor e do Mc145026, este identifica cada mesa

quando alguem na mesa faz a chamada e transmite o sinal

o receptor RR3 recebe o sinal e o estando o interruptor electronico activo o sinal passa para o mC145027 (Dout para Din)

atraves do endereço e de dados a mesa e identificada pelo Mc145027 e feito o display

ao mesmo tempo o sinal de saida do Mc145027, Vt, e activado e ira actuar sobre o controlo de retençao

este circuito depois de activado vai actuar sobre o interruptor electronico impedindo que o sinal Dout passe para o Mc145027 e logo que outras chamadas sejam recebidas

O empregado(s) ao verem no display o numero de chamada tomam nota da mesa pedindo assistencia e actuam no circuito a que chamei de Reset e irao atender a chamada

quando o empregado actua no sistema de reset o sistema fica pronto para receber nova chamada , pois o display sera desactivado e o interruptor colocado outra vez em modo activo

practica:

---------

agora como passar a practica

o Interruptor electronico pode ser por exmplo algo como um simples 4066 ou ate mais simples, mas este pode permitir expandir em caso de querer mais mesas

o circuito do Mc145057 pode ser constiduido por 1 ou mais detes circuitos dependendo do numero de mesas, note que usar varios e com endereços diferentes podeate ser util se desejar diferenciar a localizaçao das mesas

o circuito de retençao pode ser qualquer flip-flop com entradas set e reset

o circuito de display pode ser um circuito de descodificaçao de binario para 7-Segmentos

o circuito de reset pode ser um simples botao que faça reset ao flipflop do sistema de retençao e limpe o Mc145027 ou ao display

a minha practica:

-----------------

vejamos a minha practica ( deve notar que nao fiz este circuito especifico)

o conjunto RT4 Mc145026 e RR3 Mc145027 funciona perfeitamente

como e logico a distancia de alcance depende do tipo de ambiente

uso regularmente em diferentes aplicaçoes

o circuito interrupror 4066 uso em diferentes dircuitos mas como disse antes pode ser alterado

o display e um circuito comum de display de 1 a 15

o circuito de retençao penso que nada tem a ser dito qualquer FF faz isso

o circuito de reset seria apenas um simples botao para desadivar o circuito de retençao e um circuito de fazer reset do MC145027ou ao display

--------------------------------

como e logico todas estas partes teriam de ser testadas em separado e depois em conjunto, embora como disse antes algumas delas uso regularmente sem probemas

e claro dependendo das peças escolhidas pode ter de usar algum circuito logico para conformidade dos sinais de controlo

mas de base 5 ci resolvem o problema e se for bem pensado pode sempre ser aumentado com simplie modulos extra apenas do display e circuito descodificador

Mc145027

-----------------------

espero ter sido claro

qualquer duvida disponha

.

Link para o comentário
Compartilhar em outros sites

chacalgbi

ok aqui vai a ideia

siga a imagem abaixo

note que estamos a falar de apenas fazer chamada do empregado

ainda deve notar que no caso de interferencia de comunicaçao o circuito nao faz nada, isto e nao da indicaçao de chamada, logo o cliente tera de premir o botao de novo

descriçao:

----------

para compreender a ideia partimos do ponto em que nenhuma chamada foi feita e o sistema esta em espera

nas mesas precisa apenas do transmissor e do Mc145026, este identifica cada mesa

quando alguem na mesa faz a chamada e transmite o sinal

o receptor RR3 recebe o sinal e o estando o interruptor electronico activo o sinal passa para o mC145027 (Dout para Din)

atraves do endereço e de dados a mesa e identificada pelo Mc145027 e feito o display

ao mesmo tempo o sinal de saida do Mc145027, Vt, e activado e ira actuar sobre o controlo de retençao

este circuito depois de activado vai actuar sobre o interruptor electronico impedindo que o sinal Dout passe para o Mc145027 e logo que outras chamadas sejam recebidas

O empregado(s) ao verem no display o numero de chamada tomam nota da mesa pedindo assistencia e actuam no circuito a que chamei de Reset e irao atender a chamada

quando o empregado actua no sistema de reset o sistema fica pronto para receber nova chamada , pois o display sera desactivado e o interruptor colocado outra vez em modo activo

practica:

---------

agora como passar a practica

o Interruptor electronico pode ser por exmplo algo como um simples 4066 ou ate mais simples, mas este pode permitir expandir em caso de querer mais mesas

o circuito do Mc145057 pode ser constiduido por 1 ou mais detes circuitos dependendo do numero de mesas, note que usar varios e com endereços diferentes podeate ser util se desejar diferenciar a localizaçao das mesas

o circuito de retençao pode ser qualquer flip-flop com entradas set e reset

o circuito de display pode ser um circuito de descodificaçao de binario para 7-Segmentos

o circuito de reset pode ser um simples botao que faça reset ao flipflop do sistema de retençao e limpe o Mc145027 ou ao display

a minha practica:

-----------------

vejamos a minha practica ( deve notar que nao fiz este circuito especifico)

o conjunto RT4 Mc145026 e RR3 Mc145027 funciona perfeitamente

como e logico a distancia de alcance depende do tipo de ambiente

uso regularmente em diferentes aplicaçoes

o circuito interrupror 4066 uso em diferentes dircuitos mas como disse antes pode ser alterado

o display e um circuito comum de display de 1 a 15

o circuito de retençao penso que nada tem a ser dito qualquer FF faz isso

o circuito de reset seria apenas um simples botao para desadivar o circuito de retençao e um circuito de fazer reset do MC145027ou ao display

--------------------------------

como e logico todas estas partes teriam de ser testadas em separado e depois em conjunto, embora como disse antes algumas delas uso regularmente sem probemas

e claro dependendo das peças escolhidas pode ter de usar algum circuito logico para conformidade dos sinais de controlo

mas de base 5 ci resolvem o problema e se for bem pensado pode sempre ser aumentado com simplie modulos extra apenas do display e circuito descodificador

Mc145027

-----------------------

espero ter sido claro

qualquer duvida disponha

.

Oceano, muito obrigado pelo tempo empreendido na explicação. Eu entendi a "teoria" do que você quis dizer. Agora vai a dúvida, como colocar cada código desse no transmissor? Tipo, preciono um botão na mesa 04, como vou configurar o conjunto MC145026 + o RT4 pra enviar essa informação "00004" como na imagem que você postou para o receptor?

Tb estou analisando a proposta do colega MatheusLPS... Os PICs somente podem ser também interessantes. estou montando o circuito dele aqui no Proteus e vou fazer uns testes com o código que ele passou... Assim que acabar posto aqui a experiência.

Link para o comentário
Compartilhar em outros sites

o Mc145026 tem 5 linhas de endereço e quatro de data

no que esta a pedir bastaria usar um endereço fixo ( por exemplo A1 a A5 a 1 - e claro as linhas de endereço do decoder MC145027 tem de ser definidas do mesmo modo ) e cololar as linhas de data com o numero que deseja

por exemplo para a mesa 4 seria "0100" nas lihnas de data D6 D7 D9 e D9

As linhas de endereço seriam sempre (11111)

esta informaçao e sempre a mesma para essa mesa nao teria que alterar nada

cada mesa teria os seus dados fixos como e logico

o cliente prime o botao TE e os dados sao transmitidos

apenas este circuito e o Rt4 para cada mesa

(nota : nao coloquei as resistencias e condensador no mc145026)

note que se usar outro tipo de encoder/decoder pode ter outro numero de possibilidades

.

Link para o comentário
Compartilhar em outros sites

Olá amigo, tive uma ideia, que pode facilitar um pouco a sua vida ... estava eu aqui tentando implementar decodificação por software no PIC, até que consegui ... e funciona muito bem ... minha sugestão é que você compre 1 controle daqueles de portão pra cada mesa, que custa 9,90 cada, do tipo Learn Code, cada um tem uma identificação unica, você prende o controle na mesa por um cordão metalico, e faz apenas a central ... porque fazer 15 transmissores ... sei lá ... da bastante trabalho né ... ai a pessoa aperta o botão do controle e já aparece lá na central ql mesa tá chamando e pode até fazer um esquema tipo, colocar numero nos botões, são 3 botões geralmente, ai aperta o botão 3 é pra pedir a conta ... e os outros 2 pra chamar ... sei lá ... vai da sua criatividade, essa é a minha sugestão. abraços.

Link para o comentário
Compartilhar em outros sites

Isso mesmo. Para transmitir qualquer PIC desse aí serve.

caso queira colocar um PC para armazenar os chamados, um PIC maior seria mais fácil! Tipo um 18F4550.

Sobre os módulos, você pode comprar separadamente... sem problemas.....

Vou colocar um exemplo.

veja que utilizo PICs 18F4550 que são muito mais doq você precisa. Só trocar. Nesse exemplo envio 6 números, 123456........ E o código pode ser otimizado.

Circuito d teste de um transmissor e receptor:

trans.jpg

Código do Transmissor:


//Feito por MatheusLPS - [email protected]

#include <18f4550.h>
#device adc = 8
#include <STRING.H>
#include <STDIO.H>
#include <STDLIB.H>

#define WireTX PIN_C6
#define WireRX PIN_C7


#FUSES HS, NOWDT, NOPROTECT,NOLVP,BROWNOUT, PUT
#use delay (clock = 12000000)
#use rs232(baud=2400, xmit=WireTX, rcv=WireRX, ERRORS, STREAM=Wireless)

int8 i;

int8 envio[7]={1,2,3,4,5,6,0x00};
char teste = 123;


void main()
{
while(1)
{
if(!input(PIN_D2)) //Só enviar quando o botão for precionado.
{
output_high (PIN_C2); //Ligo o transmissor (IMPORTANTE)
delay_ms (50);
fprintf(Wireless, "%c", 0xBA); // LAM - algo para que o RX's USART "lock onto", algo do tipo, olhe receptor, estoua qui
fprintf(Wireless, "%c", 0xBE); // LAM - algo para que o RX's USART "lock onto", algo do tipo, olhe receptor, estoua qui
fprintf(Wireless, "%c", 0xFA); // LAM - algo para que o RX's USART "lock onto", algo do tipo, olhe receptor, estoua qui
fprintf(Wireless, "%c", 0xCE); // LAM - algo para que o RX's USART "lock onto", algo do tipo, olhe receptor, estoua qui
fprintf(Wireless,"Dave "); // Vou enviar isso ao recptor e ele vai procurar por Dave como sendo a senha, se for correta, ele interpreta a variável temp_1
for (i=0;i<8;i++)
{
fprintf(Wireless,"%d",envio[i]);
}
//putc(temp); // teste.
//fprintf(Wireless,"Dave %u\r",temp); // teste
output_low (PIN_C2); //Desligo o tnsmissor (MAIS IMPORTANTE AINDA)
/*output_high (PIN_D1); //Ligo um LED para ver que voi enviado os dados
delay_ms(1000);
output_low (PIN_D1); //desligo o led
delay_ms(1000);*/
do
{
} while (!input(pin_d2));
}
}
}
//Código de exemplo para transmissão de IDs por RF

Códio do receptor:


//Feito por MatheusLPS

//Comentários em Inglês para facilitar a portabilidade e posterior publicação

#include <18f4550.h>

#define WireTX PIN_C6
#define WireRX PIN_C7

#FUSES HS, NOWDT, NOPROTECT,NOLVP,BROWNOUT, PUT
#use delay(clock = 12000000)
#use rs232(baud=2400, xmit=WireTX, rcv=WireRX, ERRORS, STREAM=Wireless)

#include <stdlib.h>
#include <LCD.c>

#define RX_BUFFER_SIZE 80
#define TX_BUFFER_SIZE 80

int8 x;
int8 temperatura[7];
float temp;

int8 rx_wr_index = 0, tx_rd_index = 0, tx_wr_index = 0, tx_counter = 0, received = 0;
int8 lock_state = 0, rxd, i, valid_data_count;
unsigned int8 rx_buffer[RX_BUFFER_SIZE + 1], tx_buffer[TX_BUFFER_SIZE + 1];
int1 data_avail = FALSE, got_id = FALSE;

#int_RDA
void RDA_isr(void)
{
rx_buffer[rx_wr_index] = getc();
rxd = rx_buffer[rx_wr_index];
rx_wr_index++;

if (rx_wr_index > RX_BUFFER_SIZE) {
rx_wr_index = 0;
}

// now look for unique ID: "Dave "
if (rxd == 'D' && lock_state == 0) {
lock_state++;
}
else if (rxd == 'a' && lock_state == 1) {
lock_state++;
}
else if (rxd == 'v' && lock_state == 2) {
lock_state++;
}
else if (rxd == 'e' && lock_state == 3) {
lock_state++;
}
else if (rxd == ' ' && lock_state == 4) { // got the entire string "Dave ", in that order
lock_state = 0; // reset our "combination lock"
got_id = TRUE;
valid_data_count = 0xff; // get ready to count the number of data bytes - we know we have to expect 5 (Rocks)
// also going to reset the buffer write index back to 0, so that I know where my valid data will be
rx_wr_index = 0;
}
else { // we didn't receive "Dave ", so reset the lock back to the beginning
lock_state = 0;
}

if (got_id && ++valid_data_count == 7) {
data_avail = TRUE;
got_id = FALSE;
}
}

/*#int_TBE
void TBE_isr(void) {
if (tx_counter != 0) {
putc(tx_buffer[tx_rd_index]);
if (++tx_rd_index > TX_BUFFER_SIZE) {
tx_rd_index = 0;
}
tx_counter--;
if (tx_counter == 0) {
disable_interrupts(INT_TBE);
}
}
}*/

/*void bputc(int c) {
int restart = 0;

while (tx_counter > (TX_BUFFER_SIZE - 1));

if (tx_counter == 0) {
restart = 1;
}
tx_buffer[tx_wr_index++] = c;
if (tx_wr_index > TX_BUFFER_SIZE) {
tx_wr_index = 0;
}
tx_counter++;
if (restart == 1) {
enable_interrupts(INT_TBE);
}
}*/

void main()
{
//temperatura[3] = 0x00;
enable_interrupts(INT_RDA);

enable_interrupts(global);

lcd_init();

printf(lcd_putc,"working\n");
while (TRUE) {
restart_wdt();
if (data_avail)
{
output_high(PIN_B0);
data_avail = FALSE;
//printf(lcd_putc,"\r\n\r\nData is now available\r\nData: ");
/*output_high (PIN_c2);
delay_ms (1000);
output_low (PIN_C2);*/
for (i = 0; i < 7; i++)
{
//temperatura[i] = rx_buffer[i];
printf(lcd_putc,"%c",rx_buffer[i]);
}

//x = atol(temperatura);

//temp = (x * 5 * 100) / 254.00;

//printf(lcd_putc,"\n%d",x);



}
}
}
//Programa teste para recepção de Ids por RF

Falou

MatheusLPS, eu peguei esse código ai e mudei ele pra funcionar com o transmissor com o PIC16F628 e o Receptor com o PIC16F877, usei esse último porque com as outras saidas vou ligar o Display.

Eu modifiquei e funcionou, mostrou do mesmo jeito que ta lá na imagem que você postou, agora eu quero mudar esse código, e simplificar ele, tirar aquela parada de conferir senha, é interessante, mas confuso pra mim que sou mongoloide em C. Eu queria apenas que o transmissor enviasse um valor referente á uma mesa tipo: 01, 05, 12, etc.... e o receptor recebesse esse valor, e mostrasse no LCD (que é o teste pra saber se realmente recebeu aquele valor)

Eu diminuir o código e (é claro) não está funcionando, mas você olhando você sabe a minha intenção.

Olha ai o código e me aponte o caminho das pedras... rs

Código do Transmissor:

#include <16F628A.h>

#device adc = 8

#include <STRING.H>

#include <STDIO.H>

#include <STDLIB.H>

#define WireTX PIN_B2

#define WireRX PIN_B1

#FUSES XT, NOWDT, NOPROTECT,NOLVP,BROWNOUT, PUT

#use delay (clock = 4000000)

#use rs232(baud=2400, xmit=WireTX, rcv=WireRX, STREAM=Wireless)

int8 i;

ESSA VARIÁVEL ABAIXO É QUE DETERMINARÁ O NÚMERO DA MESA? TEM COMO COLOCAR 01, 02, 15 COMO NO EXEMPLO?

int8 envio[7]={1,2,3,4,5,6}; // "01" será o número de cada mesa, Ex: 01, 02, 03, 04

void main()

{

while(True)

{

if(!input(PIN_A1)) //Só enviar quando o botão for precionado.

{

output_high (PIN_A0); //Ligo o transmissor (IMPORTANTE)

delay_ms (200);

ESSAS QUATRO LINHAS ABAIXO SÃO MESMO NECESSÁRIAS?

fprintf(Wireless, "%c", 0xBA); // olhe receptor, estou aqui

fprintf(Wireless, "%c", 0xBE); // olhe receptor, estou aqui

fprintf(Wireless, "%c", 0xFA); // olhe receptor, estou aqui

fprintf(Wireless, "%c", 0xCE); // olhe receptor, estou aqui

for (i=0;i<8;i++)

{

fprintf(Wireless,"%d",envio);

}

delay_ms (200);

output_low (PIN_A0); //Desligo o transmissor (MAIS IMPORTANTE AINDA)

output_high (PIN_B7); //Ligo um LED para ver que voi enviado os dados

delay_ms(1000);

output_low (PIN_B7); //desligo o led

delay_ms(1000);

do

{

} while (!input(pin_A1));

}

}

}

Receptor:

#include <16F877A.h>

#define WireTX PIN_C6

#define WireRX PIN_C7

#FUSES HS, NOWDT, NOPROTECT,NOLVP,BROWNOUT, PUT

#use delay(clock = 20000000)

#use rs232(baud=2400, xmit=WireTX, rcv=WireRX, STREAM=Wireless)

#include <stdlib.h>

#include <LCD.c>

O QUE RECEBE O VALOR DO TRANSMISSOR É O rcv=WireRX ?? COMO POSSO COLOCAR ESSE VALOR NUMA VARIÁVEL E ESSA VARIÁVEL NUM LCD? TENTEI ISSO, MAS NÃO FUNCIONOU... RS

unsigned int8 rx_buffer= WireRX;

void main()

{

enable_interrupts(INT_RDA);

enable_interrupts(global);

lcd_init();

while (TRUE) {

printf(lcd_putc,"%c",rx_buffer);

}

}

Montei o circuito assim, olha a imagem:

A sim, outra coisa que ia esquecendo, aquele pino que você disponibilizou pra ligar o transmissor ele pode ligar o transmissor diretamente? ou tenho que chavear com um transistor? os 20ma de corrente dá pra ligar ele e transmitir?

Tô no aguardo.. Valeu a ajuda!!:):)

post-801738-13884959665011_thumb.jpg

Link para o comentário
Compartilhar em outros sites

Olá amigo, tive uma ideia, que pode facilitar um pouco a sua vida ... estava eu aqui tentando implementar decodificação por software no PIC, até que consegui ... e funciona muito bem ... minha sugestão é que você compre 1 controle daqueles de portão pra cada mesa, que custa 9,90 cada, do tipo Learn Code, cada um tem uma identificação unica, você prende o controle na mesa por um cordão metalico, e faz apenas a central ... porque fazer 15 transmissores ... sei lá ... da bastante trabalho né ... ai a pessoa aperta o botão do controle e já aparece lá na central ql mesa tá chamando e pode até fazer um esquema tipo, colocar numero nos botões, são 3 botões geralmente, ai aperta o botão 3 é pra pedir a conta ... e os outros 2 pra chamar ... sei lá ... vai da sua criatividade, essa é a minha sugestão. abraços.

Moss.... como você fez isso? eu já tinha pensado nisso, mas como vou fazer o pic entender cada controle diferente?

Como seria essa central? da uma luz ai!

Link para o comentário
Compartilhar em outros sites

Olá amigo, cada controle do tipo Learn Code, que usam ht6p20b tem um codigo unico, que você pode decodificar por software, e pegar este numero e cadastrar no seu pic todos os controles, e pronto, você terá o sistema de chamado...

segue o codigo da função, (não é de minha autoria, apenas modifiquei para funcionar)


#define RFIn PIN_B0 //entrada do sinal de RF
#define NBIT 28 // numero de bits


INT32 DATA=0;

int1 decoder(void)
{
byte x=0;
int16 time_aux=0;
DATA=0;
while(!input_state(RFIn))
{
time_aux++;
delay_us(10);
}

if((time_aux>1149) || (time_aux<=1151))
{

for(x=0;x<NBIT;x++)
{
while(input_state(RFin));
delay_us(250);

if(input_state(RFIn))
{
return FALSE;
}

delay_us(500);
if(!input_state(RFIn))
{
data|=0x8000000;
data>>=1;
}else data>>=1;
delay_us(500);
if(!input_state(RFin))
{
return FALSE;
}


}
return TRUE;
}
else return FALSE;

}

abraços

Link para o comentário
Compartilhar em outros sites

Bom, vamos lá....

ESSA VARIÁVEL ABAIXO É QUE DETERMINARÁ O NÚMERO DA MESA? TEM COMO COLOCAR 01, 02, 15 COMO NO EXEMPLO?

int8 envio[7]={1,2,3,4,5,6}; // "01" será o número de cada mesa, Ex: 01, 02, 03, 04

Sim, dá para mudar. Onde tem o 1,2,3,4,5,6, você muda para 0,1 ou 0,2 ou 0,3 dependendo da mesa.

ESSAS QUATRO LINHAS ABAIXO SÃO MESMO NECESSÁRIAS?

fprintf(Wireless, "%c", 0xBA); // olhe receptor, estou aqui

fprintf(Wireless, "%c", 0xBE); // olhe receptor, estou aqui

fprintf(Wireless, "%c", 0xFA); // olhe receptor, estou aqui

fprintf(Wireless, "%c", 0xCE); // olhe receptor, estou aqui

Sim, são necessárias.. Isso serve para que o receptor localize o transmissor... Pois o transmisor estará desligado e enviará esse "lixo" para fazer com que o transmissor "foque" nele.

Veja essa parte:

for (i=0;i<8;i++)
{
fprintf(Wireless,"%d",envio[i]);
}

Isso aí você deve mudar. Veja que no código que postei você envia 7 dígitos. 1 a 6.

Como você vai enviar apenas dois dígitos mude para for i até 2

O QUE RECEBE O VALOR DO TRANSMISSOR É O rcv=WireRX ?? COMO POSSO COLOCAR ESSE VALOR NUMA VARIÁVEL E ESSA VARIÁVEL NUM LCD? TENTEI ISSO, MAS NÃO FUNCIONOU... RS

Nem vai funcionar mesmo! :D

Sim! É o wireRX que recebe, mas ele recebe durante a interrupçao:

 [b]#int_RDA
void RDA_isr(void)
{
rx_buffer[rx_wr_index] = getc();
.......[/b]

Veja que meu código já está feito para ser impresso aqui:

for (i = 0; i < 7; i++)
{

printf(lcd_putc,"%c",rx_buffer[i]);
}

Novamente, você tem o 7 alí. Modifique.

você precisa compreender que o PIC não envia frase inteira ou números, apenas dígitos de tamanhos pré-definidos....... você monta eles depois.....

No mais é só isso mesmo!

Dúvidas? Pergunte!

Falou

Link para o comentário
Compartilhar em outros sites

Olá amigo, cada controle do tipo Learn Code, que usam ht6p20b tem um codigo unico, que você pode decodificar por software, e pegar este numero e cadastrar no seu pic todos os controles, e pronto, você terá o sistema de chamado...

segue o codigo da função, (não é de minha autoria, apenas modifiquei para funcionar)


#define RFIn PIN_B0 //entrada do sinal de RF
#define NBIT 28 // numero de bits


INT32 DATA=0;

int1 decoder(void)
{
byte x=0;
int16 time_aux=0;
DATA=0;
while(!input_state(RFIn))
{
time_aux++;
delay_us(10);
}

if((time_aux>1149) || (time_aux<=1151))
{

for(x=0;x<NBIT;x++)
{
while(input_state(RFin));
delay_us(250);

if(input_state(RFIn))
{
return FALSE;
}

delay_us(500);
if(!input_state(RFIn))
{
data|=0x8000000;
data>>=1;
}else data>>=1;
delay_us(500);
if(!input_state(RFin))
{
return FALSE;
}


}
return TRUE;
}
else return FALSE;

}

abraços

Cara, muito obrigado! Vou estudar esse código pra vê o quê que dá.

Mas me responde algumas coisas:

1 - Esse código que cada controle do tipo Learn Code tem, como vou saber qual é pra poder cadastrar no pic? ele vem impresso no cotrole? qual a forma de saber qual é?

2 - O pino de entrada "PIN_B0" você definiu ele como "RFIn" o código que você disse que tem em cada controle, ficará no lugar da variável data|=0x8000000;?

3 -você sabe os modelos que usam o ht6p20b?

4 - E a central? seria um alarme comum? aqui os alarmes tem muito esse módulo RR3 de 433,92 MHz. Eu ligaria a saida dele no pino B0 do pic?

Desculpe tantas perguntas, é que eu gostei mesmo disso que você me mostrou

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!