Estudio de Soluciones
PUB Start : okay
'' Inicia un cog D/A. Usa método Config para activar un dac en un pin.
okay := cog := cognew(DacLoop, @stack) + 1
PUB Stop
'' Detiene el proceso DAC y libera un cog.
if cog
cogstop(cog~ - 1)
PUB Config(channel, dacPin, resolution, dacAddress)
'' Configura un DAC. Bloque ejecución de programa hasta que otro cog completa
el comando.
''
channel
''
dacPin
''
resolution - bits de conversión D/A (8 = 8 bits, 12 = 12 bits, etc.)
''
dacAddress
un valor entre 0 y (2^resolucion) - 1.
ch
pin[channel]
bits[channel]
dacAddr[channel] := dacAddress
cmd
repeat while cmd
completa cmd.
PUB Remove(channel)
'' Remueve un canal. Activa canales pin E/S a entrada y limpia el modulo
contador.
'' Bloque ejecución de programa hasta que otro cog completa el comando.
ch
:= channel
cmd := 5
repeat while cmd
cmd.
PUB Update(channel, attribute, value)
'' Actualiza configuración de canal DAC.
'' Bloquea ejecución de programa hasta que cog completa comando.
''
channel
''
attribute - El atributo DAC para actualizar
''
0 -> dacPin
''
1 -> resolution
''
2 -> dacAddr
''
3 -> dacValue
''
value
ch := channel
case attribute
0 :
cmd := attribute + (value << 16)
' Opciones 1 a 3 no requiere un comando para PRI DacLoop -> PRI
' DacConfig.
' Solo requiere actualizar ciertas variables globales.
1 : bits[ch] := |<(32-value)
Pagina 220 · Kit Educativo de Prácticas Propeller: Fundamentos
- 0 = canal 0, 1 = canal 1
- número pin E/S que desarrolla el D/A
dirección de la variable que tiene el nivel de conversión D/A,
:= channel
:= dacPin
:= |<(32-resolution)
:= 4
- 0 = canal 0, 1 = canal 1
- El valor del atributo a ser actualizado
' Copia parámetros a variable global.
' Activa el comando para PRI DacLoop.
' Bloquea ejecución hasta que se
' Copia parámetro a variable global
' Activa comando para PRI DacLoop.
' Bloque ejecución hasta completar
' copia parámetro a variable global.
' atributo param decide que hacer.
' 0 = cambia pin DAC.
' pin E/S en upper 16 bits, lower 16
'cmd = 0.
' 1 = Cambia resolución.