# Transmisor de UHF FSK con MAX7057

**URL:** <https://forodecoheteria.com.ar/t/transmisor-de-uhf-fsk-con-max7057/351>\
**Category:** Comunicaciones y Telemetría\
**Created:** [29 Octubre, 2024 16:01 UTC](https://forodecoheteria.com.ar/t/transmisor-de-uhf-fsk-con-max7057/351 "2024-10-29T16:01:56Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Ruben](https://forodecoheteria.com.ar/letter_avatar_proxy/v4/letter/r/59ef9b/32.png) [@Ruben](https://forodecoheteria.com.ar/u/Ruben)\
**Post date:** [29 Octubre, 2024 16:01 UTC](https://forodecoheteria.com.ar/t/transmisor-de-uhf-fsk-con-max7057/351/1 "2024-10-29T16:01:56Z")

</div>

Buenas, tengo como unos 10 integrados MAX7057 que supe pedir como muestras gratis a MAXIM semiconductors.  
El MAX7057 es un transmisor pensado para llaveros de 315MHz a 433MHz, puede ser configurado como transmisor ASK o FSK.  
LA idea es aprovechar este integradito para transmitir las coordenadas GPS de un cohete y ver de recibirlos en una radio UHF tipo YAESU, BAOFENG etc.  
También se puede llegar a transmitir alguna telemetría.

Tengo armado el prototipo de transmisor pero me falta la parte de programación, tiene montado un PIC 12F675, pero por facilidad me parece lo voy a reemplazar por un arduino nano por el momento. Esta placa la hice hace muchos años y quedó inconclusa, ya poco me acuerdo de programar PIC, recuerdo usaba el compilador CCS PIC-C.  
De arduino me acuerdo poco y nada también, pero me parece hay mas recursos online.  
A medida que avance iré publicando los progresos, si alguien se quiere sumar bienvenido sea.

Link a la hoja de datos:  
[https://www.analog.com/media/en/technical-documentation/data-sheets/MAX7057.pdf](https://www.analog.com/media/en/technical-documentation/data-sheets/MAX7057.pdf)

Hay que programar una serie de registros usando una interfaz SPI  
Como siempre busqué en Internet algún proyecto similar o librerias para este integrado pero no pude encontrar nada, la inteligencia artificial no sirvió de mucho (no tiene ni idea que es cuando le pedí un código para esto).  
  
  
[![](https://i.postimg.cc/bDkyM6WL/Whats-App-Image-2024-10-29-at-12-41-29.jpg)](https://postimg.cc/bDkyM6WL)

La placa de abajo es un amplificador de 5W (se puede ajustar a 1W).

Los diseños de la placa los paso cuando los encuentre jeje, hace varios años la diseñé.

---

<div class="post-metadata">

**Author:** ![Gustavo](https://forodecoheteria.com.ar/user_avatar/forodecoheteria.com.ar/gustavo/32/144_2.png) [@Gustavo](https://forodecoheteria.com.ar/u/Gustavo)\
**Post date:** [30 Octubre, 2024 23:54 UTC](https://forodecoheteria.com.ar/t/transmisor-de-uhf-fsk-con-max7057/351/2 "2024-10-30T23:54:52Z")

</div>

Interesante Rubén!

Entiendo que la banda de 433 mhz no ofrece grandes distancias, pero quizás esté equivocado.

Yo sumaría a las alternativas del PIC a los mini ESP32, son incluso mas económicos que los Arduino Nano, mas pequeños y prácticamente se programan igual, ya que se puede utilizar el mismo entorno de Arduino, es decir, Arduino IDE.  
[https://articulo.mercadolibre.com.ar/MLA-1422278885-placa-de-desarrollo-esp32-c3-super-mini-wifi-bluetooth-\_JM](https://articulo.mercadolibre.com.ar/MLA-1422278885-placa-de-desarrollo-esp32-c3-super-mini-wifi-bluetooth-_JM)

Hay un sitio que tiene muchísimos proyectos para hacer con ESP32:  
[https://randomnerdtutorials.com/projects-esp32/](https://randomnerdtutorials.com/projects-esp32/)

Y por otro lado, al menos chatGPT está familiarizado con la programación de estos equipos, pero como en todo desarrollo, no hay que confiarse 100% de lo que hace porque suele errarle.

Saludos!!

---

<div class="post-metadata">

**Author:** ![Ruben](https://forodecoheteria.com.ar/letter_avatar_proxy/v4/letter/r/59ef9b/32.png) [@Ruben](https://forodecoheteria.com.ar/u/Ruben)\
**Post date:** [4 Noviembre, 2024 16:35 UTC](https://forodecoheteria.com.ar/t/transmisor-de-uhf-fsk-con-max7057/351/3 "2024-11-04T16:35:17Z")

</div>

Hola Gustavo, gracias por los comentarios.

“Entiendo que la banda de 433 mhz no ofrece grandes distancias, pero quizás esté equivocado.”  
Depende del entorno, para comunicaciones espaciales anda muy bien y las antenas son mas pequeñas que en VHF.

ESP32 no he trabajado nunca todavía, en cambio arduino algo he hecho, ya se cómo se conecta y cómo se graba, me falta acordarme como se escribe un programa jaja  
Arduino tengo varios, ESP32 ninguno, por lo que por ahora iré con lo que tengo. Calculo se podrá migrar después el programa a ESP32.

“Y por otro lado, al menos chatGPT está familiarizado con la programación de estos equipos, pero como en todo desarrollo, no hay que confiarse 100% de lo que hace porque suele errarle.”  
No he indagado mucho en chat GPT probé que me tire un programa hola mundo en arduino y lo hace bien, cuando le pedí un programa para esto me tiraba cualquier cosa, le pregunté si sabía que era el MAX7057 ni idea tenía, intenté formular el pedido de distintas formas, y ni idea tiene, en vez de decir “no lo se” te tira cualquier verdura (ya se contaminó de la raza humana jajaja). Le pedí que me buscara contenido relacionado y me tiraba algo de que no puede hacer eso.

Saludos

---

<div class="post-metadata">

**Author:** ![Ruben](https://forodecoheteria.com.ar/letter_avatar_proxy/v4/letter/r/59ef9b/32.png) [@Ruben](https://forodecoheteria.com.ar/u/Ruben)\
**Post date:** [5 Noviembre, 2024 12:34 UTC](https://forodecoheteria.com.ar/t/transmisor-de-uhf-fsk-con-max7057/351/4 "2024-11-05T12:34:38Z")

</div>

Buenas, les dejo el primer intento de programa. todavía no lo he probado en el hardware

/\*  
Transmisor FSK con MAX7057  
La idea es generar un programa que fije la frecuencia de transmisión  
En principio la frecuencia es fija y se cambiaría reeditando el código fuente y volviendo a programar el arduino  
Basicamente hago una funcion que sea la que programe los registros, la salida de datos es tipo SPI (hago un SPI manual)

última edicion: 05/11/2024

\*/  
int spi\_clk = 5;  
int spi\_data = 6;  
int spi\_enable = 7;

float freq = 433000; //Frecuencia central de transmisión en kHz  
float deviation = 10; // desviación en khz (desviación total es 2 veces este valor)  
float fhi = freq + deviation; //Frecuencia superior en kHz  
float flo = freq - deviation; //Frecuencia inferior en kHz  
float fxtal= 16000; //Frecuencia del xtal en kHz

unsigned int fhi\_float;  
unsigned int flo\_float;

unsigned int fhi\_reg;  
unsigned int flo\_reg;  
byte fhi\_reg\_msb;  
byte fhi\_reg\_lsb;  
byte flo\_reg\_msb;  
byte flo\_reg\_lsb;

byte CTRL\_REG = 0b00000111; //el registro de control asigno los valores manualmente en esta variable  
byte CFG\_REG = 0b00000000; //el registro de configuracion asigno los valores manualmente en esta variable  
byte ADDRESS = 0x00;  
  
  
  
// the setup function runs once when you press reset or power the board  
void setup() {

// initialize digital pin LED\_BUILTIN as an output.  
pinMode(LED\_BUILTIN, OUTPUT);  
pinMode(spi\_data, OUTPUT);  
pinMode(spi\_clk, OUTPUT);  
pinMode(spi\_enable, OUTPUT);

digitalWrite(spi\_enable, 1);  
digitalWrite(spi\_data, 0);  
digitalWrite(spi\_clk, 0);

Serial.begin(9600); // open the serial port at 9600 bps:

}

// the loop function runs over and over again forever  
void loop() {  
digitalWrite(LED\_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)  
delay(1000); // wait for a second  
digitalWrite(LED\_BUILTIN, LOW); // turn the LED off by making the voltage LOW  
delay(1000); // wait for a second  
// aca lo del led que parpadea es para ver que ande y no se tilde ////////

//////// Cálculo de los valores a programar en los registros de frecuencia ///////////////////////////

fhi\_float = ((fhi/fxtal)-16)\*4096;  
fhi\_reg = round(fhi\_float);

fhi\_reg\_lsb = fhi\_reg & 0xFF;  
fhi\_reg\_msb = (fhi\_reg \>\> 8) & 0xFF;

flo\_float = ((flo/fxtal)-16)\*4096;  
flo\_reg = round(flo\_float);

flo\_reg\_lsb = flo\_reg & 0xFF;  
flo\_reg\_msb = (flo\_reg \>\> 8) & 0xFF;

programar\_registro(0x00, CTRL\_REG); // programo el registro de control en la dirección 0x00 (en el comentario final estan los bit de control)  
programar\_registro(0x01, CFG\_REG); // programo el registro de configuración en la dirección 0x01 (en el comentario final estan los bit de configuracion)  
programar\_registro(0x07, 0x00); // programo el resitro DATAIN con 0 de acuerdo a la hoja de datos  
programar\_registro(0x08, 0x00); // programo el resitro EN con 0 de acuerdo a la hoja de datos  
programar\_registro(0x09, 0b00000010); // programo el resitro CONFIG1 con 010 para clockout  
programar\_registro(0x02, fhi\_reg\_msb); // programo el registro HIFREQ1  
programar\_registro(0x03, fhi\_reg\_lsb); // programo el registro HIFREQ0  
programar\_registro(0x04, flo\_reg\_msb); // programo el registro LOFREQ1  
programar\_registro(0x05, flo\_reg\_lsb); // programo el registro LOFREQ0

}

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

//////////// Programacion registro \<DATA D0 D1 … D7\> //////////  
void programar\_registro(byte REG\_NAME, byte DATA){

byte WCD = 0x01; // write command  
bool r;

digitalWrite(spi\_enable, 0); //Habilito el enable para transferir datos al registro

for (int a=8; a\>=1; a–) //Envia el comando de escritura 0x01  
{  
r = bitRead(WCD, (a-1));  
digitalWrite(spi\_data, r);  
digitalWrite(spi\_clk, 1);  
delay(2);  
digitalWrite(spi\_clk, 0);  
}  
delay(2);  
for (int b=8; b\>=1; b–) //Envia la direccion del registro a programar  
{  
r = bitRead(REG\_NAME, (b-1));  
digitalWrite(spi\_data, r);  
digitalWrite(spi\_clk, 1);  
delay(2);  
digitalWrite(spi\_clk, 0);  
}  
delay(2);  
for (int i=8; i\>=1; i–) //envia los datos a programar en el registro  
{  
r = bitRead(DATA, (i-1));  
digitalWrite(spi\_data, r);  
digitalWrite(spi\_clk, 1);  
delay(2);  
digitalWrite(spi\_clk, 0);  
}  
delay(2);  
digitalWrite(spi\_enable, 1); //Desabilito la transferencia de datos al registro  
}

/\* Direcciones de los registros

- ADDRESS:
- 0x00 Registro CONTROL (Control register. Controls the mode (ASK/FSK), crystal clock output, envelope-shaping, PLL bandwidth, and SPI enable.)
- 0x01 Registro CONFIG0 (Configuration 0 register. Controls the capacitance at the PA output and clock output frequency divider)
- 0x02 Registro HIFREQ1 (High-frequency 1 register (upper byte). Sets the high frequency in FSK transmission)
- 0x03 Registro HIFREQ0 (High-frequency 0 register (lower byte). Sets the high frequency in FSK transmission)
- 0x04 Registro LOFREQ1 (Low-frequency 1 register (upper byte). Sets the low frequency in FSK transmission, or carrier frequency in ASK transmission)
- 0x05 Registro LOFREQ0 (Low-frequency 0 register (lower byte). Sets the low frequency in FSK transmission, or carrier frequency in ASK transmission.)
- 0x06 Registro FLOAD (Frequency load register. Performs the frequency load function.)
- 0x07 Registro DATAIN (Data in register. SPI equivalent of DIN pin.)
- 0x08 Registro EN (Enable register. SPI equivalent of ENABLE pin.)
- 0x09 Registro CONFIG1 (Configuration 1 register. GPO selector.)
- 0x0C Registro STATUS (Status register)  
\*/

/\*

- Control Register (Address: 0x00)
- BIT 0: ASK(0) or FSK(1)
- BIT 1: Crystal clock output enable(1) on GPO output
- BIT 2: Crystal clock output enable(1) while part is in shutdown mode
- BIT 3: Disable(0) or enable(1) transmitter envelope-shaping resistor
- BIT 4: PLL bandwidth setting, low(0) = 300kHz or high(1) = 600kHz; 300kHz is recommended for fractional-N and 600kHz for fixed-N
- BIT 5: Enable(0) or disable(1) SPI communication during shutdow
- BIT 6: 0
- BIT 7: 0  
\*/

// CTRL\_REG = 0b00000111;

/\*

- Configuration 0 Register (Address: 0x01  
\*BIT 4-0: cap[4:0] 5-bit capacitor setting  
\*BIT 7-5 ckdiv[2:0] 3-bit clock output frequency divider  
\*/

//CFG\_REG = 0b00000000

/\*

- High-Frequency 1 Register (Address: 0x02)
- 7-0 fhi[15:8] 8-bit upper byte of high-frequency divider for FSK  
_/_  
   
   
   
_/_  
\*High-Frequency 0 Register (Address: 0x03)  
\*7-0 fhi[7:0] 8-bit lower byte of high-frequency divider for FSK  
\*/
