Go Down

Topic: Moduli 433mhz (Read 4690 times) previous topic - next topic

cece99




Per trasmettere basta fare uno XOR col clock del segnale..
Per ricevere il codice diventa un pò più complesso.. ma non impossibile da scrivere, in una mezz'ora dovresti farcela

Ciao

ho paura che per un ragazzo di 13 anni quella mezz'ora diventi 7 giorni.
Comunque, non c'è nessun chip che si collega via seriale ad arduino e ci pensa lui alla modulazione?

xbee o nrf24l01+ hanno una librerie dedicata  :smiley-mr-green:

gli nrf24l04+ ce gli ho già, gli xbee non mi piacciono: troppo costosi.

Vorrei semplicemente usare i modulini che ho già, non è che eseste un chip che codifica e decodifica i dati x mandarli al modulino?
Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono
  sufficienti i data sheet dei microprocessori.

cyclone

#16
Sep 14, 2012, 05:31 pm Last Edit: Sep 14, 2012, 05:33 pm by cyclone Reason: 1
@cece
visto che non demordi quello che posso fare per aiutarti è allegarti un semplicissimo stralcio di codice C che realizza l'algoritmo.
il codice Encode converte in manch un byte, mentre l'encode riporta il  codice in un byte....

la parte encoder manchester:
Code: [Select]

void EncodeData(BYTE txbyte)
{
int i,j,b,me; //me=manchester encode int
b = txbyte;

for (i=0; i<2; i++) {
me = 0; // txbyte codificato manchester
for (j=0 ; j<4; j++) {
me >>=2;
if (bit_test(b,0) )
me |= 0b01000000; // 1->0
else
me |= 0b10000000; // 0->1
b >>=1;
}
putc(me);
}
}


questa è la parte decoder manchester:
Code: [Select]

BYTE DecodeData(BYTE encoded)
{
BYTE i,dec,enc,pattern;
enc = encoded;

if (enc == 0xf0) // start/end condition encountered
return 0xf0;
dec = 0;
for (i=0; i<4; i++) {
dec >>=1;
pattern = enc & 0b11;
if (pattern == 0b01) // 1
bit_set(dec,3);
else if (pattern == 0b10)
bit_clear(dec,3); // 0
else
return 0xff; // codice illegale
enc >>=2;
}
return dec;
}


esistono codici che ho scritto in altri linguaggi ..... ma questo è il più semplice che potresti utilizzare per la tua applicazione.
ciao

cece99


@cece
visto che non demordi quello che posso fare per aiutarti è allegarti un semplicissimo stralcio di codice C che realizza l'algoritmo.
il codice Encode converte in manch un byte, mentre l'encode riporta il  codice in un byte....

la parte encoder manchester:
Code: [Select]

void EncodeData(BYTE txbyte)
{
int i,j,b,me; //me=manchester encode int
b = txbyte;

for (i=0; i<2; i++) {
me = 0; // txbyte codificato manchester
for (j=0 ; j<4; j++) {
me >>=2;
if (bit_test(b,0) )
me |= 0b01000000; // 1->0
else
me |= 0b10000000; // 0->1
b >>=1;
}
putc(me);
}
}


questa è la parte decoder manchester:
Code: [Select]

BYTE DecodeData(BYTE encoded)
{
BYTE i,dec,enc,pattern;
enc = encoded;

if (enc == 0xf0) // start/end condition encountered
return 0xf0;
dec = 0;
for (i=0; i<4; i++) {
dec >>=1;
pattern = enc & 0b11;
if (pattern == 0b01) // 1
bit_set(dec,3);
else if (pattern == 0b10)
bit_clear(dec,3); // 0
else
return 0xff; // codice illegale
enc >>=2;
}
return dec;
}


esistono codici che ho scritto in altri linguaggi ..... ma questo è il più semplice che potresti utilizzare per la tua applicazione.
ciao


cyclone, di dove sei, che ti devo proprio offrire una pizza?
Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono
  sufficienti i data sheet dei microprocessori.

cece99

scusa, cyclone ma non riesco a compilare  :~
errore dell' encoder con l'ide 0022:
Quote










sketch_sep14a.cpp:18:9: error: macro "putc" requires 2 arguments, but only 1 given
sketch_sep14a:-1: error: variable or field 'EncodeData' declared void
sketch_sep14a:-1: error: expected `)' before 'txbyte'
sketch_sep14a:0: error: variable or field 'EncodeData' declared void
sketch_sep14a:0: error: expected `)' before 'txbyte'
Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono
  sufficienti i data sheet dei microprocessori.

cyclone

@cece,
ti ricordi cosa avevi chiesto? se non ricordo male uno stralcio di codice.... io ne ho postati 2  XD
naturalmente scherzo e capisco le tue difficoltà :)

il codice che ti ho postato è in formato standard C .... e si tratta del pseudo-codice per mostrarti l'agoritmo di
encode e decode manchester.... non puoi prenderlo e compilarlo senza adattarlo al tuo SV.

Hai capito come funziona?
Se SI allora prova a riadattarlo.... se è no, devi trovare altre soluzioni o scopiazzare dalla rete.



cece99


@cece,
ti ricordi cosa avevi chiesto? se non ricordo male uno stralcio di codice.... io ne ho postati 2  XD
naturalmente scherzo e capisco le tue difficoltà :)

il codice che ti ho postato è in formato standard C .... e si tratta del pseudo-codice per mostrarti l'agoritmo di
encode e decode manchester.... non puoi prenderlo e compilarlo senza adattarlo al tuo SV.

Hai capito come funziona?
Se SI allora prova a riadattarlo.... se è no, devi trovare altre soluzioni o scopiazzare dalla rete.




ok, allora scarico un compilatore x C standard, compilo il tutto e carico l'hex sull' atmega col pickit2 :D
Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono
  sufficienti i data sheet dei microprocessori.

flz47655

Ma non ti conviene cercare di capire il codice? Impari qualcosa e ne trai sicuramente più soddisfazione che stare a perdere tempo con compilatori C magici..

cece99


Ma non ti conviene cercare di capire il codice? Impari qualcosa e ne trai sicuramente più soddisfazione che stare a perdere tempo con compilatori C magici..

eh si, scherzavo, quando ho dempo do un occhio al codice (e ringrazio ancora cyclone).
Se non ci rieco invito harry potter a cena, che ieri sera ha fatto miracoli :D
Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono
  sufficienti i data sheet dei microprocessori.

cece99

oggi ho trovati questa libreria: https://github.com/mchr3k/arduino-libs-manchester
non ci sono esempi e quindi non capisco bene come usarla, qualcuno mi aiuta?
Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono
  sufficienti i data sheet dei microprocessori.

Simoneaudi93

un "esempio" lo trovi in basso, basta scorrere la pagina ;)

cece99


un "esempio" lo trovi in basso, basta scorrere la pagina ;)

Grazie, ma l'avevo già visto, il casino è mettere insieme tutto
Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono
  sufficienti i data sheet dei microprocessori.

amaze1


Ciao,
anch'io recentemente ho avuto a che fare con questi moduli.
Per il test che ho condotto, ho usato oltre all'Arduino (per ricevere) anche un secondo Atmega328 in standalone (in trasmissione).
Ho utilizzato la libreria VirtualWire con i seguenti codici:

<...>

Vedi se riesci a far funzionare il tutto.

Un saluto,
Tredipunta.


Pensate sia possibile utilizzare questa libreria con un attiny85 ?
Se provo a selezionarlo come destinazione, anche eliminando i riferimenti alla seriale, ho errori di compilazione:
C:\Program Files (x86)\arduino-1.0.1\libraries\VirtualWire\VirtualWire.cpp: In function 'void vw_setup(uint16_t)':
C:\Program Files (x86)\arduino-1.0.1\libraries\VirtualWire\VirtualWire.cpp:263: error: 'TCCR1A' was not declared in this scope
C:\Program Files (x86)\arduino-1.0.1\libraries\VirtualWire\VirtualWire.cpp:264: error: 'TCCR1B' was not declared in this scope
C:\Program Files (x86)\arduino-1.0.1\libraries\VirtualWire\VirtualWire.cpp:264: error: 'WGM12' was not declared in this scope


stranamente con un attiny84 invece sembra ok

Anche io volevo utlizzare questi moduletti per dei sensori remoti di temperatura e volevo stare compatto ...
_____
MazE

Go Up