Come generare 2 toni a 1200bps con PIC

Ciao a tutti, non riesco a capire in che modo posso generare 2 toni ( 1200hz per "0" binario e 2200hz per "1" binario) alla velocita di 1200bps usando un PIC. So che esistono gia diversi modelli commerciali ( TinyTrack) ma vorrei scrivere il firmware io. In parole povere,tralasciando eventuali protocolli o altro, se io volessi "modulare" la parola "ciao" usando le 2 frequenze sopra menzionate, come dovrei fare ? Ho visto su alcuni siti che in uscita al PIC ci mettono 4 resistenze di valore crescente ... che funzione hanno ?(R1,R2,R3 e R4)

formatting link
Sicuramente ho descritto il problema in modo confuso ... è solo inesperienza :-) Grazie a tutti!

Reply to
RadioS
Loading thread data ...

Il 06/09/2010 00:11, RadioS ha scritto:

Ma stai cercando di fare una specie di RTTY? Per generare i due toni la cosa è piuttosto semplice: nello schema che hai postato sembra che usino un rozzo DAC con resistenze pesate, ma devi generare tu la "sinusoide" modificando continuamente le uscite.

Io avevo fatto una cosa simile utilizzando semplicemente un timer hw in modo tale che generasse un'onda quadra al 50% di frequenza f1 o f2. A seguire un op-amp in configurazione passa banda a reazione multipla con un Q adeguato a far passare giusto le due fondamentali. In uscita avevi una perfetta sinusoide.

Poi si tratta solo di "modulare" i due toni (ovvero saltare da un tono all'altro) in base al protocollo.

L'avevo fatto per una stazioncina meteo che mi trasmetteva dal terrazzo, ricevevo il segnale con la radio e la decodificavo sul pc. Non credo però di avere ancora del materiale a riguardo.

Ciao! Marco

Reply to
Marco Trapanese

AX.25

OK!

E' proprio qua che sono bloccato! In che modo converto in binario, per esempio, la lettera "C" in uscita al pic ? ... sono abituato a ragionare in termini seriali o paralleli Per esempio in C++ o Basic ci sono le apposite librerie, ma dare in output al pic una stringa di 1 o 0 partendo da una char per esempio non ne ho la minima idea!

Grazie e ciao!

Reply to
NPN

La "lettera" C e' un byte come tutti gli altri, e' gia' in binario e vale 67 (codice ASCII). Con 8 test sul bit 0 o sul bit 7, piu' 8 shift rispettivamente a destra o a sinistra, testi i singoli bit.

ciao Claudio_F

Reply to
Claudio_F

Il 06/09/2010 00:11, RadioS ha scritto:

Ho scritto un modem completo AFSK, utilizzabile per fare APRS per l'RTOS che trovi in firma, la cosa è un attimino complessa, te la posso spiegare a parole, per i dettagli magari poi fai domande più specifiche dopo.

Abbiamo anche un progettino che fa da modem AFSK1200 completo (trasmette e riceve) che gira su Arduino o qualsiasi altro micro supportato da BeRTOS. Ecco il link, con schemi e sorgenti:

formatting link

Per i dettagli su come fare a modulare un segnale APRS, devo dire che ci sono vari layer impilati l'uno sull'altro e non si possono "tralasciare eventuali protocolli o altro" perché altrimenti, il tutto non funziona :-(

Partendo dal livello più alto: la tua stringa viene messa nel campo messaggio di un pacchetto del protocollo AX25, insieme a indirizzi (nominativi) del mittente e del destinatario.

Del pacchetto viene calcolato il CRC e poi tutto viene inviato al layer sottostante, HDLC. Tagliando corto, esso si occupa di prendere i singoli bit, li mette tutti in fila e quando trova più di 5 "uni" in fila ci aggiunge uno zero. Questo, che in gergo si chiama "bit stuffing", serve per evitare che il carattere marcatore di inizio frame (che mi sembra sia 0xFE) venga a trovarsi nel mezzo del payload. Esso è infatti l'unico carattere che contiene 5 "uni" in fila; in questo modo il ricevitore riesce a rilevare con più semplicità l'inizio dei frame.

Passando al layer sottostante, i singoli bit vengono poi utilizzati per modulare la portante audio. Se il bit da inviare è uno "0", la portante cambia frequenza, se è un "1", la frequenza rimane costante. Come già sai le due frequenza usate sono 1200Hz per il mark e 2200Hz per lo space. Per generarle di solito si usa una tecnica chiamata DDS, che produce una serie di campioni. I campioni vengono poi inviati ad un DAC e da qui al trasmettitore radio.

Come ha detto Marco, è un DAC R2R a 4 bit fatto in modo semplice. Le 4 uscite devono essere aggiornate con periodicità regolare con i campioni generati dal DDS.

--
  _|/ Francesco Sacchi - Develer S.r.l., R&D dept.
   |\ http://www.develer.com/ - http://www.bertos.org/
Reply to
Francesco Sacchi

Il 06/09/2010 11:47, NPN ha scritto:

Beh prima di tutto devi studiarti il protocollo, non è una semplice telescrivente:

formatting link

poi come giustamente diceva Claudio, ti crei l'array di caratteri che devi trasmettere e effettui uno shift bit a bit su ciascuno (partendo dal primo bit che devi trasmettere) e cambi la frequenza di uscita in base al valore.

Marco

Reply to
Marco Trapanese

Il 07/09/2010 08:23, Marco Trapanese ha scritto:

Ops, non ho visto che ti aveva già risposto Francesco con tanto di progettino!

Marco

Reply to
Marco Trapanese

"Francesco Sacchi" ha scritto

Fantastico grazie!

Grazie Francesco per la minuziosa descrizione e per la pazienza... sei stato molto utile! Provo a mettermi al lavoro e vedere cosa combino. Ringrazio anche le altre persone che hanno risposto alla mia domanda.

Reply to
NPN

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.