COSMAC ELF+, partie 3
Ajout de petite carte avec un haut-parleur pour produire des tonalités en commutant la sortie Q du MCU.
Comme on le voie sur le schéma du côté droit, j'ai ajouté un haut-parleur contrôlé par un transistor MOSFET 2N7000, lui-même étant contrôlé par la sortie Q du MCU. Comme il n'y avait pas d'espace sur la carte du elf+ j'ai fait le montage sur une petite carte qui se branche sur la carte mère du elf+.
démonstration
code du programme
; R0 compteur ordinal routine MAIN
; R3 compteur ordinal sous-routine DELAY
; RF compteur de délais
MAIN:
0 F8 00 LDI DELAY.1 ; initialisation de R3
2 B3 PHI R3 ; à l'adresse de DELAY
3 F8 0D LDI DELAY.0
5 A3 PLO R3 ; R3 <- adresse de DELAY $000D
TONE: ; génération d'une tonalité sur Q
6 7B SEQ ; Q <- 1
7 D3 SEP 3 ; appel sous-routine DELAY
8 7A REQ ; Q <- 0
9 D3 SEP 3 ; appel sous-routine DELAY
A 30 06 BR 06 ;boucle à TONE
EXIT: ; sortie de la sous-routine
C D0 SEP 0 ; retourne au programme MAIN
DELAY: ; entrée sous-routine DELAY
D F8 4F LDI 4F ; initialise le compteur de délais
F AF PLO RF.0 ; RF.0 <- 4F
10 F8 00 LDI 0 ; D <- 0
12 BF PHI RF ; RF.1 <- 0
LOOP: ; décrémente RF tant que RF.1==0
13 2F DEC RF ; RF <- RF-1
14 9F GHI RF ; D <- RF.1
15 32 13 BZ LOOP ; SI D=0 retourne à LOOP
17 30 0C BR EXIT ; délais terminé
Calcul du compteur de DELAY
Pour calculer le délais à mettre dans le registre RF
compte=Freq_osc/(Freq_audio*8*6*2) -1 -16/6
- compte est la valeur d'initialisation du registre RF
- Freq_audio est la fréquence audio à générer
- Freq_osc est la fréquence du cristal utilisé pour le CDP1802
- 8 parce qu'un cycle machine est 8 périodes de Freq_osc
- 6 parce que la boucle LOOP s'exécute en 6 cycles machines
- 2 parce que la sous-routine DELAY est appellée 2 fois par cycle audio.
- -1 parce que la boucle de délais s'exécute 1 fois même si compte=0
- -16/6 parce qu'il y a 16 cycles machines qui s'exécutent en dehors de la boucle LOOP par demi-cycle audio et qu'on doit soustraire ces cycles du nombre de répétions de LOOP
compte=4e6/(500*8*6*2) -1 -16/6 = 79.6666, tronqué à 79, ce qui correspond à 4F en hexadécimal. La fréquence réelle mesurée à l'oscilloscope est de 502.9 hertz.
vidéo









