EA3HMJ Blog

Proyectos, ideas, trabajos & demás cosas

Archive for the ‘Arduino’ Category

The easiest way to program tiny1614 via UPDI

leave a comment »

Despues de la fusión de ATMEL y Microchip ha nacido una nueva generacion de micros tinyAVR serie 1.

Estos micro no se programan via ISP e incorporan un nuevo protocolo UPDI (Unified Program and Debug Interface) que permite con un pin programar y debugear.

Por comodidad uso el IDE de Arduino, en las referencias podeis encontrar como instalarlo, y con un simple conversor USB-TTL + una R de 4K7 se prof¡grama junto con el programa en python pyupdi.

La numeracion de los puertos es numerica, PA6 es 2, tenerlo en cuenta a la hora de programar.

En el IDE de Arduino debeis de marcar la casilla de mostrar detalle de compilación, dentro de Preferencias, para saber donde guarda el fichero Hex que debemos grabar.

«C:\Users\<tu nombre>\AppData\Local\Arduino15\packages\DxCore\tools\avr-gcc\7.3.0-atmel3.6.1-azduino4b/bin/avr-size» -A «C:\Users\<tu nombre>\AppData\Local\Temp\arduino_build_958864/sketch_sep21a.ino.elf»

En ese directorio os encontrareis vuestra compilacion.

Yo ejecuto pyupdi desde ese mismo directorio con la siguiente linea de comando.

C:\Users\<tu nombre>\AppData\Local\Temp\arduino_build_958864>python «<Donde tengas el programa>\pyupdi\updi\pyupdi.py» -d tiny1614 -c COM<?> -f sketch_sep21a.ino.hex -v

Cosas que he aprendido a base de pruebas:

  • No vale cualquier adaptador USB-TTL, solo me funciono con un FTDI original.
  • En el entorno de arduino no se puede seleccionar 20 MHz de velocidad de reloj interna, no funciona.
  • La opcion de milis() he tenido que desactivarla, porque no calcula bien los tiempos.

Referencias

Software en python para programar via UPDI y un USB-TTL adaptador

Como usar pyupdi con los tinyAVR serie 1

Como usar los nuevos tinyAVR con el IDE Arduino

Written by qlfecv

22 de septiembre de 2021 at 18:47

Publicado en Arduino, Proyecto

Tagged with , ,

LCD display for Trimble GPSDO

with 4 comments

Aprovechando que llevo un GPSDO he decido sacar mas rendimiento visualizando la posición del sol y dando el locator a 10 digitos.

Para ello he comprado un LCD de 2×20 reflectivo que se ve bien en condiciones de mucha luminosidad y grande, quizas mucho, pero es lo que encontre y no me fije en las medidas.

Aqui lo podeis encontrar.

http://uk.farnell.com/midas/mc22008b6w-spr-v2/display-alphanumeric-20×2-nobacklight/dp/2675639

https://www.ebay.es/itm/Expositor-alfanumerico-20×2-nobacklight-mc22008b6w-spr-v2-FNL-/272975252799

El mayor problema es que el protocolo del trimble no es NMEA es UCCM y no encontre nadie que lo tenga funcionando, por lo que me ha tocado programar de la A la Z las cosas que considere basicas.

Lo primero que hay que hacer es modificar el GPS para obtener la señal RX y TX a nivel de TTL, ya que la que facilita en el conector DB9 es RS232 y no es compatible con arduino.

Estas señales las sacaremos del conversor de TTL a RS232.

También necesitamos +5V que los obtenemos del regulador LT1764A que lleva la placa.

El negativo lo podemos coger de cualquier plano de masa que hay en el PCB.

Aprovechando que desmontaba el GPSDO le he sacado fuera el boton de reset y le he añadido un conector para sacara rx,tx,+5v y gnd al exterior.

Vamos con el LCD. Lo he soldado aprovechando los pins del LCD de forma que queda compacto y añadido un boton de reset del arduino por si hay que resetear.

Para finalizar he dibujado una caja para imprimirla en una impresora 3D para que por lo menos el tamaño no aumente más.

Y este es el resultado

Y ahora funcionando

 

 

Written by qlfecv

21 de diciembre de 2017 at 20:44

Publicado en Arduino, Ham radio, Proyecto

Tagged with , ,

New portable PLL for 24 & 47 GHz

leave a comment »

dsc03283

Pascual EA5JF se le ocurrió usar el PLL  ELCOM que tenemos en el equipo de 47 GHz para 24GHz y realizo la modificación  junto a José Luis EA5IOT, autor del soft para el arduino que lo controla, de meter 4 frecuencias con un conmutador externo, una vez lo sacaron adelante (cosa que no dudaba) lo he implantado yo para la nueva versión de mi estación portatil y ya voy por 5.

Como este PLL dispone de un oscilador fijo de 9200 MHz las frecuencias que generamos son:

2536 Mhz -> 47 GHz IF 144 MHz
2572 Mhz -> 47 GHz Beacon
2608 Mhz – > 24 GHz IF 144 MHz
2752 Mhz -> 24 GHz IF 432 MHz

photo324706653384583094

Un pequeño video de como funciona.

Seguiremos trabajando …

Written by qlfecv

18 de enero de 2017 at 20:29

Publicado en Arduino, Ham radio

Tagged with , , , ,

Control remoto con Arduino y conversor serie-Ethernet

with one comment

He adquirido en ebay este pequeño artefacto

usr-tcp-t-500x500

Lo podéis encontrar también aquí.

Y toda la información y aplicaciones aquí.

Sin entrar en grandes detalles os diré que permite configurarlo como cliente, y servidor TCP.

Para mi utilidad lo he configurado como servidor con la idea que sea el que reciba las peticiones vía ethernet de un programa y realice lo encomendado.

La comunicación entre el modulo y arduino se realiza con los pins rx, tx,gnd y 5v. No os olvidéis de cruzar tx y rx.

He realizado una pequeña aplicación en arduino que permite leer por ethernet 6 entradas analógicas y leer/escribir 5 digitales,muy fácilmente configurable.


/**************************************************************************//**
* Arduino remote control
* ver 1.0 (c) EA3HMj 2.015 ea3hmj.qlfecv.net
*
* use: USR-TCP232-T V2
* http://en.usr.cn/Ethernet-Module-T24/RS232-serial-to-ethernet-converter-tcp-ip-module
* Serial UART To Ethernet Converter,TCP/IP Module
*
* This library is free software: you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation, either version 3 of the License, or (at your option) any
* later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see http://www.gnu.org/licenses/
******************************************************************************/
/******************************************************************************
* Header file inclusions.
******************************************************************************/
/******************************************************************************
* Private variable declaration.
******************************************************************************/

/******************************************************************************
* Public function definitions.
******************************************************************************/
//The number of outputs going to be switched.
int outputQuantity = 5;
//Invert the output
boolean outputInverted = false; //true or false
// Select the pinout address
int outputAddress[5] = { 9,10,11,12,13};
/**************************************************************************//**
* void setup()
******************************************************************************/
void setup()
{
// speed module
Serial.begin(115200);
delay(1000);
// Define pin how out
for (int var = 0; var < outputQuantity; var++){
pinMode(outputAddress[var], OUTPUT);
}
}
/**************************************************************************//**
* void loop()
******************************************************************************/
void loop()
{
char incomingByte,pt,c;
int outp ;
// read analogic data
int RA0 = ReadSamples(A0,float)(500.0/1023.0);
int RA1 = ReadSamples(A1,(float)(500.0/1023.0));
int RA2 = ReadSamples(A2,(float)(500.0/1023.0));
int RA3 = ReadSamples(A3,(float)(500.0/1023.0));
int RA4 = ReadSamples(A4,(float)(500.0/1023.0));
int RA5 = ReadSamples(A5,(float)(500.0/1023.0));

if (Serial.available()>0){
incomingByte = Serial.read();
// Dump datas
if (incomingByte=='*'){
// Send analogic inputs
Serial.print(RA0);
Serial.print("*");
Serial.print(RA1);
Serial.print("*");
Serial.print("2");
Serial.print(RA2);
Serial.print("*");
Serial.print("3");
Serial.print(RA3);
Serial.print("*");
Serial.print("4");
Serial.print(RA4);
Serial.print("*");
Serial.print("5");
Serial.print(RA5);
Serial.print("*");
// Send digital output
for (int var = 0; var < outputQuantity; var++){
Serial.print(digitalRead(outputAddress[var]),DEC);
Serial.print("*");
}
// switch digital output
}else if (incomingByte=='?'){
// read values
while (!Serial.available());
pt = Serial.read()-48;
while (!Serial.available());
c = Serial.read();
//if user input is H set output to 1
if(c == 'H') {
outp = 1;
}
//if user input is L set output to 0
if(c == 'L') {
outp = 0;
}
triggerPin(outputAddress[pt], outp);
}
}
}
////////////////////////////////////////////////////////////////////////
//triggerPin Function
////////////////////////////////////////////////////////////////////////
void triggerPin(int pin, int outp){
//Switching on or off outputs, reads the outputs and prints the buttons
if(outp == 1) {
if (outputInverted ==false){
digitalWrite(pin, HIGH);
}
else{
digitalWrite(pin, LOW);
}
}
if(outp == 0){
if (outputInverted ==false){
digitalWrite(pin, LOW);
}
else{
digitalWrite(pin, HIGH);
}
}
}
///////////////////////////////////////////////////////////////////////////
//special Functions
////////////////////////////////////////////////////////////////////////
int ReadSamples(int ana,float scale){
int i;
double s;
int sample=256;

// Sampling loop
for(i=0, s=0; i<sample; i++){
s += analogRead(ana);
}
s /= (double)sample;
s = s*scale;
i=(int)s;
return i;
}

El protocolo es muy sencillo, admite los siguientes comandos:

«*» Devuelve una cadena con el formato 1230*5*27*33*44*57*0*0*1*0*0*

Los 6 primeros valores son las entradas analogicas y los 5 siguientes las salidas digitales

«?xH/L» Para modificar la salida digital anúmero x al valor L o H , ejemplo activar la salida 3: ?3H, desactivar la 4, ?4L, los indices empiezan siempre por cero.

Para el PC uso el programa en Visual Basic

Captura de pantalla 2015-05-03 a las 19.55.17

Aquí os podéis bajar el soft

 

Written by qlfecv

3 de mayo de 2015 at 18:58

Publicado en Arduino, Ham radio, Proyecto

Tagged with , ,

Posición del Sol & Luna II

leave a comment »

He decido montar un posicionar del sol y la luna, pero esta vez que pueda ver toda la información en pantalla.

En ebay se encuentran pantallas LCD OLE de 128×64 1.3″ que para el exterior no son muy buenas, pero para lo que la quiero cubre de sobra las expectativas.

 

DSC01693 DSC01692

 

Montado en una cajita lowcost

DSC01717

Para que os hagáis una idea del tamaño

DSC01718

Written by qlfecv

24 de mayo de 2014 at 18:53

Publicado en Arduino, Ham radio

Tagged with , , , , , ,

Ultimate 3 baliza WSPR

leave a comment »

El amigo Hans G0UPL ha creado un kit Ultimate3 QRSS/WSPR que es una maravilla para realizar pruebas en estos modos.

DSCN0110 DSCN0109

Para actualizar el firmware del Ultimate3 he usado el programador USBTinyISP junto con un Arduino UNO. Arduino UNO tiene un ATMEGA328P y  Ultimate3 un ATMEGA328.

DSCN0106

Hay que instalar WinAVR y usaremos el programa avrdude para grabar. Hay un pequeño problema, avrdude no soporta el chip ATMEGA328, por lo que modificaremos el fichero avrdude.conf y añadiremos este chip siguiendo este guión.

Quitamos de la placa Arduino el chip ATMEGA328P y lo sustituimos por el de Ultimate3 ATMEGA328.

Ahora lo más facil, primero programamos la memoria flash y luego la eeprom.

write flashwrite eeprom

Ya tenemos actualizado nuestro Ultimate3.

DSCN0111

 

 

 

Written by qlfecv

3 de abril de 2014 at 18:27

Posición del Sol & Luna

leave a comment »

El amigo Pascual EA5FJ me comento que usaba un invento llamado ROVERBOX de on4iy que con un GPS NMEA da en un display la posición del sol respecto a nuestra posición.

Este artilugio es muy útil para posicionarse, por lo que me puse manos a la obra para hacerme uno aprovechando  el GPS que uso para disciplinar los PLLs, el Jupiter TU6 que usa protocolo binario.

Como siempre me pasa, le escribí al colega on4iy y me comento que no lo soporta, por lo que me he visto en la necesidad de hacérmelo.

Me sonaba que Goody ha implementado en su Arduino Rotator Controler el seguimiento del sol y luna, por lo que no ha sido difícil implementar en una plataforma arduino el invento, solo se necesita decodificar las tramas binarias.

sunposition

El resultado es este

DSC01574DSC01575

Written by qlfecv

16 de marzo de 2014 at 9:52

Publicado en Arduino, Ham radio, Proyecto

Tagged with , , ,

24Ghz partyday III

leave a comment »

Después de darle unas vuelta a la frecuencia de referencia de 103.58 Mhz me he dado cuenta que es complicado de disciplinarlo con un simple PLL, ya que si descomponemos el valor es solo divisible por 2 y 5179 lo que hace muy difícil el PLL y habría que recurrir a un DDS inverso a algo así.

Entonce cambio de planes y  usaremos una frecuencia de referencia de 103.5Mhz que son cristales normalitos y facil de disciplinar con PLL.

Para ello lo primero que miraremos es el oscilador local que esta en 23.616 Ghz la tensión de sintonia (VT)  por si tenemos que volver al estado inicial.

DSC01072 DSC01073

 

Ahora calculamos la nueva Lo = 103.5Mhz *228 = 23.598 Ghz que al restar 24.048 nos da una IF de 450 Mhz.

Resintonizamos el DRO hasta la nueva frecuencia con esa referencia.

DSC01076 DSC01075

 

Ya podemos sacar la referencia a fuera y tapar el transvecter

DSC01081 DSC01080

 

Y a probar con la nueva referencia y IF.

DSC01082 DSC01083 DSC01084 DSC01081

 

Ahora queda disciplinar un ocxo a 103.5 Mhz y ya tendremos un transvecter de 24 Ghz «decente»

 

Written by qlfecv

23 de septiembre de 2013 at 22:29

Publicado en Arduino, Proyecto

Tagged with , ,

24Ghz partyday II

leave a comment »

Otro día de 24 Ghz junto con Iban EB3FRN en su shack.

Después de los ajustes necesarios, viene el ensamblaje final de todos los componentes, tanto en RF como en DC y las pruebas finales.

Aunque parezca mentira lo que más trabajo ha dado ha sido un rele de RF que conmutaba pero no daba continuidad, eso nos hizo perder más de 2 horas.

Gran aprendizaje con los latiguillos. Primera conclusión, no usar nunca en RF conectores sma de 90º, se comen la señal que da gusto. Cualquier cable bueno que sea corto es útil.

EL montaje preliminar

20130920_193616

Empezamos con las pruebas, marconi modo cw en 24048 Ghz y IF al analizador, referencia externa.

20130920_193546 20130920_193555

Señal en IF con referencia esterna disciplinada y  ocxo, puede verse la la gran diferencia.

20130920_195529 20130920_195448

Señal de IF con FT817 emitiendo.

20130920_201608 20130920_195759

Comprobando audio, para ello usamos la salida IF de analizador que se introduce en un usb-sdr y con sharp en el PC se puede monitorizar el audio.

20130920_203030_5

 

Ahora ensamblando la parábola a ver si nos vemos en el analizador

20130920_210002

Vista general del ensamblaje.

20130920_210427 20130920_220826

 

Una vez comprobado todo ya podemos hacer el cableado de RF y DC bien.

DSC01070 Transvecter24Ghz

 

Nueva comprobación de emisión.

DSC01065

 

Y para finalizar, buscando la baliza de ED3 en Caldas que como era de esperar no se escucha desde mi casa,  la de 10 Ghz tampoco.

DSC01069

 

Ahora solo queda hacer un ocxo disciplinado. La frecuencia debería ser de 103,57894736842105263157894736842 Mhz pero eso es muy complejo de disciplinar y será de 103.58 Mhz que nos generara una IF desplazada en 240Khz.

Si no se me ocurre algo mejor esta es la solución que usare.

Continuara …

Written by qlfecv

22 de septiembre de 2013 at 18:55

Publicado en Arduino, Ham radio, Proyecto

Tagged with ,

PTS-620 Mod

leave a comment »

Aquí os presento la modificación que le he realizado al PTS-620 remoto de Programmed Test Source Inc. para poderlo manejar con mandos exteriores.

Este sintetizador es capaz de generar frecuencias desde 1.000.000,0 MHz hasta  619.999.999,9 MHz con una salida desde – 5dbM hasta 20 dBm pero he limitado a unos 16 dBm.

El corazón de la modificación es un arduino mega, el uno no tiene pins suficientes.

pts arduino esquema

 

También le he puesto un interruptor para encender y apagar.

pts620 mod1pts620 mod2 pts620 mod3

 

 

El frontal queda de esta manera:

pts620 mod4

 

Y aquí una verificación del nivel de señal de salida.

pts620 ajuste

Written by qlfecv

17 de marzo de 2013 at 13:40

Publicado en Arduino, Proyecto

Tagged with , ,