V.O. 08/06/2020
rev 02/12//2022

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



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 :

images/t_Arduinino_pro_mini_schema.gif
Pin Out schema


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
à 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 !



paulfjujo@free.fr