Programas hechos en MPLAB

ralego2003 dijo:
Hola que tal george.manson.69 tengo una duda, con respecto a la conexión de RF entre PC y PIC quisiera saber si se puede establecer la comunicación sin utilizar el PIC del transmisor, es decir poder mandar los datos directamente del MAX232 ya que no requiero de la contraseña.

Muchas gracias y espero tu respuesta !
no se puede ya que el programa de "Control of a robot" te manda una contraseña, y el programa que contiene el pic resive esa contraseña y activa el robot...tendrias que hacer otro programa parecido al control of a robot pero sin contrseña...
 
ok george.manson.69 ya realice el programa solo que hay un problema, al parecer el circuito receptor toma mucha basura. ¿Es por eso que lo mandas 10 veces o como se puede solucionar ese problema? ya que con los decodificadores que mencionas anteriormente no sucede eso!!!
 
Ja ro no me he olvidado...es que ya entre a la escuela y pues no tengo mucho tiempo para conectarme y revisar dudas, estoy todo el dia en le escuela:(

cuando quiero compilar en pcw me dice ***error 18 "información.rtf.c" line 0(0,1): File can not be opened

¿que puede ser eso ?

mmm...pcw esta incorporado a mplab verdad? A lo mejor esta mal instalado, puede ser eso o puede ser que se alla borrado por accidente un archivo del programa de pcw
 
este es un simple circuito que capta 4 sensores de humedad y los valores seran proyectos a un lcd de 20x4.


Código:
///////////////////////////////////////
//AUTOR:JORGE ARTURO RODRIGUEZ HERNANDEZ
//TITLE;SENSORES
//DATE:28/AGOSTO/'09
///////////////////////////////////////
//CONFIGURACION///////////////////
#include<16F886.h>
#device ADC=8
#fuses INTRC_IO,NOWDT,NOLVP,MCLR,NOPROTECT
#use delay(clock=8000000)
#include<LCD420_PORTC.C>
#include<kbd_lib.C>
int PLANTA1,PLANTA2,PLANTA3,PLANTA4;
short DONE;
int KEY;
void config(void){
  set_tris_a(0x0F);
  set_tris_b(0xF0);
  port_b_pullups(0xF0);
  setup_adc(ADC_CLOCK_INTERNAL|VSS_VDD);
  setup_adc_ports(sAN0|sAN1|sAN2|sAN3);
  setup_comparator(NC_NC_NC_NC);
  disable_interrupts(GLOBAL);
}
void ADC_HECHO(void){
  while(DONE!=1){
   DONE=adc_done();
  }
}
void main(void){
  config();
  lcd_init();
  kbd_init();
START:
  lcd_gotoxy(1,1);
  lcd_putc("\f------SENSORES------");
  lcd_gotoxy(1,2);
  lcd_putc("ENTRAR A MEDIR LOS");
  lcd_gotoxy(1,3);
  lcd_putc("SENSORES:");
  lcd_gotoxy(9,4);
  lcd_putc("YES(A)");
  do{
   KEY=kbd_getc();
   if(KEY!=0){
    if(KEY=='A')
     break;
   }
  }while(TRUE);
  lcd_gotoxy(1,1);
  lcd_putc("\f------SENSORES------");
  do{
   set_adc_channel(0);
   delay_us(50);
   ADC_HECHO();
   PLANTA1=read_adc();
   set_adc_channel(1);
   delay_us(50);
   ADC_HECHO();
   PLANTA2=read_adc();
   set_adc_channel(2);
   delay_us(50);
   ADC_HECHO();
   PLANTA3=read_adc();
   set_adc_channel(3);
   delay_us(50);
   ADC_HECHO();
   PLANTA4=read_adc();
 
   PLANTA1=2*PLANTA1;
   PLANTA2=2*PLANTA2;
   PLANTA3=2*PLANTA3;
   PLANTA4=2*PLANTA4;
   lcd_gotoxy(1,2);
   printf(lcd_putc,"1.- %u C 2.- %u C ",PLANTA1,PLANTA2);  
   lcd_gotoxy(1,3);
   printf(lcd_putc,"3.- %u C 4.- %u C ",PLANTA3,PLANTA4);
   KEY=kbd_getc();
   if(KEY!=0)
    goto START;
  }while(TRUE);
}
 

Adjuntos

Bueno ya me he envolucrado con un chip en especial que es el pic18f2550 que es muy bueno para ya hacer cosas mas interesantes. Gracias a lo que he investigado en este foro

A especial a unos chavos que han aportado mucho, como es Meta, Moyano jonathan en un tema que habla de interfaz de USB. Gracias a esto he logrado comunicar por medio de este bicho a la computadora por USB.

Bueno primero que nada mostrare el programa hecho en CCS C.

Que hace una inicializacion por decirlo asi entre el pic y la compu por medio de USB.

A este se le conose como CDC (Comunication device class) que simula un puerto serial a una entrada USB de la computadora, poder asi hacer practicas sin necesidad de comprar un USB a SERIAL, este seria directamente al pic.

Bueno como ya exite un tema que proporciona Moyano jonathan que explica todo detelladamente sobre esta comunicación me basare simplemente hacer proyectos con este interfaz.

Código:
//=================================
//autor:jorge arturo rdz hdz
//titulo:CONEXION ENTRE USB y LAP
//fecha: 30/AGOSTO/2009
//=================================
#include <18F2550.h> // Definición de registros internos.
#fuses HSPLL,NOMCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,NOPBADEN
#use delay(clock=48000000) // Frecuencia máxima de trabajo.
#include "usb_cdc.h" // Descripción de funciones del USB.
#include "usb_desc_cdc.h" // Descriptores del dispositivo USB.
void main() {
 set_tris_b(0x00);
 output_b(0x00);
   usb_cdc_init(); // Configuramos al puerto virtual.
   usb_init(); // Inicializamos el stack USB.
 output_high(PIN_B0); //LED ROJO ENCENDIDO
 output_low(PIN_B1);  //LED VERDE APAGADO
   while(!usb_cdc_connected()) {} 
   // espera a detectar una transmisión de la PC (Set_Line_Coding).
   do{
      usb_task();
      if (usb_enumerated()){    // Espera a que el dispositivo sea enumerado por el host.
  output_low(PIN_B0);   //LED ROJO APAGADO
  output_high(PIN_B1);  //LED VERDE ENCENDIDO
         if(usb_cdc_kbhit()){   // En espera de nuevos caracteres en el buffer de recepción.
            if(usb_cdc_getc()=='x'){ //llego x?
               printf(usb_cdc_putc, "llego x.\n\r"); 
             }
            if(usb_cdc_getc()=='a'){ //llego a?
               printf(usb_cdc_putc, "llego a.\n\r");
 
             }
         }
       }
   }while (TRUE);
}
Bueno no explique como funciona el anterior, cuando se conecta aparecera y debe de aparecer para la simulación, un mensaje en la parte inferior derecha de la pantalla, una conexión (cuando conectamos un memoria aparce un dispositivo encontrado algo parecido) bueno le damos click ahí y debera aparecer la pantalla para poder intalar un driver entonces vamos hacer click en next, entonces buscaremos donde este instaldo el CCS C y buscamos la carpeta de drivers entonces la elegimos y entonces se encontrara tres driver entonces le daremos click al del medio para instalarlo. Y todo listo para simular, en este caso ya no usaremos el VIRTUAL SERIAL PORT ya que sera directo la comunicación. Entonces cualquier programa como hyperterminal u otro programa que hace comunicación serial lo abriremos siempre y cuando este conectado(en la simulación) el usb. Automáticamente detectara el COM donde esta el usb del pic. Y listo!!

Ahora esta practica consta de un teclado 4x4 y USB, que al presionar una tecla del teclado 4x4 aarecera en la pantalla donde este conectado el usb.

Código:
//=================================
//autor:jorge arturo rdz hdz
//titulo:CONEXION ENTRE USB y LAP
//fecha: 30/AGOSTO/2009
//=================================
#include <18F2550.h> // Definición de registros internos.
#fuses HSPLL,NOMCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,NOPBADEN
#use delay(clock=48000000)  // Frecuencia máxima de trabajo.
#include<kbd_lib.c>
#include "usb_cdc.h"   // Descripción de funciones del USB.
#include "usb_desc_cdc.h"  // Descriptores del dispositivo USB.
int KEY;
void config(void){
  set_tris_b(0xF0);
  port_b_pullups(0xF0);
  setup_comparator(NC_NC_NC_NC);
  setup_adc(ADC_OFF);
}
 
void main() {
 config();
 kbd_init();  //Configuramos el teclado
 usb_cdc_init(); // Configuramos al puerto virtual.
 usb_init();  // Inicializamos el stack USB.
 output_high(PIN_C0); //LED ROJO ENCENDIDO
 output_low(PIN_C1);  //LED VERDE APAGADO
   while(!usb_cdc_connected()) {} 
   // espera a detectar una transmisión de la PC (Set_Line_Coding).
   do{
      usb_task();
      if (usb_enumerated()){    // Espera a que el dispositivo sea enumerado por el host.
   output_low(PIN_C0);   //LED ROJO APAGADO
   output_high(PIN_C1);  //LED VERDE ENCENDIDO
   do{
    KEY=kbd_getc();
    if(KEY!=0){
     usb_cdc_putc(KEY);
    }
   }while(TRUE);
  }
   }while (TRUE); // bucle infinito.
}
Bueno para hacer la cosa mas interesante hice un programa en visual c# donde escribimos en una linea lo que se nos ocurra y lo enviamos a visualizar al lcd, el comando de borrado seria ”*”, por ejemplos queremos que borre la pantalla y escriba “*HOLA MUNDO” al hacer esto primero enviara el “*” para borrar la pantalla y luego escribira HOLA MUNDO en la primera linea del lcd.

Este es una imagen del programa Y el codigo que contiene el PIC.

Código:
//===============================
//AUTOR:JORGE ARTURO RDZ HDZ
//TITULO: USB + LCD
//FECHA: 30/AGOSTO/2009
//===============================
#include <18F2550.h> // Definición de registros internos.
#fuses HSPLL,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,NOPBADEN
// Fuses utilizados:
/*
HSPLL: utilizamos un cristal HS de alta velocidad, en conjunto con el PLL para generar los 48Mhz.
NOMCLR: Utilizamos reset por software, y dejamos el pin 1 del micro como entrada/salida digital.
NOWDT: No utilizamos el perro guardían.
NOPROTECT: Desactivamos la protección de código.
NOLVP: Desactivamos la programación a bajo voltaje.
NODEBUG: No entramos al modo debug.
USBDIV: signfica que el clock del usb se tomará del PLL/2 = 96Mhz/2 = 48Mhz.
PLL5: significa que el PLL prescaler dividirá en 5 la frecuencia del cristal. para HS = 20Mhz/5 = 4Mhz.
CPUDIV1: El PLL postscaler decide la división en 2 de la frecuencia de salida del PLL de 96MHZ, si queremos 48MHZ, lo dejamos como está.
VREGEN: habilita el regulador de 3.3 volts que usa el módulo USB
*/
#use delay(clock=48000000)  // Frecuencia máxima de trabajo.
#define use_portb_lcd TRUE
#include<LCD.C>
#include "usb_cdc.h"   // Descripción de funciones del USB.
#include "usb_desc_cdc.h"  // Descriptores del dispositivo USB.
char LETRA[];
void config(void){
  setup_comparator(NC_NC_NC_NC);
  setup_adc(ADC_OFF);
}
  
void main() {
 config();
 lcd_init();  //Configuramos el LCD
 usb_cdc_init(); // Configuramos al puerto virtual.
 usb_init();  // Inicializamos el stack USB.
 output_high(PIN_C0); //LED ROJO ENCENDIDO
 output_low(PIN_C1);  //LED VERDE APAGADO
   while(!usb_cdc_connected()) {} 
   // espera a detectar una transmisión de la PC (Set_Line_Coding).
   do{
      usb_task();
      if (usb_enumerated()){    // Espera a que el dispositivo sea enumerado por el host.
   output_low(PIN_C0);   //LED ROJO APAGADO
   output_high(PIN_C1);  //LED VERDE ENCENDIDO
   if(usb_cdc_kbhit()){
    LETRA=usb_cdc_getc();
    if(LETRA=='*'){
     lcd_putc("\f");
    }else{
     lcd_putc(LETRA);
    }
   }  
  }
   }while (TRUE); // bucle infinito.
}
 

Adjuntos

Última edición por un moderador:
hola de nuevo...vamos hacer otro circuito con USB, bueno este trata de algo my simple, es controlar 8 led por medio de USB, ya habia hecho algo parecido pero se trataba por puerto serial, y pues ahora lo cambie por el tal PIC18F2550 que tiene un USB 2.0 incluido :).

este es el programa que contiene el PIC18F2550 hecho con el CCS C.
Código:
//=================================
//autor:jorge arturo rdz hdz
//titulo:CONTROL DE 8 LED
//fecha: 30/AGOSTO/2009
//=================================

#include <18F2550.h> // Definición de registros internos.

#fuses HSPLL,NOMCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,NOPBADEN

#use delay(clock=48000000) // Frecuencia máxima de trabajo.

#include "usb_cdc.h" // Descripción de funciones del USB.
#include "usb_desc_cdc.h" // Descriptores del dispositivo USB.

void main() {

    int KEY;
    set_tris_b(0x00);
    output_b(0x00);
   usb_cdc_init(); // Configuramos al puerto virtual.
   usb_init(); // Inicializamos el stack USB.

    output_high(PIN_C0);    //LED ROJO ENCENDIDO
    output_low(PIN_C1);        //LED VERDE APAGADO
   while(!usb_cdc_connected()) {} 
   // espera a ser conectado
   do{
      usb_task();
      if (usb_enumerated()){          // Espera a que el dispositivo sea enumerado por el host.
        output_low(PIN_C0);            //LED ROJO APAGADO
        output_high(PIN_C1);        //LED VERDE ENCENDIDO
        if(usb_cdc_kbhit()){
            KEY=usb_cdc_getc();
            switch(KEY){
                case '1': output_toggle(PIN_B0); break;
                case '2': output_toggle(PIN_B1); break;
                case '3': output_toggle(PIN_B2); break;
                case '4': output_toggle(PIN_B3); break;
                case '5': output_toggle(PIN_B4); break;
                case '6': output_toggle(PIN_B5); break;
                case '7': output_toggle(PIN_B6); break;
                case '8': output_toggle(PIN_B7); break;
            }
        }
    }
   }while (TRUE); // bucle infinito.
}
 

Adjuntos

Última edición:
Hola ! . Una pregunta. Una vez que tenemos escrito el programa en el CCS ¿ se puede compilar directamente desde CCS y usar el .hex que nos da el programa para grabar el PIC?

Digo esto porque había escuchado que al programa CCS lo integran con Mplab y no se para que hacen esto.
 
Efectivamente.... el PIC solo entiende codigo maquina, y nosotros solo entendemos codigo de alto nivel, asi que la funcion del compilador (en este caso CSS) es traducir de codigo de alto nivel a codigo maquina, y el resultado es el archivo hex que es el que tienes que grabar en el PIC
 
Hola por fin he podido adquirir datos continuos desde el usb, bueno hize un pequeño programa que te registra la temperatura, cada 1 segundo, y lo guarda en una lista a la derecha, eset programa fue hecho en visual c#.

programa que contiene el pic.
Código:
//=================================
//autor:jorge arturo rdz hdz
//titulo:MEDIDOR DE TEMPERATURA
//fecha: 30/AGOSTO/2009
//=================================
#include <18F2550.h> // Definición de registros internos.
#device ADC=8
#fuses HSPLL,NOMCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,NOPBADEN
#use delay(clock=48000000) // Frecuencia máxima de trabajo.
#include "usb_cdc.h" // Descripción de funciones del USB.
#include "usb_desc_cdc.h" // Descriptores del dispositivo USB.
int TEMP;
char VALOR;
void main() {
 set_tris_b(0x00);
 set_tris_a(0x01);
 setup_adc(ADC_CLOCK_INTERNAL);
 setup_adc_ports(AN0);
 read_adc(ADC_READ_ONLY);
 output_b(0x00);
 usb_cdc_init(); // Configuramos al puerto virtual.
 usb_init(); // Inicializamos el stack USB.
 output_high(PIN_C0); //LED ROJO ENCENDIDO
 output_low(PIN_C1);  //LED VERDE APAGADO
   while(!usb_cdc_connected()) {};
   // espera a ser conectado
   do{
  usb_task();
  if (usb_enumerated()){    // Espera a que el dispositivo sea enumerado por el host.
   output_low(PIN_C0);   //LED ROJO APAGADO
   output_high(PIN_C1);  //LED VERDE ENCENDIDO
   delay_us(10);
   TEMP=read_adc();
   TEMP=2*TEMP;
         if(usb_cdc_kbhit()){   // En espera de nuevos caracteres en el buffer de recepción.
           VALOR=usb_cdc_getc();
    if(VALOR=='A'){
     usb_cdc_putc(TEMP);
    }
            }
         }
   }while (TRUE); // bucle infinito.
}
IMAGEN DEL PROYECTO.
 

Adjuntos

No se que pasa pero los archivos .hex que me genera el C Compiler no me funcionan cuando los grabo en el PIC. Debe ser que hay que configurar algo en el programa ¿no?
 
No se que pasa pero los archivos .hex que me genera el C Compiler no me funcionan cuando los grabo en el PIC. Debe ser que hay que configurar algo en el programa ¿no?

si debe ser algo del programa, e so mas seguro, asegurate que que al copilarlo este todo bien, que no tenga errores

mandame si quieres un programa hecho en C, y yo lo compilo
 
ya solucioné el problema. Gracias igual george.mason.69 . Era un problema del programa PICkit2, me estaba olvidando de ajustar la palabra de configuracion.

¡Que bueno que es programa en C ! te facilita un montón, aunque no sabes que tanto te va a ocupar el programa en la memoria.

Saludos.
 
Hola compañero, creo que podrás ayudarme...
...yo también estoy haciendo un control de temperatura. Con un PIC16F877 hago la conversion A/D de una PT100, y convierto los valores de 0-5V a 0-255 sin inconvenientes. Pero mi problema radica en que tengo que diseñar un software que levante la curva de temperatura. No tengo inconvenientes en la transmision de datos a la PC, pero no puedo graficar la curva en tiempo real (este es el gran problema). Estoy usando C# 2008 express. POR FAVOR SI ALGUIEN PUEDE DARME UNA MANO POR AMOR AL ARTE....JA!

PD: no importa que programa usar, lo que si importa es que necesito que se haga un archivo ejecutable para levantar la curva de datos (desde el port serie) en tiempo real.

Desde ya un gran abrazo!
 
hola ....es lo ue yo tambien queria hacer...pero pues no le se muy bien al C# y le pregunte a un amigo sobre graficar la temperatura en tiempo real, ebntonces me dijo, que deberia de usar JAVA cosa que no me involucrado...por el simple hecho de que es muy complejo...:(
 
Hola a todos, :DFelicitaciones George:D, este hilo es EXCELENTE, he realizado un 75% de los ejemplos que adjuntaste para ganar experiencia en el manejo de proteus, Mplab y CCS,;-) te hago una consulta, me podras indicar el lenguaje de programacion que usas, me parece que lo mencionas C# y habra alguna posibilidad de que adjuntes el codigo fuente en este lenguaje, de cualquier ejemplo que hayas realizado en comunicacion en USB?¿?¿
Desde ya te agradezco. Seguire el hilo. Gracias:)
 
Hola George 69 ,mira excelente el foro y los temas,esto me viene bien para empezar con USB,ya mismo tengo los componentes y me lo pongo a hacer,queria hacer el que maneja los 8 leds,pero una pregunta,ejecutando el .exe del proyecto,con ese programita visual ya deberia funcionarme o debo cargar algun otro archivo o algo en la pc,aclaro que uso el XP,en la pc me aparece algun otro puerto COM virtual? Gracias por la rta :D
 
Que palabras mas alentadoras y gentiles yo te felicito,pues yo tengo 54 y recien empece con el CCS C, yo solo vi algo de fortran 4 cuando me gradue en 1980 y con toda la ayuda de la red es mucho lo que estoy aprendiendo, Saudo desde la playas de West Palm...
Eddy.
 
Arriba