Dernière mise à jour :
25/01/2015
Présentation
Contrairement à son ancêtre
sirène 007,
celle-ci ne délivre qu'un seul type de signal sonore, le Pin-Pon du
SAMU. Mais tout comme son ancêtre, elle s'appuie sur un PIC 12F675,
pour une simplification extrême : deux composants seulement
au minimum !
Eh oui, le PIC et un buzer piezo, ça fait bien deux composants. Mais on peut en rajouter...
Avertissement
Ce montage a été conçu pour être intégré dans une
rampe munie d'un avertisseur sonore, elle-même montée sur un véhicule
de la Croix-Rouge Française, qui est autorisée à l'utiliser. Sans
autorisation, ce montage ne peut être utilisé qu'à des fin didactique
ou ludique, chez soi et avec une puissance sonore modérée.
Schéma
Deux composants donc, un PIC et un transducteur piezo.
Le connecteur J1 est celui de l'alim 5 V, il compte pour du beurre (qui
comme chacun sait ne résiste pas à la chaleur).
Tel
quel, ce montage délivre de façon alternée deux tonalités fixes de 435
Hz et 651 Hz (ça ressemble bien à une quinte), à raison de 55 cycles par minute (période de 1,09 seconde
pour deux changements
de tonalité successifs). La sortie GP0 peut attaquer
directement un transducteur piezo, je ne me gêne pas. Mais vous pouvez
aussi mettre un petit haut-parleur d'impédance 50
ohms, en série avec un condensateur de liaison de 220 uF. Si le HP ne
fait que 8 à 16 ohms, il faut
mettre une résistance en série avec lui pour limiter le courant de
sortie du PIC à une valeur non destructive (une résistance de 47 ohms /
0,5 W fait l'affaire). La sortie peut également attaquer un étage de puissance modeste ou élevée (
exemples), si bien sûr vous en avez l'autorisation. Le circuit fonctionne avec une tension de 3
V (deux piles
de 1,5 V) ou de 4,5 V (3 piles de 1,5 V). Pour les tests et
comme je n'avais plus
de pile, j'ai utilisé mon alimentation de labo de 300 A qui à priori
suffisait
pour ce PIC. Aux deux composants de base, on peut tout de même
ajouter une option "sortie ligne"
et une option "régulation tension", qui donnent lieu au joli dessin qui
suit.
Même avec ces ajouts, on peut dire que le schéma reste simple, non
? La
sortie ligne analogique Out_A fait usage d'un pont diviseur (R1
et R2) pour limiter l'amplitude tout de même un peu élevée du signal de
sortie (TTL 5 V si PIC alimenté en 5 V, rappelons
qu'une entrée ligne traditionnelle se
contente d'ordinaire de signaux audio dont l'amplitude est de
quelques centaines de mV). Le condensateur de liaison C1 est facultatif.
L'option régulation de tension permet de faire fonctionner la sirène à
partir d'une tension plus élevée, par exemple le +12 V d'une batterie
de voiture. Ici l'abaissement de tension est obtenu avec un petit
régulateur de tension en boîtier plastique TO92, le bien nommé 78L05 (U2 sur le schéma).
Vu qu'on a des volts à perdre si on se branche sur une batterie 12 V de
voiture, l'ajout d'une diode de protection contre l'inversion
accidentelle de polarité (D1), en série avec l'arrivée d'alimentation,
ne peut pas faire de mal. Elle assure même, voyez-vous, une sorte de
filtrage RC "dynamique" avec son compagnon C2, filtrage qui plaît beaucoup au
régulateur qui fait suite.
Principe de base
Le PIC ne comporte que très peu de lignes de code. Les deux timers Timer0 et Timer1 sont mis à contribution :
- Timer0 pour élaborer les signaux sonores
- Timer1 pour faire la bascule entre les deux fréquences de 435 Hz et 651 Hz.
Remarque
: la sortie TP1 (sur GP2) n'est là que pour vérifier que le temps qui
sépare les changement de tonalité est correct. En situation normale
cette sortie n'est pas utilisée.
//Pin-Pon SAMU, 435 Hz / 651 Hz - Cadence 55 cycles / minute
program electronique_sirene_007b_12f675;
const
cTMR0_435Hz = 115; // 435 Hz
cTMR0_651Hz = 163; // 651 Hz
cTMR1H = $F8;
cTMR1L = $D9;
var
iT1: word;
bF1: boolean;
Out_Audio: sbit at GPIO.0;
Out_TP1: sbit at GPIO.2;
procedure CPU_Init;
begin
CMCON := %00000111; // comparators OFF
TRISIO := $00;
ANSEL := $00;
OPTION_REG := $00;
OPTION_REG.PSA := 0;
OPTION_REG.PS2 := 0;
OPTION_REG.PS1 := 1;
OPTION_REG.PS0 := 0;
INTCON := $00;
INTCON.T0IE := 1;
INTCON.T0IF := 0;
TMR0 := cTMR0_435Hz;
T1CON := $00;
T1CON.TMR1ON := 1;
PIR1.TMR1IF := 0;
PIE1.TMR1IE := 1;
WPU := $00;
iT1 := 0;
INTCON.GIE := 1;
bF1 := false;
end;
procedure Interrupt;
begin
// Timer0 - use to produce sound
if INTCON.T0IF then
begin
INTCON.T0IF := 0;
if bF1 then
TMR0 := cTMR0_435Hz
else
TMR0 := cTMR0_651Hz;
Out_Audio := Out_Audio xor 1;
end;
// Timer1 - use to change sound freq
if PIR1.TMR1IF then
begin
PIR1.TMR1IF := 0;
TMR1H := cTMR1H;
TMR1L := cTMR1L;
if inc(iT1) > 237 then
begin
bF1 := bF1 xor 1;
Out_TP1 := bF1;
iT1 := 0;
end;
end;
end;
// main program
begin
CPU_Init; // all works is made in interrupts
end.
Voir aussi page
Programmation PIC - Bases - MP - Production sonore.
Stabilité des fréquences
La
stabilité des deux tonalités et de l'intervale de temps qui sépare
les changements de ton dépend de l'oscillateur utilisé pour le PIC.
Dans le mode le plus simple, on utilise l'oscillateur interne 4 MHz
dont la fréquence peut varier un peu en fonction de la température
ambiante. Pour une meilleure stabilité, on doit ajouter un quartz
entre les deux broches OSC1 et OSC2 du PIC, avec les deux traditionnels
condensateurs qui permettent d'entretenir l'oscillation. Votre
serviteur met donc à disposition deux fichiers compilés, un pour usage
avec quartz et l'autre pour usage avec oscillateur interne. Notez
que les valeurs utilisées dans le code pour le prépositionnement des
deux timers sont le résultat de calculs, qu'une simulation a permis de
valider. Dans la pratique et à cause des tolérances des composants, ces
valeurs peuvent très légèrement différer.
Prototype
Réalisé sur plaque sans soudure, en même temps pour programmation ICSP et tests auditifs.
Essai
avec HP 8 ohms en série avec une résistance de 15 kO. Oui, 15 kO c'est
beaucoup et le son est très faible. Mais c'est bien suffisant pour
s'assurer que tout fonctionne. Ici avec oscillateur interne et donc
sans quartz externe.
Logiciel du PIC
Les fichiers de code source
(MikroPascal V6.5 Pro) et binaires compilés (*.hex) sont disponibles
dans l'archive dont le lien suit.
Sirène 007b - PIC 12F675 - 25/01/2015
- Fichier *_oscint.hex : pour usage sans quartz externe
- Fichier *_quartz.hex : pour usage avec quartz externe
Si
vous souhaitez recevoir par la poste un PIC préprogrammé
et prêt à utiliser, merci de consulter la page
PIC - Sources.
Circuits imprimés
Réalisés en simple face, en modes "simplifié" et "complet". Pour la
version complète, il est aisé de ne pas monter sur le circuit, les
composants non requis.
Typons aux formats PDF et Bitmap 600 dpi
Historique
25/01/2015
- Première mise à disposition.