V.O. 08/06/2020
rev 21/02/2025

j'avais ce module dans mes tiroirs , depuis 3 ans ! car je suis plutot orienté PIC !
je me suis quand meme décidé à le tester , bien que la phylosophie ARDUINO = tout Pré-mâché , ne m'emballe pas du tout.
comme quoi, le proverbe "fontaine, je ne boirai pas de ton eau" s'applique ici.

ARDUINO :
Hardware : Module Arduino mini
Cordon Prolific de liaison
Pinout et schema
---------------------------------------

Software #1 : Le Classique Test clignotement Led
Software #2 : Test sur module 4 matrices 8x8 H avec MAX7219
............Modification source original
............
Video
............
Version PIC 18F26K22 (Microchip)
Software #3 : Detection de code DTMF
Software #4 Test moteur NEMA
............
1) commande simple moteur PAP NEMA23 avec TB6550
...........
.2) version avec librairie AccelStepper + video
Software #5 Test Module INA226
............
1) Mesure U et I coté High End shunt interne 0.1 ohms Max=0.819Amps
...........
.2)..à suivre ..Mesure U et I shunt Externe 0.01 ohms Max=15Amps + Alarme



HARDWARE

Module Arduino Pro Mini ATMega328 5V 16MHz , "the Simple"

images/Arduinino_mini_Liaisons.jpg images/t_Arduino_Pro_mini_Pinout_CH340G.gif



Cordon Prolific

apparait comme port virtuel COM23 ou COM25 (sur mon PC)


Pinout et schema :

ATTENTION connectique differente suivant les modeles ...

images/t_Arduinino_pro_mini_schema.gif
Pin Out schema

mon modèle :



SOFTWARE #1 :

mon tout 1er test : led clignotante

images/t_Arduinino_pro_mini_1er_sketch_running.gif

Affichage resultat sur Terminal via le COM virtuel USB (9600bds)

(14:28:11.438) Arduino pro mini Simple 16MHz 5V
(14:28:11.479) 1er Test 04 juin 2020
(14:28:11.518) Debut=0
(14:28:16.435) Valeur de a :18205
(14:28:16.459) Compteur =0
(14:28:16.499) Led High
(14:28:17.436) Led Low
(14:28:18.430) .
(14:28:18.474) Compteur =1
(14:28:18.474) Led High
(14:28:19.429) Led Low
(14:28:20.429) .
(14:28:20.459) Compteur =2
(14:28:20.459) Led High
(14:28:21.429) Led Low

Software:
sketch_2020_jun_04a.ino
Résultat de compilation :
ArduinoSimple_compilation_1er_Skecht_cligote_Led.log

nota :
LED_BUILTIN = Led implantée sur le module , connectée à pin 13




SOFTWARE #2 :
Dot Matrix 8x8 avec MAX7219

Prototype Hardware:

images/t_Arduino_ATMega328_mini_pro_Simple_Defil_4_Matrice_8x8H_2020_0606.gif


Le montage est entierment alimenté via le cordon USB Prolific Rose 6pins
à noter que le reglage de luminosité est au minima !
L'arduino mini Pro ne necessite pas de programmateur externe .
La liaison USB sert aussi de terminal liaison COM virtuelle
nota : la chose noire sur les fils = pince de maintien des fils !

SOFTWARE :
issu de la version originale :

* Dot matrix control Scrolling
* Tutorial: https://www.electronoobs.com/eng_arduino_tut56.php
* Schematic: https://www.electronoobs.com/eng_arduino_tut56_sch1.php
* LedControl library: https://www.electronoobs.com/eng_arduino_ledcontrol.php

* 1er test avec version originale : -> BAD => modif ordre inverse des digits => OK
* REVISION : 07-06-2020
* usage de bloc de 4 matrices _x8 H avec connecteur d'entrée à GAUCHE !
* modif pour sens de deplacement
* modif pour Font 8x8 thin
* avec caractere special °C (code 39 elide => code 134 degré)
* Font: THIN_SS_2019.pf
* 2em test Arduino Pro mini 5V 16Mhz "The Simple"
* MODULE Arduino Por Min SIMPLE ->OK


Modifs:
// rev 19/03/2020
// Font: THIN_SS_2019.pf
// rev PF 10-12-2019 caract degré C en 134 (0x86)
const unsigned char font_8x8_H [] PROGMEM = // Font: My_8X8_FONT.pf
{
/* 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Char 000 (.)
0x7E, 0x81, 0xA5, 0x81, 0xBD, 0x99, 0x81, 0x7E, // Char 001 (.)
.... etc
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // Char 255 (.)
};


Symbole ° au lieu de élidé

// Scroll Message
void scrollMessage(const unsigned char * messageString) {
int counter = 0;
int myChar=0;
do {
// read back a char
myChar = pgm_read_byte_near(messageString + counter);
if (myChar != 0){
if (myChar==39) myChar=134;
loadBufferLong(myChar);
}
counter++;
}
while (myChar != 0);
}

// Load character into scroll buffer
void loadBufferLong(int ascii){
if ((ascii >= 0x20 && ascii <=0x7f) || (ascii==134))
{ for (int a=0;a
<8;a++){
..etc ..

Inversion sens digits
// Display Buffer on LED matrix
void printBufferLong(){
for (int a=0;a<
8;a++) // Loop 8 times for a 8x8 font
{
unsigned long x = bufferLong [a*2+1]; // Get high buffer entry
byte y = x; // Mask off first character
lc.setRow(0,a,y); // Send row to relevent MAX7219 chip
x = bufferLong [a*2]; // Get low buffer entry
y = (x>>24); // Mask off second character
lc.setRow(
1,a,y); // Send row to relevent MAX7219 chip
y = (x>>16); // Mask off third character
lc.setRow(
2,a,y); // Send row to relevent MAX7219 chip
y = (x>>8); // Mask off forth character
lc.setRow(
3,a,y); // Send row to relevent MAX7219 chip

}
}


MAJ source :
Dot_matrix_MAX7219_scrol_2020_0607.ino
Fonte :
THIN_SS_2020.h

Video :
Arduino_mini_Pro_Simple_Defil_4_Matrices_8x8H_2020_0606.webm

Ma conclusion :
librairies Arduino Efficaces, mais trop simple !
quelle plus-value de formation apportent-elles ?
Open discussion ..



Version PIC18F !:
Base_18F26K22_test_defilement_1_bloc_de_4_Matrice8x8_H_2020_06_08.c





SOFTWARE #3 :

Decodage signal Touche DTMF

voir aussi coté
PIC18F Generateur de codes DTMF (versions: MikroC et MPALBXC8)
L'amplitude de sortie de ce générateur (0,5V cr cr ) nécessiterait une amplification de 5 à 10x ,
à cause du filtrage passe bas (4,7K + 47nF) qui elimine les harmoniques du PWM ,
et reduit fortement l'amplitude initiale.( 0 à 5V !) . Il ne peut donc pas etre utilisée directement.
De ce fait, usage de l'application web :
VENEA.NET générateur DTMF
Sortie signal de la carte >SON du PC , direct sur entree analogique Arduino Simple. : niveau > 3V cr Cr.

Hardware :
uniquement 1 entree Analogique .
le module est alimenté via la liaison USB via cordon Prolific 6 pins
Qui set à la programmation et aussi comme terminal :
liaison port viruel COM 36 pour terminal PC YAT
Le terminal affiche le code DTMF reconnu ..
Le
signal DTMF doit avoir une duree de 500mS et doit etre au standard DTMF

rappel :
uint16_t Frow_value[4]={ 697, 770, 852, 941}; // Hz
uint16_t Fcol_value[4]={ 1209,1336,1477,1633}; //Hz
// 1 2 3 A .....697
// 4 5 6 B .....770
// 7 8 9 C ....1477
// * 0 # D.... 1633


Attention : le Terminal PC YAT doit etre désactivé pour pouvoir faire un upload du programme dans l'Arduino.

Software :
Je n'ai pas ré-inventé la roue : usage de la
librairie Goertzel..
voir les details sur le Gitub de la librairie.
Nota :
attention à Detect.h ... ne pas melanger avec l'appli utilisant Goertzel.c ou h
Apres quelques modifs mineures,le programme est opérationnel ..
Il faut quand meme un niveau de signal elevé sur l'entree Ana : > 3,0V cr cr
----------------------------------------------------------------------------
* Il me semble qu'il y a une incoherence ici :

//const float threshold = 2000; //minimum tone amplitude to be considered we can change it for more senstivity
// ???? avec ADC 10 bits -> maxi=1023 !!!
modifié : par
const float threshold = 300; // nettement reduit, en fonction des valeurs lues dans le test préalable de l'ADC

modif aussi du Nb de sample -> 100 -> passé à 200 , pour ameliorer la fiabilité de détection .

un éclairage externe la dessus serait le bienvenu ..
----------------------------------------------------------------------------
Le logiciel Venea.Net permet d'envoyer automatiquement une séquence DTMF des touches : 123456789*0#ABCD
de duree 500mS avec un interval de 1 sec
...ou séparément via le clavier 4x4 DTMF .


images/t_Aduino_decodeur_DTMF_OK_2022-1128.gif

affichage sur PC , seulement si detection OK pour les 2 frequences !
F1 et F2 Frequences detectée et touche correspondante
exemple si le programme est OK , et avec la seqence envoyée par Vena.Net :
123456789*0#ABCD

1209.00<LF>697.00<LF> Touch=1<LF>.
1336.00<LF>697.00<LF> Touch=2<LF>.
1477.00<LF>697.00<LF> Touch=3<LF>.
1209.00<LF>770.00<LF> Touch=4<LF>.
1336.00<LF>770.00<LF> Touch=5<LF>.
1477.00<LF>770.00<LF> Touch=6<LF>.
1209.00<LF>852.00<LF> Touch=7<LF>.
1336.00<LF>852.00<LF> Touch=8<LF>.
1477.00<LF>852.00<LF> Touch=9<LF>.
1209.00<LF>941.00<LF> Touch=*<LF>.
1336.00<LF>941.00<LF> Touch=0<LF>.
1477.00<LF>941.00<LF> Touch=#<LF>.
1633.00<LF>697.00<LF> Touch=A<LF>.
1633.00<LF>770.00<LF> Touch=B<LF>.
1633.00<LF>852.00<LF> Touch=C<LF>.
1633.00<LF>941.00<LF> Touch=D<LF>.

Si on ne detecte pas ..on ne voit rien .. d'ou le minimum d' affichage entête du programme
sur le terminal et aussi le clignotement led au démarrage. (led sur le module Arduino !)
Un test préalable sur l'ADC est réalisé ! edition de mini,moyenne,max valeur lue.
la connection d'un module HT9170B en parrallele sur l'entree analogique , permet de voir
sur ses 4 leds de sortie, le code DTMF présenté ..
c'est le "multimetre software" et juge de paix!
Nota :
ce programme utilise toutes les ressources MCU lorsqu'il est en attente de decodage
avec 2 boucles while infinies ..une pour chaque Frequence du code DTMF.

Software :
arduino_code_dtmf_decoder_2022.zip
arduino_code_dtmf_decoder_2022.ino


une suite ?
Transposition sur PIC18F XC8 ? ..utilité lorsqu'on a sous la main un décoder Hardware HT9170B ?
pas la peine de se triturer les neurones !





SOFT #4
Test d'un moteur PAP NEMA23 avec driver TB6550
01/09/2024

Schema et Hardware:

images/t_Schema_Test_TB6600_NEMA23_2024-09.gif images/t_TB6550_driver_photo_sans_radiateur.gif images/t_TB6550_driver_photo_Back_side.gif images/t_Arduino_Pro_Mini_connections.gif

Schema

TB6650 sans radiateur !

face arriere

coté Arduino


Prototype de test

images/t_Proto_Test_TB6600_NEMA23_2024-09.gif images/t_Proto_Test_TB6600_NEMA23_2024-09b.gif
test avec Alim 12V  


SOFTWARES


1) Version simple RedOHM ( revu paulfjujo)
Ne marchait pas ..car En_Pin reverse status !
modifié -> OK
Arduino_Pro_Mini_TB6600_V2_24.zip

(15:37:37.270) Version 01/09/2024 Arduino Pro mini, by RedOhm , rev paulfjujo
(15:37:37.317) Test à © OK avec valeur de 110 à   10000
(15:37:37.333)
(15:37:37.333) set ENPin High
(15:37:37.349) Saisir une nouvelle commande
(15:37:37.364)
(15:37:42.442) A100
(15:37:42.567) La chaine saisie est : A100
............... Blocage , moteur vibre sans tourner
(15:37:42.567) Demande de marche avant & valeur de vitesse => 100

(15:37:42.567) Saisir une nouvelle commande :
(15:37:51.929) A110
(15:37:52.070) La chaine saisie est : A110..........
.. tourne rapidement
(15:37:52.070) Demande de marche avant & valeur de vitesse => 110

(15:37:52.070) Saisir une nouvelle commande :
(15:37:59.745) A5000
(15:37:59.886) La chaine saisie est : A5000.
.. 1 tour en ~8sec
(15:37:59.886) Demande de marche avant & valeur de vitesse => 5000

(15:37:59.886) Saisir une nouvelle commande :
(15:38:08.181) A120
(15:38:08.306) La chaine saisie est : A120
(15:38:08.306) Demande de marche avant & valeur de vitesse => 120

(15:38:08.306) Saisir une nouvelle commande :
(15:38:22.135) A10000
(15:38:22.260) La chaine saisie est : A10000.
.. 1 tour en ~16sec
(15:38:22.260) Demande de marche avant & valeur de vitesse => 10000

(15:38:22.260) Saisir une nouvelle commande :
-------------------------------------------------------------------------------------------


2) Software utilisant la librairie AccelStepper
issus de l'exemple ..https://www.makerguides.com/

https://www.makerguides.com/wp-content/uploads/2019/02/AccelStepper-1.59.zip
recopie de l'exemple ...
ne MARCHE PAS !
...Because il faut que EnPin soit à 1 pour que le moteur tourne ..
Modifié en consequence et rajout d'un peu de dialogue : infos pour l'opérateur..sur terminal

Le moteur demarre lentement: Rampe sur 250 pulses
jusqu'à obtention de 8000 pulses,
marque une pause de 1sec
puis inverse la direction
pour tourne en sens inverse via Rame
décomptage du nombre d'impulsion jusqu'à zero .
..marque une pause de 1sec
etc ..en boucle

Arduino_Pro_Mini_Accelsetpper_Nema23.zip

Video :
Test_driver_TB6550_Nema23_12V_2024-0901.webm






SOFT #5

Test#1 Module Mesure de Courant INA226 (I2C) avec shunt 0,1 ohm
21/02/2025

../_INA226_Tests/images/INA226-board-1.jpg
le module INA 226 schema


Schema et Hardware:

../_INA226_Tests/images/t_Proto_Test_INA_226_2025-0221.gif ../_INA226_Tests/images/t_Schema_Montage_de_Test_INA226.gif ../_INA226_Tests/images/t_INA226_Diagram.gif
Prototype de test Schema Test INA226 Diagram connection HIGH or LOW End




Le module Arduino Pro Mini Simple est connecté au port USB /COM33
qui assume la programmation avec Arduino IDE 1.8.19
OU l'affichage sur terminal YAT 115200bds
Le module INA226 dialogue via un bus I2C @0x40
Le shunt integré au module fait R100 => 0,1 Ohm
La capacité de mesure maxi : 819.2mA
La mesure de courant se fait du coté HIGH END. (coté + alim)
La mesure VBUS est effectué sur la sortie shunt, d'où le strap entre les pins Vin- et Vbus sur l'INA226.
La sortie Alerte est connecté sur la pin 2 Arduino
Les Zero volts, Alim externe 12V, INA226 et Arduino doivent etre reliées !

Documentation:
https://wolles-elektronikkiste.de/en/ina226-current-and-power-sensor
INA226_User_Guide_Tutorial.pdf
Texas Instrument :
Monitoring Bus Voltage and Power Measurement INA226.pdf
INA226-Q1 AEC-Q100, 36V, 16-Bit, Ultra-Precise, I2C Output Current_sbos743b.pdf


SOFTWARE :
installation librairie Arduino : INA226-WE de wolfgang Ewald vers 1.2.12 .. install
Les differents registres du module INA226 :

Ordre de Configuration des registre de l' INA226

Step 1 Configuration Register 00 41 27    
Step 2 Shunt Register 01 1F 40 2.5µV 81.92mV
Step3 Bus Voltage Register 02 25 70 1.25mV  
Step4 Calibration Register 05 0A 00 2560  
Step 5 Current Register 04        
Step 6 Power Register 03        
Ordre d'adresse Ordre de configuration

Ordre de Configuration des registre de l' INA226 :
Shunt voltage / tension aux bornes du shunt , image du courant !
Bus Voltage : tension sur la charge ( entre sortie shunt et 0V )
La calibration sert à etablir la gamme de mesure en fonction du shunt untilisé (valeur en ohms )
Le MASK pezrmet de definir quelles seront les alarmes affectée à la sortie ALERT , ou d'autres flags d'etats
L'Alert limit etant le seuil de la mesure à surveiller (courant ou tension)

#define INA226_ADDRESS 0x40 // Default I2C address for INA226

6.2.5 Configuring the Alert Pin

The Alert pin from the INA226 allows the user to set limits that monitor the registers and
trigger a flag when they are exceeded. The register that is being monitored can be changed
by selecting the desired alert configuration as shown
in Figure 6-8. The value that is being considered is compared
to the Alert Limit box. This Alert Limit box modifies
its functionality based on the selected configuration.
It is important to note that by default, the INA226
Alert pin is set to active low.
La Pin de sortie ALE (alerte) de l'INA226
permet à l'utilisateur de définir des limites qui surveillent
les registres et déclencher un drapeau lorsqu'elles sont
dépassées.
Le registre surveillé peut être modifié en sélectionnant
la configuration d'alerte souhaitée, comme illustré
à la Figure 6-8.
La valeur que est pris en compte est comparé au registre
Limite d'alerte. Cette limite d'alerte modifie ses fonctionnalités en fonction de la configuration sélectionnée. Il est important de noter que, par défaut, la broche d'alerte INA226 est définie sur active low.



Bit 15 Mettre ce bit à 1, permet de configurer la pin ALErte à 1 , si le tension sur le shunt , apres conversion,
depasse la valeur programme dans le regsitre de limit Alarme Alert Limit Register.

AFF: Alert Function Flag (bit4)
Puisqu'une seule Fonction d'Alerte peut etre suivie/monitorée à la fois sur la Pin ALERTE ,
le flage Conversion Ready peut etre aussi utilisé pour valider la pin ALErte
lire le flag AFF Alerte Fonction est remis à zero, seulement lorsque le registe (06h) Mask/Enable est lu.
Quand le flag LEN (Lacth Enable)est mis à zero (sur mode Transparent) ,le flag AFF est mis à zero
apres la conversion suivante.


Le registre Alert Limit Register contient la valeur utilisée à comparer avec le registre selectionné comme source
dans le registre Mask.Enable( 06h) pour determiner si une limite a été franchie .
init limite
Wire.beginTransmission(INA226_ADDRESS);
Wire.write(
0x07);
Wire.write(0x4E); // Configuration MSB 20000 soit environ 500 mA
Wire.write(0x20); // Configuration LSB
Wire.endTransmission();


exemple execution alarme:
Programme :

point de départ utilisé.
et docu. Texas instruments
source Arduino: _INA226_Test_2025-0221.ino

La led sur le module Arduino signale le dépassement via la lecture du bit AFF.
Je n'ai pas reussi à faire fonctionner l'interrupt sur entree 4 recevant l'info ALErte du INA226,
mais ce n'est pas ma priorité !
J'ai doncverifié / testé la sortie ALE INA226 , en mettant une LED tirée au +Vcc via R=2,2K .. OK ..
la led est ON si depassement seuil ( ALE=0 si depassement !)
Le basculement LED sur ALE est quasi immediat, tandis que la led (sortie 13) sur Arduino n'est rafraichie qu'à chaque tour de cycle (ici 1sec)



sur terminal YAT :

clignote LED sur Arduino board
Test Buzzer sur pin 13

_INA226_Test_2025 rev 21/02

Configuration (00h)
Calibration (05h)
Conf Alarme Shunt Over Limit and No Lacth (06h)
Init Value 20000 pour Alarme limit (07h) si > 500mA

Shunt Voltage: (01H)
18410 Amps: 0.46 A
Bus Voltage (2h): 3384 Volts : 4.26 V
Current Register (04H) : 467 mA
Power Register: 79 POWER : 1.98 W
Read Alarm status ALARME : 0x8009 ,
Etat AFF : 0


Shunt Voltage: (01H)
22294 Amps: 0.56 A
Bus Voltage (2h): 5195 Volts : 6.55 V
Current Register (04H) : 566 mA
Power Register: 147 POWER : 3.68 W
Read Alarm status ALARME : 0x8019 ,
Etat AFF : 1
Alarm limit occured

Shunt Voltage: (01H)
18989 Amps: 0.47 A
Bus Voltage (2h): 3624 Volts : 4.57 V
Current Register (04H) : 480 mA
Power Register: 87 POWER : 2.18 W
Read Alarm status ALARME : 0x8009 ,
Etat AFF : 0

.... à suivre :
version 18F27K42 XC8
Version avec shunt 15A 150mV externe à l'INA226 ( et R100 supprimée)




Module Mesure de Courant 15Amps , avec INA226 (I2C) et shunt 0,01 ohm

 

 

 

 




paulfjujo@free.fr