Curso de programación de PIC en PICBasic Pro

:aplauso: Buenisimo gracias por ahorrarme un buen rato (y) ... consulta para ver si entendi la configuracion...
Para implementar GP0 como entrada analogica,GP1,GP3,GP4,GP5 como entradas digitales y GP2 como salida de pwm or software, se configuraria asi?

'*****************************************************
'Config de Fuses
@ DEVICE PIC12F683
@ DEVICE PIC12F683, FCMEN_OFF
@ DEVICE PIC12F683, IESO_OFF
@ DEVICE PIC12F683, WDT_ON
@ DEVICE PIC12F683, BOD_ON
@ DEVICE PIC12F683, PWRT_ON
@ DEVICE PIC12F683, PROTECT_OFF
@ DEVICE PIC12F683, MCLR_OFF
@ DEVICE PIC12F683, INTRC_OSC_NOCLKOUT
@ DEVICE PIC12F683, BOD_ON
'Config parametros ADC
DEFINE ADC_BITS 8 'Numero de bits ADC
DEFINE ADC_CLOCK 1 'Reloj ADC interno
DEFINE ADC_SAMPLEUS 30 'Tiempo ADC
'Config de Registros
OSCCON=%01100001 'Calibrar el oscilador interno a 4Mhz
CMCON0 = 7 'Comparador OFF, salida como digitales
ADCON0=%10000000 'Resultado AD justificado a la derecha
ANSEL = %00110001 'AN0,analogico, los demas digitales
TRISIO = %11111011 'GP0,GP1,GP3,GP4,GP5Entrada,GP2 salida
GPIO = 0 'Apago los puertos GP0 - osea, GP2
'*****************************************************
Gracias por tu tiempo, saludos
 
Hola amigo torres manejo los pic12F bastante bien, si quieres coloca el código que quieres pasar del pic grande al mas pequeño para echarte una mano...saludoss
 
Hola amigo torres manejo los pic12F bastante bien, si quieres coloca el código que quieres pasar del pic grande al mas pequeño para echarte una mano...saludoss

Hola Rey, gracias por la mano que me das… Te comento que justo ahora me trabé con la reforma /mejora del proyecto… o sea, , me trabe por que la técnica de punto flotante que implemente anteriormente no sé si me desborda o se pierde PBP y no puedo hacer la función mas importante de esta mejora, que sería grabar una señal de referencia máxima, una señal de referencia mínima, y a partir de estas dos señales, sacar el porcentaje promedio para compararlo con una tabla y sacar una señal analógica 4-20mA (1-5v) , que básicamente, en realidad me da una salida de 20 niveles (4mA-4,5mA-5mA-etc. etc. hasta 20mA) y al referirme como salida analógica, me refiero más a lo conceptual, que a lo real.
Matemáticamente, se hace así:
Aux1 = lecturaADCmax – lecturaADCmin
Aux2 = Aux1 / lecturaADCmin
Aux2 = Aux2 * 100
Teniendo esta parte terminada, lograría mejorar la función transductor, ya que la función transmisor, esta lista y funciona bien.
A la tarde te paso lo que ya funciona, gracias
 
Por aqui les dejo un voltimetro que realice con un pic16f877a esta un documento pdf como lo realice y una carpeta con el pbp, hex y la simulacion en proteus.
 

Adjuntos

  • Voltimetro de 0v a 29v PicBasic.zip
    212.7 KB · Visitas: 218
Una consulta como seria para sacar el valor promedio de una lectura adc, por ejemplo tomando algunas 50 muestras del adc..
Agradeceria sugerencia como guia para guiarme gracias..
 
Una consulta como seria para sacar el valor promedio de una lectura adc, por ejemplo tomando algunas 50 muestras del adc..
Agradeceria sugerencia como guia para guiarme gracias..
Haz un lazo o bucle for next, mas o menos asi:

promedio=0 'al inicio promedio es cero
for cnt=1 to 10 step 1 '10 es el numero de muestras
gosub muestrear 'va a tomar muestra de un pin ADC y guarda en "valor_ADC"
promedio=valor_ADC+promedio 'sumas y sumas
next cnt

promedio=promedio/10 'promedias
 
Alguien sabe si esto es posible? Desde hace tiempo he querido saber como se puede grabar sonidos en un pic, segun me encontre este video y veo que si, pero como se hace esto?


Otra pagina encontré un programa llamado BTCSound transforma un archivo wav en bits, lo saca en lenguaje Assambler, pero lo hace demasiado extenso que ni se puede guardar en el pic dicho lenguaje generado.

http://www.romanblack.com/picsound.htm
 
¿Alguien sabe si esto es posible? Desde hace tiempo he querido saber como se puede grabar sonidos en un pic, según me encontré este video y veo que si, pero como se hace esto?
No creo que sea cierto lo que está haciendo ese PIC.
Dice que le está metiendo música en formato MP3 y aunque el MP3 sea un formato comprimido, se necesita mucha memoria para almacenar tantas canciones o fragmentos de ellas en la poca memoria de un PIC.
(Suficiente para lo que realmente puede hacer un PIC)

Aparte hay que tomar en cuenta el algoritmo de decodificación y eso en un PIC resultaría muy complicado, si no es que imposible.
Tal vez se pueda controlar un reproductor de MP3, pero que el PIC lo haga todo, no lo creo.
Para eso están los dsPIC pero no es nada sencillo. dsPIC MP3 Decoder [PIC24]
Otra pagina encontré un programa llamado BTCSound transforma un archivo wav en bits, lo saca en lenguaje Assambler, pero lo hace demasiado extenso que ni se puede guardar en el pic dicho lenguaje generado.
Ese programa si funciona pero utiliza bancos externos de memoria para almacenar hasta 1MBit.
Necesitas estudiarlo muy bien o comprar el TalkBotBrain para reproducir los sonidos.
Como quiera no se me hace nada fácil llevar a cabo un proyecto similar y se requieren muchos conocimientos sobre archivos wav y algoritmos de codificación y decodificación.

Saludos.
 
Última edición:
El programa si funciona, pero la calidad del audio, que sale del PIC es muy mala, el código que genera el
BTSC es asembler, pero muy extenso para poder grabar toda una canción en el micro.
Creo que en el mismo programa hay un ejemplo de filtro para usarlo en el PIC.
Personalmente pienso que es mejor usar un Dspic para este tipo de trabajo.:unsure:
 
No creo que sea cierto lo que está haciendo ese PIC.
Dice que le está metiendo música en formato MP3 y aunque el MP3 sea un formato comprimido, se necesita mucha memoria para almacenar tantas canciones o fragmentos de ellas en la poca memoria de un PIC.
(Suficiente para lo que realmente puede hacer un PIC)

Aparte hay que tomar en cuenta el algoritmo de decodificación y eso en un PIC resultaría muy complicado, si no es que imposible.
Tal vez se pueda controlar un reproductor de MP3, pero que el PIC lo haga todo, no lo creo.
Para eso están los dsPIC pero no es nada sencillo. dsPIC MP3 Decoder [PIC24]

Ese programa si funciona pero utiliza bancos externos de memoria para almacenar hasta 1MBit.
Necesitas estudiarlo muy bien o comprar el TalkBotBrain para reproducir los sonidos.
Como quiera no se me hace nada fácil llevar a cabo un proyecto similar y se requieren muchos conocimientos sobre archivos wav y algoritmos de codificación y decodificación.

Saludos.

En pocas palabras seria muy dificil hacer un proyecto asi entonces, gracias por la respuesta amigo, bueno por aca te dejo este video segun el autor dice que genera con PWM los sonidos, la verdad le quedo excelente.

 
En pocas palabras seria muy dificil hacer un proyecto asi entonces, gracias por la respuesta amigo, bueno por aca te dejo este video segun el autor dice que genera con PWM los sonidos, la verdad le quedo excelente.
Así es, más que nada la limitación es por la memoria.
Ese video ya lo había visto por alguno de los post del Foro dónde se ha tratado esto. Está bien ese proyecto. :)

Si te interesa, aquí hay un proyecto más sencillo porque usa dos programas como herramientas, pero es en C (Hi-Tech for PIC18)
PIC sound player (PCM to PWM converter)
Lo he probado personalmente y si funciona, se pueden generar sonidos cortos a partir de archivos wav.
Previamente hay que convertir los archivos *.WAV a *.PCM con el programa MPlayer
El autor del proyecto adjunta un programa para convertir los archivos PCM a archivos *.H
Éstos archivos son los que se agregan al programa para generar los sonidos por medio de PWM.

El proyecto tiene sus limitaciones en cuanto al tamaño de archivos *.h generados (Unos 50Kb. Aprox.) o tal vez menos, no he realizado muchas pruebas por lo tedioso de estar grabando, convirtiendo y compilando, pero con las pruebas que hice me entretuve buen rato. :LOL:

Suerte.
 
Yo creo que seria mas facil y barato con uno de estos:
modulo-reproductor-de-audio-mp3-wtv020-sd-arduino-picavr-16337-MLM20119108487_062014-O.jpg

Buscar en Mercadolibre: MLM-453310698-modulo-reproductor-de-audio-mp3-wtv020-sd-arduino-picavr-_JM
cuestan algo asi como 10USD.
 
Módulo Sintetizador de voz, es una buena idea, pero costoso.
Los sonidos generados en el video arriba, son algo como tipo Midi, eso si lo genera muy fácil el pic, existen librerias para notas musicales en Ccs, Pic Basic, Proton, Mikrobasic; Mikroc entre otros, que hacen más facil el trabajo.
 
A fin de cuentas veo que seria mejor usar el modulo y así no complicarme tanto la vida entonces, se ve muy complicado con los otros programas también :rolleyes:

Módulo Sintetizador de voz, es una buena idea, pero costoso.
Los sonidos generados en el video arriba, son algo como tipo Midi, eso si lo genera muy fácil el pic, existen librerias para notas musicales en Ccs, Pic Basic, Proton, Mikrobasic; Mikroc entre otros, que hacen más facil el trabajo.

Las librerias para Picbasic como cuales serian?
 
saludo expertos, estoy realizando una maqueta de una linea de montaje la cual tiene 5 estaciones con sensores fin de carrera y 5 pulsadores de llamada, la idea es que mediante los pulsadores de llamada, pueda hacer que el carrito se desplaze hasta una de las 5 estaciones a las que se envio y se detenga hasta que reciba otra orden para desplazarse, usare un motor dc con un puenteH para invertir el giro, por lo que tengo señal de avance y retroceso simuladas por 2 leds, no necesito que atienda los llamados con prioridad, simplemente tome el ultimo dato y se desplaze hasta alli, realize todas las combinaciones posibles, exceptuando las que si se encuentra el fin de carrera en la estacion 1, y se pulsa el llamado 1 no atienda ese llamado , si esta en la 2 y se pulsa el llamado 2 no atienda y asi con todas las 5 estaciones, serian 25 combinaciones menos 5 referentes al mismo piso que el llamado. quedan 20, bueno, emplee el condicional if-then, el problema es que no se me ocurre como efectuar la parada en la estacion, ya que si empleo el dato proporcionado por el fin de carrera para parar, lo hace, pero como el fin de carrera queda enclavado hasta recibir una orden para que se desplace, al dar la nueva orden el sistema permanece parado, ya que el fin de carrera dicta que por estar enclavado, el dato es leido como parada y no arranca hasta la siguiente posicion, espero que entiendan la explicacion y me puedan sugerir como hacer que pueda recibir la nueva orden y ejecutarla, osea se desplace, talvez no sea la manera precisa de encarar este programa y me refiero a usar combinaciones, o tal vez deba usar algun otro operador matematico para lograrlo, ojala me puedan ayudar sugiriendome como hacerlo, muchas gracias por su tiempo
 

Adjuntos

  • linea.rar
    14.7 KB · Visitas: 56
Nano, buscale la manera de guardarlo en la eeprom externa, y despues vemos como reproducirlo en la frecuencia correspondiente...

Código:
DEFINE ADC_BITS 10 
DEFINE ADC_CLOCK 3 
DEFINE ADC_SAMPLEUS 50

Adc VAR WORD

D0 VAR Adc.0
D1 VAR Adc.1
D2 VAR Adc.2
D3 VAR Adc.3
D4 VAR Adc.4
D5 VAR Adc.5
D6 VAR Adc.6
D7 VAR Adc.7
D8 VAR Adc.8
D9 VAR Adc.9

TRISA = %11111111
TRISB = %00000000
TRISD = %00000000

ADCON1.7 = 1

Inicio:
 
 ADCIN 0,Adc
 
 PORTD.0 = D0
 PORTD.1 = D1
 PORTD.2 = D2
 PORTD.3 = D3
 PORTD.4 = D4
 PORTD.5 = D5
 PORTD.6 = D6
 PORTD.7 = D7
 PORTB.0 = D8
 PORTB.1 = D9
 
GoTo Inicio

Basicamente lo que hace es reproducir en tiempo real el sonido que entra por el puerto analogico en un formato de 10 bits (algo similar al musiquita del mario bros en las antiguas family games jajaja); A la salida de este ejemplo, se implementa un dac, pero si lo guardas en una eeprom, te doy una mano para sacarlo con un sencillo filtro (resistencia + capacitor). Voy a ver si encuentro una idea que me habia compartido reimy en su momento para guardar y reflotar los valores en la eeprom
 
Última edición:
Atrás
Arriba