Mostrando entradas con la etiqueta generador. Mostrar todas las entradas
Mostrando entradas con la etiqueta generador. Mostrar todas las entradas

viernes, 31 de enero de 2025

GAMBAS Generador de bases de datos SQLite. Creador de programa en Gambas para su manipulación.

  Página principal

GAMBAS
Generador de bases de datos SQLite
Creador de programa en Gambas para su manipulación

 Quería crear una base de datos en Gambas, y me di cuenta que era algo tedioso crear el archivo SQLite, para mas tarde crear el programa para manejar la base de datos.
Se me vino la idea de crear un programa generador de una base de datos y a la vez el programa gráfico en gambas para interactuar con la base de datos.
Me puse manos a la obra y cree el programa.
Arrancado el programa tiene este interface gráfico.

Aquí damos nombre a la base de datos, también a la tabla ( en este caso solo va existir una).
Damos nombre a cada campo,  junto con el tipo de dato y el tamaño.
Solo generará en la base de datos el campo que tenga un tipo definido.

 

Se utiliza una especie de plantillas generales para el interface gráfico, y otra para el programa, junto con varios archivos para la configuración del programa.


Estos son los ficheros generados junto con la base de datos.
Automáticamente se crean 10 registros a modo de ejemplo.

Si cargamos el programa en gambas y lo ejecutamos veremos el interface gráfico para manejar los registros.
Aunque se crea todo el interface gráfico con todos los campos, solo se visualizará los que existan.


Podemos cambiar la posición de los elementos del interface gráfico a nuestro gusto.
Si creamos un ejecutable, no hace falta que abramos gambas.

Es un programa simple que genera bases de datos fáciles de manejar.
Como podéis ver, no genera informes, básico para cualquier base de datos, pero no era el objetivo de este programa.
Para el que quiera generar informes puede ver como lo hago en  LIBROS .
A nivel de programación las plantillas no son eficientes, no superarían un simple examen, por ejemplo:

  • En la visualización y edición , aún sabiendo que no existen otros campos, sigue ejecutando código inútil. Esto es fácil solucionarlo con un simple goto o Else, lo he dejado a propósito.
  • Los campos que no existen sigue estando en código fuente.
  • A nivel de interface gráfica, los campos están representados todos, pero se hacen invisibles los que no se utilizan.
A pesar de todo lo anterior merece la pena.
Ahora puedo generar bases de datos en un par de minutos, simple y sencillo.
Espero hacer unas versiones bastante mejores en todos los sentidos.


PROGRAMA

VIDEO


Saludos.
Juan Galaz



Bibliografía:

Gambas -Base de datos de libros con SQLite. LIBROS
Pequeño programa hecho en gambas y SQLite para manejar una biblioteca de películas. gam1
wxwidgets- Base de datos de libros-SQLite-Lector codigo de barras-MX009-2MA7C. wxlibrosS
Base de datos autores - SQLite y wxwidgets -Linux y windows. wxLibros
Lenguaje C - Base de datos autores - Compilar SQLite bajo windows. DBAUTORW
Lenguaje C - Base de datos autores - SQLite. DBAUTOR
Gambas -Base de datos de libros con SQLite. LIBROS


jueves, 24 de octubre de 2024

DCF77 - Generador de señal - Signal generator - Versión 2 - DS1302

  Página principal

DCF77
Generador de señal
Signal generator
Versión 2  - DS1302

Después de haber realizado el Generador de DCF77 con el arduino, me dí cuenta que algunos relojes no sincronizaba bien.
También me resultaba engorroso tener que
actualizar la hora mediante un ordenador, antes de emitir la señal DCF .
He visto que se podía mejorar el código del arduino y el circuito mediante:
-Mejorando el tiempo de interrupción de 0.1 Segundo. Me dí cuenta que ciertos relojes exigen alta precisión, de esta forma la mayoría de los relojes se sincronizan.
-Cambiando la resistencia de la señal DCF a 4K7.
-Eliminando la parte del modo del audio.
-Se coloca una variable en compilación #define SINCRO . Según el manual DCF, la señal de DCF debe sincronizarse con el flanco de bajada de la portadora. Funciona igual con sincronización que sin ella, por lo que lo dejo a gusto de cada uno.
-La resistencia R1 es de 100 ohmios, para que module al 20%, pero también funciona si se modula al 0%, para este caso debemos colocar la resistencia a 0 ohmios.
-He colocado un pulsador para las pruebas. Si durante el arranque se tiene pulsado, carga una fecha prefijada y no la carga del DS1302.  Fecha prefijada:  7:52:50   9/10/2024 .


Esquema realizado con https://easyeda.com.

Circuito montado.


Señales generadas.


La sincronización tarda entre 2 y 5 minutos. La distancia entre el circuito emisor y los radio relojes es de 80 cm.

También he creado un programa en Linux bajo consola para poner la fecha y la hora automáticamente.
./dcfSerie /dev/ttyUSB0

El programa en arduino admite una serie de ordenes:
HORA=

SEGUNDO=
MINUTO=
DIAMES=
DIASEMANA=  (Algunos relojes comprueban que sea correcto)
MES=
ANO=
PRINT
START
STOP
SAVE
LOAD

Durante el arranque del circuito, espera 15 antes de empezar a emitir señal.
En el tiempo de espera de 15 segundos, si se ejecuta el programa en consola, se actualiza la hora y la fecha en el DS1302.



Programa Arduino
Programa Linux

Espero que os haya gustado este pequeño circuito.


Saludos.
Juan Galaz



Bibliografía:


PTB-Mitteilungen_2009_Heft_3_en

http://www.brettoliver.org.uk/DCF77_Analyzer_Clock_Mk2/Arduino_DCF77_Analyzer_MK2.htm
https://ednieuw.home.xs4all.nl/Woordklok/DCF77/DCF77_Arduino.html
https://es.wikipedia.org/wiki/DCF77
https://j-rpm.com/2019/05/transmisor-experimental-dcf77/
http://www.redesmadrid.com/?page_id=4
Radio watch sync   en Google Play

domingo, 13 de octubre de 2024

DCF77 Generador de señal - Signal generator - ESP-12E ESP8266

  Página principal

DCF77
Generador de señal
Signal generator
ESP-12E   ESP8266

Después de haber realizado el Generador de DCF77 con el ESP32, he realizado el mismo circuito pero con el ESP8266, placa ESP-12E.
El ESP8266 es el hermano pequeño del ESP32, no tiene bluetooth ni doble procesador, pero para este montaje no hace falta.
Voy a utilizar el programa de 
https://github.com/SensorsIot/DCF77-Transmitter-for-ESP32  , pero con alguna modificación para que funcione con el ESP8266.

Para generar la señal de 77.5 KHz he utilizado:
analogWriteFreq(FRECUENCIA);
analogWrite(OUT_DCF, 128);
No es que sea muy fiable, he tenido que configurar al variable #define FRECUENCIA 76190  para que genere 77.5 KHz.
En ESP8266 no existe ledcAttach(ANTENNAPIN, FRECUENCIA, RESOLUCION);

Montado todo funcionaba bien, solo debía configurar mi red wifi cambiando los valores en:
// Wifi credentials
const char* ssid = "yourSSID";
const char* password = "yourPassword";

Respecto al anterior circuito he quitado el display OLED.

Esquema realizado con https://easyeda.com.


El que haya realizado montajes con estos módulos, se habrá vuelto loco con los pins.
Esta es la relación de los diferentes pins.










Antes

Después

Con la prueba que he realizado  me funcionan todos lo relojes radio-controlados.

PROGRAMA

VIDEO

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


Para los que quieran colocar un OLED el diagrama es el siguiente.

PROGRAMA
He de comentar que me dio bastantes problemas, las rutinas del display  deben interferir los tiempos de la interrupción, me costó tiempo averiguarlo.
Por lo cual solo se utiliza al principio para ver la IP y el día, en cualquier otra parte del programa induce a error en los tiempos, y los relojes no se sincronizan.
Si leemos en el manual "
El ESP8266 no tiene pines I2C de hardware, pero se puede hacer mediante "bitbanging". Funciona bastante bien y el ESP8266 es lo suficientemente rápido como para igualar la velocidad del 'nivel Arduino'. ".
Este es el motivo de que no se pueda utilizar el BUS I2C en el ESP8266 en este montaje.


Espero que os haya gustado este pequeño circuito.


Saludos.
Juan Galaz



Bibliografía:


https://github.com/SensorsIot/DCF77-Transmitter-for-ESP32
PTB-Mitteilungen_2009_Heft_3_en

http://www.brettoliver.org.uk/DCF77_Analyzer_Clock_Mk2/Arduino_DCF77_Analyzer_MK2.htm
https://ednieuw.home.xs4all.nl/Woordklok/DCF77/DCF77_Arduino.html
https://es.wikipedia.org/wiki/DCF77
https://j-rpm.com/2019/05/transmisor-experimental-dcf77/
http://www.redesmadrid.com/?page_id=4
Radio watch sync   en Google Play

jueves, 10 de octubre de 2024

DCF77 -Generador de señal - Signal generator - LOLIN32 LITE - SSD1306 con I2C

  Página principal

DCF77
Generador de señal
Signal generator
LOLIN32 LITE  y SSD1306 con I2C

Después de haber realizado el Generador de DCF77 con el arduino, busque en internet algún montaje similar con el ESP32.
Encontré la página https://github.com/SensorsIot/DCF77-Transmitter-for-ESP32.
Intente montar el circuito y compilarlo con la última versión del compilador ESP32, me salio un error en la línea:
    ledcSetup(0, 77500, 8); // DCF77 frequency
Está instrucción ya no existía en la actual versión, por lo que mirando por aquí y por allí encontré la solución.
 ledcAttach(ANTENNAPIN, FRECUENCIA, RESOLUCION);

 delay(1);
 ledcWrite(ANTENNAPIN, 128); //configuramos el Duty Cycle al 50% del led LEDPWM1

Ahora compilaba bien, pero aún tenía un trabajo que hacer, adaptar el programa al I2C, mi SSD1303 funciona con I2C.
El problema que encontré fue que la placa LOLIN32 LITE no tenía los pin de I2C normales de la familia ESP32 , había que buscar otros.
Al final encontré la solución, modificar en la configurar Wire.begin() de la siguiente forma:
 Wire.begin(23, 19);  //Para esp32 lolin32 mini --Wire.begin(sda_pin, scl_pin)
Ahora el pin SDA es el 23, y SCL el 19.

Montado todo funcionaba bien, solo debía configurar mi red wifi cambiando los valores en:
// Wifi credentials
const char* ssid = "yourSSID";
const char* password = "yourPassword";

He simplificado el código y he añadido una opción  para que funcione con interrupciones o mediante esp_timer_get_time(); .
Esto lo hace comentando o descomentado :  #define MODO_INTERRUPCION

Para que tenga un poco de potencia la señal de 77,5 KHz he añadido
un transistor que tiene en su colector un conjunto LC que está calculado para 77,5 KHz.

El LOLIN32 lite tiene un conector para alimentar el circuito con una batería 16850.

La señal obtenida es:



Con la prueba que he realizado  me funcionan todos lo relojes radio-controlados.
Tuve algún problema un día que no sincronizaba ningún reloj, era el día del huracán. No sé el motivo.....


PROGRAMA

VIDEO

Espero que os haya gustado este pequeño circuito.


Saludos.
Juan Galaz



Bibliografía:


https://github.com/SensorsIot/DCF77-Transmitter-for-ESP32
PTB-Mitteilungen_2009_Heft_3_en

http://www.brettoliver.org.uk/DCF77_Analyzer_Clock_Mk2/Arduino_DCF77_Analyzer_MK2.htm
https://ednieuw.home.xs4all.nl/Woordklok/DCF77/DCF77_Arduino.html
https://es.wikipedia.org/wiki/DCF77
https://j-rpm.com/2019/05/transmisor-experimental-dcf77/
http://www.redesmadrid.com/?page_id=4
Radio watch sync   en Google Play

domingo, 6 de octubre de 2024

DCF77- Generador de señal - Signal generator

Página principal
DCF77
Generador de señal

Signal generator

Muchos de los relojes que se compran ahora, tienen el ajuste automático de hora.
Utilizan la señal que proporciona una emisora en Alemania en la frecuencia de 77,5 KHz, esta señal se llama DCF77  .
De acuerdo con la serie de indicativos de llamada asignada, D significa Deutschland.
La letra C fue seleccionada para identificar transmisores de onda larga.
Como tercera letra, se determinó la letra F para los transmisores de onda larga en las instalaciones de la estación transmisora ​​ Mainflingen (debido a su proximidad a Frankfurt).
Para distinguir los distintos transmisores de esta estación, a las tres letras DCF se han añadido dos cifras, en el caso del DCF77.
Los datos se mandan cada segundo, codificando como la supresión de la señal hasta un 20% durante 100mS para el 0, y de 200mS para el 1.
También se utiliza el cambio de fase, pero en este artículo no se verá.







En este montaje vamos a utilizar un arduino para generar todas las señales.
Con el temporizador del arduino se puede generar una frecuencia bastante cercana a 77,5KHz.
    (8000000/77,50)-1=102 --->77,76khz
Deberíamos tener un reloj interno y utilizar un DS1302, pero como no es el objeto de este montaje, utilizaremos un programa de ordenador para actualizar el reloj en el arduino.




Por el pin 3 generaremos la señal de 77,5 KHz, y se modulará mediante el pin 2.
La señal excitará a un transistor que tiene en su colector un conjunto LC que está calculado para 77,5 KHz.











Estas ondas son las resultantes en el pin 2 o  pin 13.


Mirando por internet, encontré Radio watch sync   en Google Play. 
El problema de esta aplicación es que te deja usarla unas cuantas veces, luego tienes que comprar la aplicación.
Esta aplicación producía un audio en el altavoz del teléfono móvil , era una señal senoidal al límite de la señal audible,   15,5 KHz.
Esta señal se modulaba con la codificación de DCF77.

Parece increíble, pero con el altavoz a unos centímetros del reloj, hacía que el reloj se sincronizase con la señal DCF77.

Monté un circuito sencillo con el arduino, que generaba 15,5 KHz, alimentando 4 transistores complementarios ,a modo de amplificador de audio.
La señal no se modulaba en amplitud, solo se activaba o se desactivaba.






El programa del arduino es el mismo para RF que para audio.
Lo único que debemos hacer es comentar (RF) o descomentar (AUDIO) ,dependiendo para que lo usemos.

PROGRAMA

Como podemos observar en el video siguiente, de 4 relojes, se sincronizaba 3, el único que no se sincronizaba era el de la marca Oregon Scientific.
Unos relojes tardan más que otros, dependiendo de cuantas veces comprueba si los datos son iguales.
Esa es una espina que tengo clavada, no tengo ni ideal el motivo, pero me he tirado mucho tiempo con este circuito.

VIDEO

El programa en arduino admite una serie de ordenes:

HORA=

SEGUNDO=
MINUTO=
DIAMES=
DIASEMANA=  (Algunos relojes comprueban que sea correcto)
MES=
ANO=
PRINT
START
STOP

PROGRAMA GAMBAS
Este programa está realizado en Gambas(VB para Linux)

Próximamente realizaré un programa que funcione en Linux y Windows.

Espero que os haya gustado este pequeño circuito.


Saludos.
Juan Galaz



Bibliografía:


PTB-Mitteilungen_2009_Heft_3_en


http://www.brettoliver.org.uk/DCF77_Analyzer_Clock_Mk2/Arduino_DCF77_Analyzer_MK2.htm

https://ednieuw.home.xs4all.nl/Woordklok/DCF77/DCF77_Arduino.html

https://es.wikipedia.org/wiki/DCF77

https://j-rpm.com/2019/05/transmisor-experimental-dcf77/

http://www.redesmadrid.com/?page_id=4

Radio watch sync   en Google Play

sábado, 10 de octubre de 2020

ARDUINO LTC5904 - MAX7219 - Generador de frecuencia - 1KHz a 68MHz - Frecuencímetro 1 Hz a 8 MHz

ARDUINO
LTC5904 -
MAX7219
Generador de frecuencia -
1KHz a 68MHz
Medidor de frecuencia - 1 Hz a 8 MHz
Frecuencímetro


En el anterior artículo habíamos realizado el generador de frecuencia con el CHIP LTC6904.
Posteriormente había creado 2 diferentes montajes para manejar el generador de frecuencia mediante botones.
Para medir la exactitud de generador me ví en la necesidad de utilizar un frecuencímetro.
La siguiente idea fue juntar los 2 montajes, generador de frecuencia y frecuencímetro.

Como se puede observar he utilizado la posibilidad de poner en las salidas y entradas del arduino una resistencia interna de 50K a Vcc (PULLUP).
Para el manejo de los botones funciona sin problemas, pero para el manejo del bus I2C vendría mejor colocar además una resistencia de 1K a Vcc.
Para este caso funciona, pero su valor para 5V es de 50K, igual demasiado alto.
El MAX7219 induce mucho ruido en la alimentación, por lo cual deberíamos colocar un condensador de 470uF lo mas cerca de el.
Existen 3 modelos de MAX7219, tienen diferente color, y sus conexiones cambian de uno a otro.
En el LTC6904 debemos de colocar un condensador de algunos nanofaradios para atenuar el ruido en la señal de alimentación.

Comprobando el frecuencímetro con otro mio. Un error de 3 Hz cada 100000 Hz.

Llegados a este momento probamos el generador de frecuencia.
Comprobamos que la frecuencia obtenida en la frecuencia mas baja, es diferente entre dos
LTC5904.

Está claro que estos chip deberían estar ajustados de fabrica para corregir este error.
Igual en la soldadura me he pasado y los he calentado mucho modificando su ajuste, o son defectuosos.
También debería ser posible ajustarlos mediante programa, pero no he encontrado la forma.

De la medidas reales concluimos que la relación entre el valor de ADC y la frecuencia no es lineal.
Para corregir o atenuar este error, podemos cambiar las constantes 2048 y 2078 en la formula de DAC.
En mi caso los he cambiado a 2038 y 2078 respectivamente, consiguiendo un menor error en el cálculo.

Para pasar del modo FRECUENCÍMETRO al GENERADOR FRECUENCIA pulsamos un botón, cambiará el LED testigo.
En el modo
GENERADOR FRECUENCIA, con un botón seleccionaremos el display, y con el otro botón cambiaremos el dígito.
Después de 2 segundos de no tocar ningún botón se generara la frecuencia marcada en el display.

Aunque no tengamos un generador de lo más exacto, tenemos también en el mismo montaje un frecuencímetro para corregir el error.

PROGRAMA



Bibliografía:

Generador de frecuencia con el CHIP LTC6904.
https://digibird1.wordpress.com/arduino-controlled-frequency-generator-1khz-68-mhz/
http://www.kerrywong.com/2012/04/11/interfacing-ltc6904-with-arduino/
https://www.polaxis.be/2011/11/sp0256-al2-pitch-control/

https://github.com/rjbatista/tm1638-library
https://www.arduinolibraries.info/libraries/led-control

Saludos.
Juan Galaz




 

sábado, 3 de octubre de 2020

ARDUINO - LTC5904 - Generador de frecuencia 1KHz a 68MHz - Display

ARDUINO
LTC5904 - LTC5903
Generador de frecuencia
1KHz a 68MHz
Display


En el anterior artículo habíamos realizado el generador de frecuencia con el CHIP LTC6904.
En este montaje vamos a poder controlar el chip mediante botones y visualizar la frecuencia con un display de 8 dígitos.
He creado dos modelos utilizando dos tipos de módulos.
Con el TM1638, que dispone de un monton de botones y led, además de un display de 8 dígitos.
El segundo montaje lo he realizado con el MAX7219 , otro módulo de 8 dígitos.



En este montaje utilizamos los 8 botones, que utilizaremos para cambiar los diferentes dígitos.
Mientras estamos modificando la frecuencia, parpadeará un LED.
Después de 2 segundos de no tocar ningún botón se generara la frecuencia marcada en el display.
PROGRAMA




En este montaje utilizamos el módulo de 8 display MAX7219.
Con un botón seleccionaremos el display, y con el otro botón cambiaremos el dígito.
Mientras estamos modifican los dígitos, parpadeará el punto decimal sobre el segmento seleccionado.
Después de 2 segundos de no tocar ningún botón se generara la frecuencia marcada en el display.
PROGRAMA


Llegados a este punto debemos estudiar la exactitud del MAX7219.
Lo primero es explicar su funcionamiento.
Un oscilador programable (ADC) de 1024 pasos, nos genera frecuencia entre 34.05MHz y 68.03MHz.
Por lo cual el oscilador va en pasos de 33184 Hz.
Un segundo divisor programable (OCT) en múltiplos de 2, (1,2,4,8.....16384,32768) (Valor de OCT 15,14,13,12.....1,0) nos proporciona la frecuencia de salida.
Ejemplo:
    ADC=443   ->48.750512 MHz
    OCT=4   (/2048)   ->23803 Hz

La teoría está muy bien, pero dependemos de la precisión de oscilador (VCO), y no es del todo precisa, ya nos pasaba con el DS1077 .
Haciendo medidas hemos descubierto que la frecuencia real del oscilador va desde 67.993.000 Hz a los 33.991.000 Hz.
Esta dentro de los márgenes que indica el CHIP, pero hay que tenerlo muy en cuenta.


Tabla con las diferentes frecuencia generada con los diferentes valores de DAC y OCT.
Podemos ver la frecuencia marcada y la frecuencia real generada.


Es un montaje sencillo y fácil para tener vuestro propio generador de frecuencia.



Bibliografía:

Generador de frecuencia con el CHIP LTC6904.
https://digibird1.wordpress.com/arduino-controlled-frequency-generator-1khz-68-mhz/
http://www.kerrywong.com/2012/04/11/interfacing-ltc6904-with-arduino/
https://www.polaxis.be/2011/11/sp0256-al2-pitch-control/

https://github.com/rjbatista/tm1638-library
https://www.arduinolibraries.info/libraries/led-control

Saludos.
Juan Galaz




miércoles, 30 de septiembre de 2020

ARDUINO LTC6904 - LTC6903 Generador de frecuencia 1KHz a 68MHz

  Página principal

ARDUINO
LTC6904
- LTC6903
Generador de frecuencia
1KHz a 68MHz


Hace un año realicé un generador de frecuencia con el CHIP DS1077. Junto con este Chip había pedido el LTC6904 / LTC6903, otro generador de frecuencia.
El LTC6904 es Programmable Oscillator 1kHz to 68MHz .
El problema de este chip es el encapsulado, 8-Lead Plastic MSOP, es diminuto, de los chip más difíciles que he soldado.
Después de mucho trabajo, he realizado un adaptador a DIP-8 normal.
El segundo problema es descubrir el modelo, I2C o  SPI, en mi caso es LTAES , que corresponde al bus I2C. LTC6904.







En teoría admite direcciones I2C ,   22 o 23 seleccionado por el pin ADR.
En mi caso solo funciona con el pin ADR a Vcc y con la dirección 22, o está estropeado el chip, o tengo un error en algún sitio.
Para controlar la placa he creado dos programas, en GAMBAS (VB para Linux) y con la librería Wxwidgets, que funciona en Linux y Windows. Además he creado un portable Linux que funciona bajo cualquier distribución Linux (32bits o 64bits) .


Realizado en GAMBAS (VB para Linux)


Librería Wxwidgets -Linux


Librería Wxwidgets - Windows 10

El programa del arduino reconoce la orden FREQ frecuencia , transmitida por el PC a través del puerto serie.
Existe dos rutina, la creada por mi que no utiliza coma flotante, y otra que utiliza coma flotante, de donde he sacado la mía.
El resultado es bastante bueno, y tenemos un oscilador programable mucho mejor que se utilizamos el DS1077.
Como he dicho anteriormente, lo más difícil de este montaje es soldar el chip.


PROGRAMA


Bibliografía:

https://digibird1.wordpress.com/arduino-controlled-frequency-generator-1khz-68-mhz/
http://www.kerrywong.com/2012/04/11/interfacing-ltc6904-with-arduino/
https://www.polaxis.be/2011/11/sp0256-al2-pitch-control/

Saludos.
Juan Galaz