Hola a todos/das.
Tengo un ejemplo de programa que baje de la web(código extraído de:
Making Music) que es el siguiente:
[tt][table]
device 16f628A
XTAL = 20 ' With a 20MHz crystal/resonator
Dim NOTE_COUNTER as Word SYSTEM ' Determines when the pin is toggled
Dim NOTE as Word SYSTEM ' Determines the pitch of the note
Dim TIMER1 as TMR1L.Word ' Combine TMR1L/TMR1H as a 16-bit word
Symbol TRIGGER = PORTB.4
ON_INTERRUPT Goto NOTE_INT ' Point interrupts to our interrupt handler
Delayms 1000 ' Wait for PICmicro to stabilise
'ALL_DIGITAL = True ' Set PORTA and PORTE to digital
delayms 2000
Goto OVER_INTERRUPT ' Jump over the interrupt handler
'----[INTERRUPT HANDLER]------------------------------------------------
NOTE_INT:
TIMER1 = 65490 ' Load TMR1 with a preset value
Inc NOTE_COUNTER ' Increment the note counter
If NOTE_COUNTER > NOTE Then ' Is it time to toggle the pin ?
TRISB = TRISB ^ 1 ' Toggle pin PORTB.0
Clear NOTE_COUNTER ' Clear the note counter
Endif
Clear PIR1.0 ' Clear TMR1 interrupt flag
Retfie FAST ' Exit the interrupt
'----[MAIN PROGRAM CODE]--------------------------------------------------
OVER_INTERRUPT:
Input PORTB.0 ' Make PORTB.0 and Input
Set PORTB.0 ' And set it high
Clear NOTE_COUNTER ' Reset the note counter
T1CON = %00000001 ' Turn on TIMER1, with a 1:1 prescaler
Clear PIR1.0 ' Clear TMR1 interrupt flag
Set PIE1.0 ' Enable TMR1 as peripheral interrupt source
INTCON = %11000000 ' Enable global interrupts, peripheral interrupts
' Play DING chime
NOTE = 110 ' Set the frequency of the first chime
High TRIGGER ' Start charging the capacitor
Delayms 40 ' Allow time for the capacitor to charge
Input TRIGGER ' Release the capacitor and let it discharge naturally
Delayms 300 ' Delay between chimes
' Play DONG chime
NOTE = 139 ' Set the frequency of the second chime
High TRIGGER ' Start charging the capacitor
Delayms 40 ' Allow time for the capacitor to charge
Input TRIGGER ' Release the capacitor and let it discharge naturally
stop
[/table][/tt]
Es para un micro 18F452 pero yo lo estoy queriendo hacer andar en un 16F628.
El problema que tengo es que si pongo el código tal cual como esta, a veces me funciona bien y otras veces mal.
Se que un 16F es muy distinto a un 18F pero por hay modificando un poco el código lo pueda hacer funcionar bien en un 16F. de hecho cuando funciona bien se escucha perfecto (mejor que un chip dingdong!).
Otro problema que tengo es que solo lo puedo reproducir una ves y luego es como que el micro quedara colgado porque no reacciona mas hasta que lo apague o lo resetee. (obviamente cuando lo quiero reproducir mas de una ves saco el STOP! y agrego un par de lineas mas de codigo.)
Algun alma caritativa me puede dar una mano con esto. hace tiempo que tengo este proyecto parado por no conseguir hacer un codigo con buen sonido.
Aclaración: Yo hace poco empecé a usar el Protón+ mi fuerte fue siempre el PicBasicPro y me estoy acostumbrando a usar el protón porque el PBP creo que ya paso de moda y es medio obsoleto.
Gracias a todos de ante mano