Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

12/01/2015 #501

Avatar de callecuatro1976

Consulta: ¿Cómo visualizo el lcd en el pic16f883 y cómo declaro el adc?
12/01/2015 #502
Moderador

Avatar de D@rkbytes

callecuatro1976 dijo: Ver Mensaje
Consulta: ¿Cómo visualizo el lcd en el pic16f883 y cómo declaro el adc?
¿En qué lenguaje y con qué compilador?
MPLAB es un entorno de desarrollo integrado (IDE) que soporta varios compiladores.
13/01/2015 #503

Avatar de callecuatro1976

en c con el ccs
13/01/2015 #504
Moderador

Avatar de D@rkbytes

callecuatro1976 dijo: Ver Mensaje
en c con el ccs
Pues entonces no entiendo cuál es el problema.
Declaras el PIC, la palabra de configuración y la frecuencia de trabajo.
Luego la librería que usarás para la pantalla LCD.

En el void main estableces la configuración para el ADC, creas tus variables y fórmulas y muestras el resultado.

La verdad es que no entiendo el motivo de la pregunta, pues es algo muy sencillo.

Con tan solo escribir: setup_adc_ports(parámetros); Ya te olvidas de configurar el registro ADCON0
Con escribir: setup_adc(parámetros); Te olvidas de configurar el registro ADCON1
Con escribir: set_adc_channel(canal); Te olvidas de configurar el registro ANSEL o el relacionado a la selección del canal.
Luego lees el canal seleccionado: Variable = read_adc(Parámetros opcionales);
Resultado = (Mi Fórmula usando el valor de "Variable");
Y con escribir: printf(lcd_putc,"Resultado: %XX",Resultado); Ya muestras el resultado en pantalla.

El compilador de CCS hace muchas configuraciones por ti, así que prácticamente no importa el PIC mientras sea un PIC16 con ADC.

Aparte, en el foro existen muchos ejemplos sobre eso para darte una idea.
14/01/2015 #505

Avatar de callecuatro1976

¿Por qué no me funciona con este PIC?
Lo hago con otro y sale todo bien, pero con el 16F883 no me anda.
Archivos Adjuntos
Tipo de Archivo: rar 16f883.rar (6,0 KB (Kilobytes), 6 visitas)
Tipo de Archivo: rar pic 16f883.rar (576 Bytes, 5 visitas)
14/01/2015 #506
Moderador

Avatar de D@rkbytes

callecuatro1976 dijo: Ver Mensaje
¿Por qué no me funciona con este PIC?
Lo hago con otro y sale todo bien, pero con el 16F883 no me anda.
Porque estás declarando usar todos los pines con ADC como análogos y tienes conectada la pantalla en el puerto B.
Los pines del PORTB <5:0> tienen conversores y si están en modo análogo, la pantalla no va a funcionar.

Cambia: setup_adc_ports(all_analog); por: setup_adc_ports(sAN0,sAN3); que son son los canales que usarás.

Notas:
En el código estás declarando una frecuencia de 8MHz y en la simulación tienes 4MHz.
Para ese PIC el compilador establece el puerto B para los pines de la pantalla.
Por lo tanto, ésto no tiene caso ponerlo: #define use_portb_lcd true
Y el fuse XT también sale sobrando cuando usas ésto: #use delay (internal=8,000,000)

Si vas a usar ese tipo de declaración, mejor usa la siguiente:
#fuses NOFCMEN, NOIESO
#use delay (internal = 8MHz)

Tampoco tienes conectado el pin 1 (RE3/MCLR/Vpp) y no tienes declarado no usarlo. (Únicamente entrada)
En la simulación puede funcionar si no es llevado a +5V. Pero físicamente al no tener conexión puedes tener problemas.
15/01/2015 #507

Avatar de callecuatro1976

Cambia: setup_adc_ports(all_analog); por: setup_adc_ports(sAN0,sAN3); que son son los canales que usarás.


me volvia loco aca setup_adc_ports(sAN0,sAN3); va con una barra o raya en el medio no con coma (san0|san3)
15/01/2015 #508
Moderador

Avatar de D@rkbytes

callecuatro1976 dijo: Ver Mensaje
Me volvia loco acá: setup_adc_ports(sAN0,sAN3); va con una barra o raya en el medio no con coma (san0|san3)
Cierto. Eso pasa al escribir código por aquí, se llegan a olvidar algunos formatos.

Espero que si hayas podido hacer funcionar tu circuito.
16/01/2015 #509

Avatar de callecuatro1976

si esta bien puede hacerlo funcionar y estoy aprendiendo bastante gracias al tiempo que dedican ustedes en el foro.
24/09/2015 #510

Avatar de rockoztar

¿Qué tal? ¿Cómo están?

He estado viendo algunos de los programas que se han puesto aquí, pero siempre encuentro que para declarar las condiciones de inicio o configuración del PIC, ponen #FUSES

Como pueden ver en mi imagen, al poner #FUSES, creo que no se detecta por el MPLAB y también el Delay parece como si no lo detectara.

Soy nuevo en esto de los PIC's y también en el MPLAB, no he hecho algún programa, pero quiero probar los que ya están hechos para el PIC16F628A.

En esa misma imagen había leído que puedo configurar las salidas, oscilador y diferentes funciones del PIC, en la parte de "configuration bits", por eso agrego eso.

Las preguntas son:
¿Funciona con #FUSES? ¿El Delay funcionará con esa programación? ¿Y cómo genero el .hex?

Saludos. Espero me tengan un poco de paciencia. Soy nuevo con esto.

Gracias!

He visto que ayudan a todos, por eso recurrí aquí.

El programa que copié de aquí, es el siguiente:
Código PHP:
///////////////////////////////////////
//AUTOR:JORGE ARTURO RODRIGUEZ HERNANDEZ
//TITLE;CONTADOR 0 A 9
//DATE:23/ABRIL/2009
///////////////////////////////////////

//CONFIGURACION///////////////////
#include<16f628a.h>
#fuses INTRC_IO,NOWDT,NOLVP,MCLR,NOPROTECT
#use delay(clock=4000000)


//INICIO DEL PROGRAMA///////////////
void main(void){

//VARIBALES///////////////////////////
    
int mostrar[]={0b11000000,0b11111001,0b10100100,0b10110000,
                   
0b10011001,0b10010010,0b10000011,0b11111000,
                   
0b10000000,0b00011000};
    
int contador;
//CONFIGURACION E/S///////////////

    
set_tris_b(0x00);
    do{
        for(
contador=0;contador<=9;++contador){
            
output_b(mostrar[contador]);
            
delay_ms(1000);
        }
    }while(
TRUE);

Imágenes Adjuntas
Tipo de Archivo: jpg Contador 0-9.jpg (70,8 KB (Kilobytes), 9 visitas)
25/09/2015 #511
Moderador

Avatar de D@rkbytes

El programa se debe compilar tal cual está, pero todo parece indicar que no estás usando el compilador de CCS.
¿Tienes instalado mediante MPLAB X el plugin para PIC C Compiler? Select Compiler.jpg

En ésta imagen no aparece porque ya lo tengo instalado. Available Plugins.jpg

Sigue las instrucciones de instalación que se irán mostrando.
Nota: Si te aparece una advertencia de que el plugin no está certificado, acepta y continúa con la instalación.

En versiones anteriores a MPLAB X 3.05 con instalar el Plugin bastaba, ahora se tiene que instalar y seleccionar en el menú "Tools\Plugins" Sección "Available Plugins"

Para crear el archivo ejecutable .hex, lo debes hacer desde el menú "Run" Opción "Build Main Project" Build Main Project.jpg

Y si la compilación marcha bien, se debe generar el archivo .hex. Archivo Hex.jpg
Éste se crea dentro una sub carpeta llamada "production" dentro de la carpeta "dist" de tu proyecto.
Pero me parece que el directorio de salida es configurable.

Finalmente, cuando la compilación sea exitosa, verás lo siguiente en la ventana inferior del entorno. (Output)Main Project MPLABX.jpg

Nota: El programa compilado es el que mostraste.
25/09/2015 #512

Avatar de rockoztar

Que tal D@arkbytes, gracias por tu respuesta, hice lo que me dijiste paso a paso... pero despues de que se instalo el plugin y se abrio el MPLAB salio este mensaje...

---------- Actualizado después de 2 minutos ----------

Y quise crear un nuevo proyecto para ver si salia habilitado el nuevo plugin y aparece asi...

Aparece instalado... pero a la hora de seleccionarlo dice que no esta...

Que puedo hacer con este problema?
Instalo el demo que me dice del CCS?


Gracias por las respuestas!

---------- Actualizado después de 37 minutos ----------

Pude resolver el problema que tenia con el plugin... tuve que bajar el demo que me decia... Lo instale y volvi a abrir el MPLAB y ya quedo configurado... adjunto una imagen para que vean que funcionó.

Muchas gracias por la respuesta... seguire haciendo mas preguntas... porque necesito hacer un programa de un semaforo interactivo con varias funciones... Después les voy pidiendo ayuda en lo que no pueda.

De nuevo muchas gracias por todo!
Imágenes Adjuntas
Tipo de Archivo: jpg not have CCS.jpg (26,4 KB (Kilobytes), 8 visitas)
Tipo de Archivo: jpg Installed CCS.jpg (167,2 KB (Kilobytes), 8 visitas)
Tipo de Archivo: jpg None found CCS C.jpg (84,6 KB (Kilobytes), 8 visitas)
Tipo de Archivo: jpg Si se pudo.jpg (71,0 KB (Kilobytes), 10 visitas)
10/06/2016 #513


Programas hechos en MPLAB
Hola amigos. Les cuento que estoy en los primeros pasos de programación de PIC y estoy con un problemita en mi programa.
Ya lo he hecho y copilado, luego lo cargo al PIC pero al momento de la prueba no funciona como deseo.

La idea es que con un PIC16F84A, yo le ingrese un pulso de 5 V al puerto B en el pin 7 y me encienda un LED conectado al puerto B en el pin 0, quede prendido por unos segundos y luego se apague esperando una nueva señal en el pin 7.

Lo que en realidad me sucede a mi cuando lo pruebo, es que el LED se enciende cuando aplico los 5 V en el pin 7 y cuando saco los 5 V en el pin 7, el led se apaga.

Les cuento que en el simulador del MPLAB me funciona perfecto.
Muchas gracias y dejo el código para que lo revisen.

Saludos.
Código PHP:
;=================================================== 
list   
P=PIC16F84A      Micro PIC16F84A
;=============================================================
w             equ   00
reg1          equ   0d
status        equ   03
ptob         equ   06
ptoa          equ   05
trisa         equ   90
trisb         equ   86
t1            equ   0e
grueso        equ   100000
;=============================================================
c             equ   0
z             equ   2
rp0           equ   5
rp1           equ   6
;==============================================================
reset         
              org   0
              bcf   status
,rp0
              bcf   status
,rp1
              movlw  0x80
              tris  ptob
              bcf   status
,rp0
;===========================================================
inicio        btfsc   ptob,7
              
goto    enciende
              
goto inicio
;=============================================================
enciende
              bcf    status
,rp1
              movlw   0x80
              tris   ptob
              bcf     status
,rp0
              movlw  01
              movwf   reg1
              movf   reg1
              movwf   ptob
              call demora
demora        movlw   grueso
              movwf   t1
tt1           decfsz   t1
              
goto    tt1
              movlw   00
              movwf   ptob
              
goto    reset
         
              
              end 
10/06/2016 #514

Avatar de Daniel Meza

Hola.

Enhorabuena por la iniciativa, pero veamos. Hay varios detalles en tu programa:

1- TRIS no es una instrucción en esta familia de micros, eso de entrada indica que quizá no tengas bien configurada la selección del dispositivo en el compilador.

2- En el bloque de la etiqueta reset veo que pretendes configurar las E/S, eso se hace por medio de los registros TRISA y TRISB (0-Salida, 1-Entrada). Estos registros se encuentran en el banco 1 de RAM y tu previamente estas seleccionando el banco 0 (ambas instrucciónes anteriores bcf STATUS,RP0).

3- La llamada a la rutina de demora está algo "exótica" pues la rutina es parte del programa principal.

Como ves son varios puntos a tratar, te recomiendo que leas la casi biblia de los PIC's 16F "PIC6F84 desarrollo práctico de aplicaciónes", ahí ahondarás en todos estos detalles que te comenté.

Saludos
10/06/2016 #515
Moderador

Avatar de D@rkbytes

flaker26 dijo: Ver Mensaje
La idea es que con un PIC16F84A, yo le ingrese un pulso de 5 V al puerto B en el pin 7 y me encienda un LED conectado al puerto B en el pin 0, quede prendido por unos segundos y luego se apague esperando una nueva señal en el pin 7.
Los detalles del programa ya te los mencionó Daniel, y el programa que quieres hacer es muy sencillo.
Pero sí te hace falta adentrarte más sobre el lenguaje ensamblador para PIC.

Esta es una forma sencilla de realizar ese proceso:
Código PHP:
    list    16f84a
    
include    p16f84a.inc
    __config _XT_OSC 
_WDT_OFF _PWRTE_ON
    
    errorlevel    
-302

#define    pin_entrada    PORTB,7
#define    pin_salida    PORTB,0

    
cblock    0x20
        cnt1
,cnt2,cnt3
    endc

    org    0x00

inicio
    bsf        STATUS
,RP0            Banco 1
    movlw    
b'11111110'            RB0 como salida.
    
movwf    TRISB
    bcf        STATUS
,RP0            Banco 0
    bcf        pin_salida            
"pin_salida" en 0 al iniciar.
    
programa
    btfsc    pin_entrada            
Comprobar el estado de "pin_entrada" (Saltar si es cero)
    goto    
enciende_led        Es altoir a "enciende_led"
    
goto    salir                Es bajoir a "salir"
enciende_led
    bsf        pin_salida            
Poner en 1 "pin_salida"
    
call    retardo_2s            Llamar a la rutina "retardo_2s"
    
bcf        pin_salida            Poner en 0 "pin_salida"
salir
    
goto    programa

retardo_2s    
; @ 4 MHz.
1999996 ciclos
    movlw    0x11
    movwf    cnt1
    movlw    0x5D
    movwf    cnt2
    movlw    0x05
    movwf    cnt3
retardo_2s_0
    decfsz    cnt1
,f
    
goto    $+2
    decfsz    cnt2
,f
    
goto    $+2
    decfsz    cnt3
,f
    
goto    retardo_2s_0
4 ciclos (Incluyendo la llamada)
    return

    
end 
flaker26 dijo: Ver Mensaje
Les cuento que en el simulador del MPLAB me funciona perfecto.
Aparte de los problemas en tu programa, eso puede ser debido a que no estás incluyendo la palabra de configuración.
Entonces el compilador usará la que tiene por defecto y será con _RC_OSC (Oscilador RC)
El simulador no toma en cuenta ese importante detalle, tan solo la frecuencia de operación.
Por eso muchos programas funcionan en el simulador, y no físicamente.
Daniel Meza dijo: Ver Mensaje
1- TRIS no es una instrucción en esta familia de micros, eso de entrada indica que quizá no tengas bien configurada la selección del dispositivo en el compilador.
TRIS, si es una instrucción de esta familia de PIC con referencia al registro que se especifique, pero desde hace varios años ya es obsoleta.
Se puede seguir utilizando, aunque el compilador mostrará una advertencia sobre su uso.
MPASM dijo:
Warning[224] Use of this instruction is not recommended.
Ahora se recomienda usar la librería del PIC a usar, en este caso; "P16F84A.INC"
Ya que ahí es donde se encuentra la definición y dirección de puertos y registros. P.E. TRISB
11/06/2016 #516

Avatar de Daniel Meza

D@rkbytes dijo: Ver Mensaje

TRIS, si es una instrucción de esta familia de PIC con referencia al registro que se especifique, pero desde hace varios años ya es obsoleta.
Se puede seguir utilizando, aunque el compilador mostrará una advertencia sobre su uso.
Bien, esto si lo he aprendido hoy, sabía que existía, incluso la he usado pero para la familia 12FXXX. Entonces como tal, algunos miembros de la familia 16F si la pueden ejecutar pero no es recomendable.

Salu2
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.