Curso de programación de PIC en PICBasic Pro

Ok...

mira esta ultima revision....
espero funcione... solo seria cuestion de ajustar las RPM a lo real... con el link de la firma de Dario da un metodo para hacer ese ajuste si mal no recuerdo....
creo que es todo en lo que puedo yo ayudar... suerte!!!
 

Adjuntos

  • TACMP Rev3.rar
    34.5 KB · Visitas: 167
Gracias por la ayuda, pero el calculo no es 2000ms por 30 para tener la equivalente de rpm, en el programa esta 600 por 1 no seria rpms, perdón por la duda pero asi me explico mi maestro que se saca con el calculo las rpms

aaa.. y una cosa mas por que los demas fuses estan off y solo mclr esta en on??
 
Última edición:
@ Device Intrc_Osc -> le dice que el oscilador que se utilizara es el interno del micro
@ Device WDT_Off -> este es el watch Dog o sea que si se pasma el micro se puede auto resetear... en el programa no estoy usando esta funcion...
@ Device PIC16F628A-> se defiene el tipo de pic a utilizar
@ Device Pwrt_Off -> el pwrt sirva para ahorrar energia en el micro ver ficha tecnica en este caso no se usa
@ Device Mclr_On->para usar ra4 como un puerto E/S o como reset del micro, en este caso como reset
@ Device BOD_Off-> Brown-Out ver ficha tecnica.. en este caso no se usa
@ Device LVP_Off->Low voltage progra sirve para grabar el micro con 5v o niveles TTL en este caso se programa con 12v (creo :D desconozco que grabador tienes) asi que no se usa
@ Device CPD_Off->Protege los datos del eeprom para que no puedan ser leidos o pirateados en este caso no quedarian protegidos... para protegerlos seria _on
@ Device Protect_Off->Protege el codigo del micro para que no pueda ser pirateado...para protegerlos seria _on
 
Última edición:
Ok...

mira esta ultima revision....
espero funcione... solo seria cuestion de ajustar las RPM a lo real... con el link de la firma de Dario da un metodo para hacer ese ajuste si mal no recuerdo....
creo que es todo en lo que puedo yo ayudar... suerte!!!

eh lubeck, que buena que esta tu version de ese tacometro amigo(y)
saludosss
 
gracias por aclarar las dudas que me surgen

Bueno mi tacometro ya casi esta nada mas me falta calibrarlo y ya:).
Bueno, ahora necesito que porfa me ayuden a programar una matriz 7x5 para que las letras se desplacen.
Encontre este diagrama pero no se me ocurre como hacerlo o como utilizarlo a maximo que he llegado a sido hacer números con la matriz siguiendo el libro de carlos A. reyes.
Les pido ayuda para poderlo realizar, ya que si me interesa realizar un letrero. gracias de nuevo por la ayuda recibida:)
 

Adjuntos

  • Letrero con pic16f628a.rar
    128.7 KB · Visitas: 240
Última edición:
gracias lubeck por su aporte, le comento que proveel archivo que me preparo y anda ok el asunto que solo son esas dos frecuencias, por suerte Redfield29 el que progamo el original aparecio en el foro y respondio a mis pedidos. igualmente le agradezco por las molestias tomadas.
Saludos y Suerte!
 
respondio a mis pedidos. igualmente le agradezco por las molestias tomadas.
.... igual te deseo suerte con el proyecto...
saludos

mmm si dices que funciono...

este es el corazon del codigo para el lm7001.... quizas faltaria hacer un algoritmo mas proligo pero bue...
Código:
@ device pic16f84A
@ device xt_osc 
@ device WDT_Off
@ device Pwrt_off
@ device Protect_off

TrisA=%10011
TrisB=%00000000

define osc 4 
DEFINE LCD_DREG PORTB 
DEFINE LCD_DBIT 0     
DEFINE LCD_RSREG PORTA
DEFINE LCD_RSBIT 2    
DEFINE LCD_EREG PORTA 
DEFINE LCD_EBIT 3 

Up var porta.0
Dn var porta.1
CE  var portb.4
CL  var portb.5
DA  var portb.6

PortA=0
PortB=0

pause 100
Main:
if  not up then
 pause 500
 LCDout $FE,1
 lcdout $fe,$80,"Sintonizado" 
 lcdout $fe,$c0,"100.5"
 high ce
 
 DA=1:high Cl:pauseus 2:low CL:pauseus 2  ;D0
 DA=0:high Cl:pauseus 2:low CL:pauseus 2  'D1
 DA=1:high Cl:pauseus 2:low CL:pauseus 2  'D2
 DA=1:high Cl:pauseus 2:low CL:pauseus 2  'D3
 DA=0:high Cl:pauseus 2:low CL:pauseus 2  'D4
 DA=1:high Cl:pauseus 2:low CL:pauseus 2  'D5
 DA=1:high Cl:pauseus 2:low CL:pauseus 2  'D6
 DA=1:high Cl:pauseus 2:low CL:pauseus 2  'D7
 DA=1:high Cl:pauseus 2:low CL:pauseus 2  'D8
 DA=1:high Cl:pauseus 2:low CL:pauseus 2  'D9
 DA=0:high Cl:pauseus 2:low CL:pauseus 2  'D10
 DA=0:high Cl:pauseus 2:low CL:pauseus 2  'D11
 DA=0:high Cl:pauseus 2:low CL:pauseus 2  'D12
 DA=0:high Cl:pauseus 2:low CL:pauseus 2  'D13
 DA=0:high Cl:pauseus 2:low CL:pauseus 2  'T0
 DA=0:high Cl:pauseus 2:low CL:pauseus 2  'T1
 DA=0:high Cl:pauseus 2:low CL:pauseus 2  'B0
 DA=0:high Cl:pauseus 2:low CL:pauseus 2  'B1
 DA=0:high Cl:pauseus 2:low CL:pauseus 2  'B2
 DA=0:high Cl:pauseus 2:low CL:pauseus 2  'TB
 DA=0:high Cl:pauseus 2:low CL:pauseus 2  'R0
 DA=0:high Cl:pauseus 2:low CL:pauseus 2  'R1
 DA=0:high Cl:pauseus 2:low CL:pauseus 2  'R2
 DA=1:high Cl:pauseus 2:low CL:pauseus 2  'S
 low ce
endif
if not dn then 
 pause 500
 LCDout $FE,1
 lcdout $fe,$80,"Sintonizado" 
 lcdout $fe,$c0,"106.5"
  high ce
 DA=1:high Cl:pauseus 2:low CL:pauseus 2  ;D0
 DA=0:high Cl:pauseus 2:low CL:pauseus 2  'D1
 DA=0:high Cl:pauseus 2:low CL:pauseus 2  'D2
 DA=1:high Cl:pauseus 2:low CL:pauseus 2  'D3
 DA=0:high Cl:pauseus 2:low CL:pauseus 2  'D4
 DA=1:high Cl:pauseus 2:low CL:pauseus 2  'D5
 DA=0:high Cl:pauseus 2:low CL:pauseus 2  'D6
 DA=0:high Cl:pauseus 2:low CL:pauseus 2  'D7
 DA=0:high Cl:pauseus 2:low CL:pauseus 2  'D8
 DA=0:high Cl:pauseus 2:low CL:pauseus 2  'D9
 DA=1:high Cl:pauseus 2:low CL:pauseus 2  'D10
 DA=0:high Cl:pauseus 2:low CL:pauseus 2  'D11
 DA=0:high Cl:pauseus 2:low CL:pauseus 2  'D12
 DA=0:high Cl:pauseus 2:low CL:pauseus 2  'D13
 DA=0:high Cl:pauseus 2:low CL:pauseus 2  'T0
 DA=0:high Cl:pauseus 2:low CL:pauseus 2  'T1
 DA=0:high Cl:pauseus 2:low CL:pauseus 2  'B0
 DA=0:high Cl:pauseus 2:low CL:pauseus 2  'B1
 DA=0:high Cl:pauseus 2:low CL:pauseus 2  'B2
 DA=0:high Cl:pauseus 2:low CL:pauseus 2  'TB
 DA=0:high Cl:pauseus 2:low CL:pauseus 2  'R0
 DA=0:high Cl:pauseus 2:low CL:pauseus 2  'R1
 DA=0:high Cl:pauseus 2:low CL:pauseus 2  'R2
 DA=1:high Cl:pauseus 2:low CL:pauseus 2  'S
 low ce
 
endif
goto Main
end
 
Última edición:
Antes que nada un saludo a todos los que dan estos buenos aportes en el foro, quisiera que Dario o Lubeck me pudiesen ayudar con una idea de manejar el PWM para generar frecuencias a 38Khz, tengo el manual PicBasic pero no me ayuda mucho pues necesito una respuesta concreta, directa para generar esas frecuencias. O quizas si uso el generador de frecuencias FREQOUT tambien se pueda lograr? :confused: :confused: la verdad aun estoy confundido en esa parte. Aprendiendo a generar esas frecuencias con el mismo PIC me evitaria montar un NE555 a la hora de elaborar algun circuito electronico con PIC.
 
Si estoy en lo correcto o no mis amigos pues acepto sus opiniones :LOL: que de verdad las necesito, leyendo el articulo que me envio mecatrodatos y leyendo lo de lubeck, si mal no entendi creo que esta es la programacion para configurar el pic en modo de emitir frecuencias a 38Khz:


PBP Código:

'Configuración de PWM de hardware para el funcionamiento38KHz.

DEFINE OSC 4
DEFINE LOADER_USED 1 'para la programación decargador de arranque

INICIO:
TRISC.2 = 0 ' CCP1 (PortC.2 = Output)
PR2 = 25 ' Set PWM Período de aproximadamente 38KHz
CCPR1L = 13 'PWM conjunto de ciclo de un 50%
CCP1CON = %00001100 ' 'Modo PWM Seleccione
T2CON = %00000100 ' Timer2 = ON + 1:1 prescale
GOTO INICIO
END

Nada mas con este codigo realice el circuito en Proteus y use el osciloscopio para medir la frecuencia y me genera alrededor de los 38KHz por el puerto PORTC.2, tengo entendido que el dato que sigue para la parte de SEROUT seria para mandar al pic informacion modulada a traves de los 38KHz, asi como esta en el codigo original:

DEFINE LOADER_USED 1'para la programación decargador de arranque
DEFINE OSC 4
TRISC.2 = 0 ' CCP1 (PortC.2 = Output)
PR2 = 25 ' Set PWM Período de aproximadamente 38KHz
CCPR1L = 13 'PWM conjunto de ciclo de un 50%
CCP1CON = %00001100 ' 'Modo PWM Seleccione
T2CON = %00000100 ' Timer2 = ON + 1:1 prescale
TRISB.0 = 0

ADDRESS VAR BYTE
DAT VAR BYTE
ID VAR BYTE
ADDRESS = 10
ID = 25

BEGIN:
FOR DAT = 0 TO 255
SEROUT PORTB.0,4,[ID,ADDRESS,DAT]
PAUSE 100
NEXT
GOTO BEGIN
END

Aqui les dejo el circuito para simular en proteus y el codigo compilado de una vez, echenle un vistazo para ver si es correcto que el pic genera dicha frecuencia, pueden compararlo con el circuito que guardare dentro de la carpeta NE555 que esta configurado para generar entre 34 a 40 Khz, ya lo he probado en la vida real y funciona para receptores de dichas frecuencias.

Otra cosa importante, les sugiero que reediten el archivo PBP y lo vuelvan a compilar, nose porque genera error, pero esta bien programado, bueno amigos espero que me puedan ayudar con esa duda y me hagan ese gran favor de ojear y probar el diseño para saber si estoy o no en lo correcto. :D
 

Adjuntos

  • Diagrama del PIC y el NE555, archivos PBP compilados.rar
    40.9 KB · Visitas: 164
Hola amigos,
He leído y aprendido mucho en este foro, pero ahora tengo un problema (de novato) que no logro entender.
Deseo hacer un sistema para variar la luminosidad de leds, que tiene dos etapas: a) generar números 0-255 mediante un potenciómetro, b) aplicar estos números a PWM para variar el ancho del pulso.
Estoy en la etapa de leer el potenciómetro, adjunto el circuito en proteus y el programa en MStudio, PIC 16F84A.
EL PROBLEMA: Cuando voy subiendo el valor del potenciónmetro todo OK hasta 255. Cuando comienzo a bajar, desde 255 hasta 100 todo bien, pero a partir de ahí sigue mostrando tres dígitos, p.ej. si debe leer 90 indica 904; 85-> 853.
Pensé que era problema de la simulación de proteus, armé el circuito en experimentor Y PASA LO MISMO. Ahora si reseteo cuando tengo la lectura "904", aparece 90, que sería la correcta, luego el problema está en el LCD. OTRA: he dimensionado la variable como word y como byte y es lo mismo...(como puede indicar 904 si la variable es byte???) Debe ser algo que estoy haciendo mal con el LCD... HELP PLEASE!!
Aquí el código para que no se molesten en descomprimir los adjuntos:

' LCD PIN del 16F84A
' DB4 RA0
' DB5 RA1
' DB6 RA2
' RB7 RA3
' E RB3
' RS RA4
'
' DEFINICIONES
'
B0 var byte
'
' PROGRAMA PRINCIPAL
'
TRISA = 0 ' PORTA configurado como salida
TRISB = %00000001 ' PORTB configurado como salida salvo RB0
PAUSE 500 ' Espera 0,5 s para inicializar el LCD


LCDOUT $FE,1 ' Borra todo en el LCD
RPT:
b0=0 ' Rótulo para repetir
pot portb.0,255,b0
LCDOUT $FE,2 ' Manda cursor a ppio. línea
LCDOUT "lect ", dec B0 ' Muestra el valor en decimal

PAUSE 100 ' Espera 1 segundo

GOTO RPT ' Repite
END ' Fin del programa
 

Adjuntos

  • Leer potenc_con POT.rar
    31.2 KB · Visitas: 138
EDITO:
Encontré el problema: aparentemente no le daba tiempo de inicializar el LCD, coloque el PAUSE dentro del loop de escritura e hice otros pequeños cambios. Lo que va a continuación está funcionando correctamente en experimentor. Lo agrego por si es útil a algún otro novatito...

' PROGRAMA PRINCIPAL
'
TRISA = 0 ' PORTA configurado como salida
TRISB = %00000001 ' PORTB configurado como salida salvo RB0
PAUSE 500 ' Espera 0,5 s para inicializar el LCD


LCDOUT $FE,1 ' Borra todo en el LCD
RPT: ' Rótulo para repetir
lect=0
pot portb.0,255,lect
pause 500
LCDOUT $FE,1 ' Manda cursor a ppio. línea
LCDOUT "lect ", #lect ' Muestra el valor en decimal
GOTO RPT ' Repite



Gracias igual y saludos!!
 
hola, me gustaria saber que editor y compliador usas , ya que yo tengo un programa llamado proton, pero no me funcionan tus ejemplos por error de sintaxis

Que tal amigos uno de los lenguajes mas facil para programar micros es el basic pro sin despreciar el C por lo que abierto este hilo para empezar a ejecutar programas sencillos hasta llegar a los mas complejos.

miren lo facil que es prender un led con un pic 16f84A :

Código:
@ device xt_osc  ; oscilador externo XT
define osc 4     ; especifica que se va a utilizar uno de 4 Mhz

led var portb.0                       ; asignamos led a puerto RB0

inicio:

HIGH  led                               ;asigna  un 1 logico 
PAUSE 500                              ; tiempo de espera de 500mls
LOW  led                                ; apaga led

este es un ejemplo sencillo ire anexando el codigo fuente y su respectiva simulacion en proteus de todos los realizados en este hilo.

Hola amigo, me gustaria saber que edityor y compilador usas, ya que yo tengo un programa llamado proton , y no me funciona ninguno de estos proyectos, siempre me da error de sintaxis
 
Última edición:
Montoya8332

El titulo del thread te lo dice perfectamente y sin lugar a dudas: Pic Basic Pro , en cambio tu pruebas en otro Basic de otro proveedor Proton Basic !!!.-

Saludos, JuanKa.-
 
Montoya8332:
E usado proton y para mandar 1logico pones PORTB.0=1, mientras que en microde pone HIGH PORTB.0.
Ambos son programas en basic pero con diferente sintaxis
 
Atrás
Arriba