Skip to content

Picatout/door-bell

Repository files navigation

sonette de porte réalisée avec un STM8L151K6

Ce projet utilise le convertisseur Numérique/Analogique du MCU STM8L151K6 pour jouer un fichier au format WAV enregistré dans une mémoire FLASH Windond W25Q80DV. L'application est entièrement écrite en smallForth et comprend les 4 fichiers suivants:

  1. exist.f
  2. w25q_prog.f
  3. play_wav.f
  4. door-bell.f

Schématique du circuit

schematic.png

Utilisation des périphériques du STM8L151K6

  1. Le DAC convertie les échantillons PCM du fichier WAV en signal de sortie analogique.
  2. La minuterie TIMER4 est programmée pour cadencer le transfert des échantillons PCM au DAC à la fréquence requise de 22050 Hertz.
  3. Le canal 3 du DMA transfert les échantillons du tampon RAM vers le DAC et génère une interruption à mi-chemin ainsi qu'à la find du tampon.
  4. Le SPI fait la lecture du fichier WAV qui est sur la W25Q80DV vers le tampon. La moitié du tampon est chargée tandis que le DMA transfert l'autre moitié au DAC. Cette technique permet un transfert continu sans délais entre échantillons.

Montage

montage

Programmation du MCU

  1. Utiliser un programmeur STLINK_V2 pour installer le firmware smallForth avec la commande.
stm8flash -c stlinkv2 -p stm8l151k6 build/stm8l151k6/smallForth.bin
  1. smallForth communicque avec l'utilisateur via un émulateur de terminal. J'utilise GTKTerm sur Ubuntu 22.04LTS. La configuration du terminal est 115200 BAUD,8 bits,1 stop, pas de parité, pas de contrôle de flux. Voir la schématique pour l'agencement du connecteur serial_con.
  2. Le reste de la programmation se fait avec le script prog_sonette.sh qui envoie les 4 fichiers forth de l'application à la carte. Cette opération prend quelques minutes. On voit le texte du code source défilé à l'écran et sur le terminal.
./prog_sonette.sh
  1. Ensuite il faut programmer les fichiers WAV dans la mémoire FLASH W25Q80DV. Il y en a 8 a programmer et ça prend entre 3 et 5 minutes par fichier en utilsant le script send.sh. Encore une fois on voit le texte défilé sur les 2 moniteurs pendant la programmation. Les 8 fichiers sont:
    1. big-ben.hex, joue le Westminster quarter chime.
    2. code-et.hex, joue le code ET du film rencontre du 3ième type.
    3. gong.hex, joue un son de gong.
    4. jeux-interdits.hex, joue la musique thème du film les jeux interdits.
    5. kongas.hex, joue des tambours Africains.
    6. koro.hex, joue le thème Korobeiniki de la version originale de Tétris.
    7. ode_joie.hex, Joue l'hymne Européen.
    8. romans.hex, joue des trompettes romaines.

Tous ces fichiers sont échantillonnés à 8 bits non signés PCM à la fréquence de 22050 hertz et convertie en fichier texte par le script bin2txt.sh. J'ai utilisé le logiciel Audacity pour extraire des séquence de 4 ou 5 secondes et pour exporter sous le format requis par ce projet. Une ligne supplémentaire est ajoutée manuellement au début de chaque fichier. Il s'agit de la commande forth:

PROG_BUFF  ud1 ud2 RX_FILE 
  • ud1 est un entier double (32 bits) représentant l'adresse W25Q80DV où doit-être enregistré ce fichier. La partie faible précède la partie lourde.
  • ud2 est un entier double représentant la taille du fichier WAV en octets. Ce nombre doit aussi être entré en format little indian à la place des 4 zéros de la deuxième ligne. Tous les nombres sont représentés en hexadécimal. Voici en exemple les 2 premières ligne du fichier gong.hex Les 12 premiers octets de la deuxième ligne représente le nom du fichier en ASCII. Si le nom a moins de 12 caractères des espaces , caractère ASCII 20, comble le champ. Ainsi représenté GONG est 47 4F 4E 47 suivit de 8 espaces pour combler le champ.
PROG_BUFF $8000 8 $EB50 2 RX_FILE
47 4F 4E 47 20 20 20 20 20 20 20 20 50 EB 02 00

Le fichier sera donc programmé à l'adresse 0x88000 sur la W25Q80DV et la taille du fichier est de 0x2EB50 octets. Notez les 4 derniers octets de la 2ième ligne 50 EB 02 00 c'est encore la taille du fichier saisie au format little indian.

Donc lorsque ces fichiers HEX sont formattés correctement on utilise le script prog_wav.sh comme suit:

./prog_wav.sh nom_du_fichier

La dernière étape est de configurer l'autorun pour que l'application démarre automatique lors de la mise sous tension du circuit. dans la console forth il suffit de faire:

AUTORUN DOOR-BELL

Redémarrez le MCU en pesant sur le bouton RESET. Au démarrage l'application laisse à l'utilisateur 5 secondes pour annuler l'application. Presser n'importe quel touche au clavier annule l'exécution de DOOR-BELL avec retour sur la ligne de commande du forth.

ATTENTION

Dans tous les scripts qui utilise l'utilitaire SendFile le nom du port sériel que vous utilisez doit remplacer celui indiqué par défaut dans le fichier script.

About

sonette d'entrée jouant un fichier WAV à l'aide du DAC du STM8L151K6

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

No contributors