Programas hechos en MPLAB

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. :cool:
 
Última edición:
¿Por qué no me funciona con este PIC?
Lo hago con otro y sale todo bien, pero con el 16F883 no me anda.
 

Adjuntos

  • 16f883.rar
    6 KB · Visitas: 8
  • pic 16f883.rar
    576 bytes · Visitas: 7
Última edición por un moderador:
¿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.
 
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)
 
¿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:
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);
}
 

Adjuntos

  • Contador 0-9.jpg
    Contador 0-9.jpg
    70.8 KB · Visitas: 9
Última edición por un moderador:
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.
 
Última edición:
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...



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!



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!
 

Adjuntos

  • not have CCS.jpg
    not have CCS.jpg
    26.4 KB · Visitas: 8
  • Installed CCS.jpg
    Installed CCS.jpg
    167.2 KB · Visitas: 8
  • None found CCS C.jpg
    None found CCS C.jpg
    84.6 KB · Visitas: 8
  • Si se pudo.jpg
    Si se pudo.jpg
    71 KB · Visitas: 10
Última edición:
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.
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
 
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
 
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:
PHP:
    list    p = 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 alto, ir a "enciende_led"
    goto    salir                ; Es bajo, ir 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
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.
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
 
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. :apreton:

Salu2
 
Atrás
Arriba