7: Práctica de Módulos Contadores y Aplicaciones de Circuitos
'Transmite la señal por 1 s
frqa := temp
waitcnt(clkfreq + cnt)
frqa~
PUB NcoFrqReg(frequency) : frqReg
{{
Regresa frqReg = frequency × (2³² ÷ clkfreq) calculado por división long binaria. Esto es
más rápido que la librería de punto flotante y toma menos espacio de código. Este método
es una adaptación del método fraction del objeto CTR.
}}
repeat 33
frqReg <<= 1
if frequency => clkfreq
frequency -= clkfreq
frqReg++
frequency <<= 1
Use Dos Módulos Contadores para Tocar Dos Notas
El objeto TwoTones demuestra como ambos contadores pueden usarse para tocar dos ondas
cuadradas diferentes en bocinas diferentes. En este ejemplo todo lo que hace el programa es esperar
por un cierto tiempo para pasar antes de ajustar los valores de registro
podría desarrollar otras tareas antes de regresar y esperar por el registro CLK para obtener el siguiente
incremento.
Cargue el objeto TwoTones.spin en el chip Propeller.
Verifique que toca la onda cuadrada de la aproximación de Do6 en la bocina P27 por un
segundo, luego detiene por ½ s y toca Mi6 en la bocina de P2 detiene por otro ½ s y toca
ambas notas en ambas bocinas al mismo tiempo.
''TwoTones.spin
''Toca notas individuales con cada bocina luego toca las notas con ambas ''al mismo tiempo
CON
_clkmode = xtal1 + pll16x
_xinfreq = 5_000_000
OBJ
SqrWave : "SquareWave"
PUB PlayTones | index, pin, duration
'Inicializa módulos contadores
repeat index from 0 to 1
pin := byte[@pins][index]
spr[8 + index] := (%00100 << 26) + pin
dira[pin]~~
'Busca tonos y duraciones en la sección DAT y los toca.
repeat index from 0 to 4
frqa := SqrWave.NcoFrqReg(word[@Anotes][index])
frqb := SqrWave.NcoFrqReg(word[@Bnotes][index])
duration := clkfreq/(byte[@durations][index])
waitcnt(duration + cnt)
' Reloj de sistema → 80 MHz
Kit Educativo de Practicas Propeller: Fundamentos · Página 149
y
. El programa
frqa
frqb