desktop

Curso de programación de PIC en PICBasic Pro

hola buen día compañeros la pagina que yo conozco de interrupciones es esta:
http://www.darreltaylor.com/DT_INTS-14/intro.html
saludosss

Algo asi me imagino con lo de "interrupciones no convencionales", ese tipo imagino que las nombro "instant interrupts", no es mas que utilizar algoritmos en ensamblador hacia las mismas interrupciones que tenga el microcontrolador.

siempre es util utilizar ensamblador en basic, siempre y cuando la aplicación lo requiera y uno lo domine, en el caso de una comunicacion serial yo no lo veo necesario.
 
hola buen día compañeros la pagina que yo conozco de interrupciones es esta:
http://www.darreltaylor.com/DT_INTS-14/intro.html
saludosss

(y) Tal cual!!!! :aplauso:
pero justo no funciona el link de descarga :cry:voy a tener que usar otro micro mas :(



Yo es la primera ves que escucho eso de interrupciones no convensionales, y me suena a mentira,un modulo tiene una interrupción y es todo, lo demás serian algoritmos.
Prueba utilizar el modulo USART con las instrucones hserin y hserout,al ser por hw seguramente llama a la subrutina de interrupción.

:eek: La idea era resumir el circuito... Viendo que no reesponde por USART el modem, creo que no hay muchas vueltas que darle... :unsure: crees que no agote todas las instancias antes de consultar?! (n)
 
Última edición:
puedes poner el codigo que utilizaste usando el modulo, me parece un poco raro, si funciona por SW, no tiene porque no funcionar por HW. quizas solo te falto configurarlo adecuadamente.

para enviar o recibir con HSERIN/HSEROUT, es la misma linea que con SEROUT, pero se le suma la H delante...
la configuracion fue esta:

Código:
INCLUDE "modedefs.bas"
DEFINE HSER_RCSTA 90H
DEFINE HSER_TSTA 20H
DEFINE HSER_BAUD9600

Probe en 2400 Baudios y menos que menos... pensando que era el hardware, configure el modem y despues ni con serin y serout pude establecer comunicacion con el hyperterminal, asi que lo deje en 9600 nuevamente y con serin y serout ya hablamos y tomamos mates con el modem...
creo que un 16F628 que tengo dando vueltas me salva las papas (tengo otro 877 pero es mucho ya)
 
hola a todos: de nuevo por estos lados con la preguntadera alguien sabe si en LINUX se puede instalar el PBP y el PROTEUS?
Yo intente con wine en una netbook del gobierno (conectar igualdad) y no me dejo correrlo; mplab y ccs si pero pbp no intente. Que distro le vas a colocar? quizas buscando en google proteus parra linux, te sale que version podrias usar...saludos
 
Bueno, anoche termine la segunda beta de un RX-TX 4-20mA HOME MADE para leer instrumentos que trabajan con este protocolo... Le falta pulir, pero lo mas importante es que el hardware despues de renegar lo saque a flote. Basicamente lo que hago es leer señales 4-20mA (24Vcc) y generar con un PWM 4-20mA (24Vcc)... La otra funcion que le sume, es poder generar un espejo de corriente entre la entrada y la salida, osea, si lee 5mA, a la salida genera 5mA.
Todo corre en base a dos LM358 con fuente simple (uno se alimenta a 12Vcc y el otro a 24Vcc). GND se comparte entre ambos amplificadores operacionales y señales de entrada / salida.
Para leer la señal 4-20mA y colocarlo en el display, como anoche estaba cansado y no se me ocurria nada para trabajar con punto flotante, implemente las siguientes lineas y medianamente quedo pasable:

Código:
ADCIN 0, ent420
  nivel = ent420
  aux1=(ent420*100)/250            ;(V*100)/(R*100)
  aux1= aux1 *2
  ;****blabla bla
   LCDOUT $FE, 1
  LCDOut $fe,2,"Sal: ",DEC4 aux1,"mA"

para generar el pwm que me lleve el filtro de 0-5Vcc para crear los 4-20mA, implemente estas lineas:

Código:
PWM PORTC.2,nivelAUX,100 ;nivel PWM = (Vout * 255) / V.Fuente
Les comparto el diagrama, si necesitan algo mas, me lo piden y te lo comparto; La proxima beta es sumarle un par de lineas mas y crear otra funcion mas... "Una fuente a modo generador de corriente" para probar y calibrar instrumentos.

 

Adjuntos

  • RX_4_20-0_5V_TX_0_5V-4_20ma.PNG
    RX_4_20-0_5V_TX_0_5V-4_20ma.PNG
    26.8 KB · Visitas: 74
Última edición:
hola martin, pudiste configurar los fuses para pics 12fxxx??? saludosss
No :oops: , pero seria ideal migrar todo asi queda mucho mas chico una version :unsure: ... total lo del display es chiche que no se justifica :rolleyes: ... practicamente es derrochar un 18F452 o un 16F877 :cry:
Me olvide comentar que para obtener a la salida del filtro que esta asociado al pin donde sale el PWM, la misma tension que la entrante por el puerto analogico, uso estas lineas, lo cual me simplifica mucho mas las cosas a la hora de querer hacer un espejo de corriente:

Código:
DEFINE OSC 20 
'****************************************************************
TRISA = 1 
ADCON1 = 0 
ADCON0 = %11000001
TRISB = %00000000  
TRISC = %11100000
'****************************************************************
DEFINE ADC_BITS 8 
DEFINE ADC_CLOCK 3 
DEFINE ADC_SAMPLEUS 50 
'****************************************************************
ent420 var word
nivel var byte
nivelAUX var byte
aux1 var byte
tiempo var byte
'****************************************************************
ejemplo:
ADCIN 0, ent420
nivel = ent420
aux1=(ent420*100)/250            ;(V*100)/(R*100)
aux1= aux1 *2
 LCDOUT $FE, 1
 LCDOut $fe,2,"Ent=Sal: ",DEC4 aux1,"mA"
 PWM PORTC.2,nivel,100  ;nivel PWM = (Vout * 255) / V.Fuente
pause 100
GOTO ejemplo
 
Última edición:
ah, bueno, aqui encontre un pequeño programita que hice para un 12f675 y ahi tiene los fuses configurados, el problema era que habia perdido el codigo de calibracion del oscilador interno del pic, el que aparece en la ultima linea del .hex, fijate si te sirve. saludosss
https://www.forosdeelectronica.com/posts/561757/
 
Última edición:
ah, bueno, aqui encontre un pequeño programita que hice para un 12f675 y ahi tiene los fuses configurados, el problema era que habia perdido el codigo de calibracion del oscilador interno del pic, el que aparece en la ultima linea del .hex, fijate si te sirve. saludosss
https://www.forosdeelectronica.com/posts/561757/

Recien mire el topico completo, pero de esta manera, osea por oscilador interno, no lo podria usar en 20Mhz:

@ DEVICE pic12F675,
intrc_osc, wdt_off, pwrt_on, mclr_off, bod_off, protect_off

DEFINE OSC 4
DEFINE OSCCAL_1K 1


Ahora voy a ver si encuentro ejemplos basicos con FUSES y configuracion de puertos, por que como te comente, solo fueron un par de veces que use este tipo de pic y no me acuerdo nada...
Tengo que acordarme como activar el ADC y como configurar GPIO ya sea como entrada o como salida asi ya puedo pasar todo de un micro al otro... supuestamente, para hacer el pasaje de un pic a otro, tengo que anexar oscilador externo, configurar el ADC0 para usarlo como entrada analogica y configurar un puerto como salida digital y de ahi sacar el PWM... en pocas palabras parece simple, pero tengo que refrezcar la memoria al parecer :oops:
Para la version del pic grande, ahora estoy trabajando con una nueva BETA, que lo que hace es transformar una lectura en 4-20mA... osea, lee un valor analogico, lo guarda como valor max y lee otro valor como min... con eso sacamos los 4-20mA y el resto de la escala, es conversion... Seria otra de las tantas maneras de encarar la lectura del sensor HOME MADE sin importar si la saldida de este es o no 4-20mA :unsure:
 

Adjuntos

  • sensor_1.PNG
    sensor_1.PNG
    355.9 KB · Visitas: 104
  • 20140504_162747.jpg
    20140504_162747.jpg
    80.7 KB · Visitas: 114
Última edición:
Hi torres.electronico, de esta manera recientemente use un 12f683 con ADC configurado a 10bit, espero que te sirba de algo ya que tiene los fuses, las configuracion del oscilador interno, ADC y como poner los diferentes pines como salida (GPIO).
'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 10 '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 = %00110011 'AN0,AN2 analogico, los demas digitales
TRISIO = %11001011 'GP0,GP1,GP3 Entrada,GP2,GP4,GP5 salida
GPIO = 0 'Apago los puertos GP0
 
: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: 219
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..
 
Atrás
Arriba