Programas hechos en MPLAB

Hice el circuito USB que maneja los 8 leds,grabo el .hex al micro,el programita en visual me detecta bien como port3 en la pc,bajo xp,cuando conecto la placa me hace el ruidito clasico "turu" del USB y aparece el globito con el nombre,me prende solo el led rojo en la placa,pero me pone el asistente para que busque el archivo que falta!!! que hago! como se llama el archivo que pide que busque y de donde lo saco!!! :confused::confused::confused: Gracias desde ya!
 
Hice el circuito USB que maneja los 8 leds,grabo el .hex al micro,el programita en visual me detecta bien como port3 en la pc,bajo xp,cuando conecto la placa me hace el ruidito clasico "turu" del USB y aparece el globito con el nombre,me prende solo el led rojo en la placa,pero me pone el asistente para que busque el archivo que falta!!! que hago! como se llama el archivo que pide que busque y de donde lo saco!!! :confused::confused::confused: Gracias desde ya!
Tienes el CCS C vdd? si lo tienes busca la carpaeta en archivos de programas PIC Cy luego entra y busca la carpeta de drivers y ahi habra tres archivos que son los drivers que hacen el interfaz de USB.

y saludos.
 
Disculpame las molestias,se me instalaron los driver,todo bien,en administrador de disp. me aparece como com4,el programita visual conecta el led verde,hace el ruidito "turun" al conectar pero no me aparece el globito con el nombre y sigue prendido el led rojo de la placa,o sea no hay comunicacion,que puede ser? disculpame la insistencia,pero es mi primer proyecto USB,es hasta que le agarre la mano,gracias!!!:D
 
A todos los amigos que usan el 18f4550.
Necesito ayuda... Estaba tentado en poner "urgente" pero se (jajaja) que todo es urgente en nuestra actividad... Asi es que... Aqui va: "urgente" necesito información de lo siguiente: Estoy haciendo un proyecto donde el pic18f4550 es la base de adquisicion de datos: Por una parte 1 puerto analogico que me lee por comparacion un sensor de presion mpx7500, y al mismo tiempo un sensor sht11 de sensirion, y ademas (para no quedarme corto) necesito leer un sensor de campo hall, y un encoder (estoy usando un encoder paso a paso si... Un motor pap como encoder (jajajaja)) por ello necesito si alguien puede darme una pauta a seguir... Porque usé varios ejemplos (llevo varios meses en esto) de mplab, de css de c18 en fin ya me perdí en la cantidad de información que bajé de internet.... Resumiendo... Que me conviene usar... Hid, bulk, cdc o que tucuimas ! Si es uno de estos si alguien podria ponerme un esqueleto de programa en c, en assambler o lo que sea... Para darle fin a este tema que me hace caer el pelo... Por otro lado si existe del lado del pc... Alguna libreria ocx para leer con vbasic... En fin... Me olvidaba... Estoy usando el usb para esto está claro no ?? Jajajaj la placa la tengo fabricada... No es la que está en internet porque la que bajé como modelo tenia fallas terribles, no es tan simple como lo pintan, tuve que ponerle condensadores en todas partes asi como resistencias para que no se tilde al !pasar la mano encima!!!! Jajajajajaj cosa de locos... Bueno... Lo hice extenso pero ni modo... Tendria que poner un blog de las desventuras de desarrollar un data aad. Por medio de usb...
Un saludo muy cordial a la gente que se dedica a esto... Son fenómenos y es durisimo encontrar información digerible... Es un reto de por sí.

Abrazos.
 
buenas gente...
hago el cuento corto...
quiero grabar en la eeprom interna del pic 16f84a usando el compilador C de CCS

y según manual y miles de paginas...

READ_CALIBRATION(n)
READ_EEPROM(address)
WRITE_EEPROM(address, value)

esas son los comando que hay que usar...
la cosa es que me compila todo si no le coloco el read_calibration... pero no funciona

cuando lepongo el read_calibration(n), me sale un error diciendo que no esta definido el READ_CALIBRATION...
y lo defini asi...

#define read_calibration 10
Fin = read_calibration (10);

el problema,,, (nose si se definirá asi)... es que me sale un error

error en la linea X blabla "expect ;"

que lo necesita aki..

#define read_calibration (aki) 10
:confused:
y no puedo hechar a andar el programa con la dichosa funcion...
la cosa es que segun manual es necesario calibrar la memoria para poder usarla (ya que es la memoria interna).

ojalá alguien me pueda ayudar, ya que esto me tiene un poco complicado...
he buscado ya hasta el aburrimiento en internet y nada, no he pillado una explicacion para esto.

bueno, saludos gente y gracias...
 
buenas, una consulta, ya que veo que has hecho programas grabando en la eeprom del pic...

lo que pasa es que he tratado de grabar en la eeprom y no he podido... creo que me falta configurar algo que no veo en el manual ni en internet...

ojala me puedan ayudar, aki el codigo:


Código:
#include <16f84a.h> //libreria del pic
#use delay (clock=4000000) //frecuencia del cristal k se va a ocupar.
#fuses HS,NOWDT,NOPUT,NOPROTECT

#byte port_b=0x06
#byte port_a=0x05
#byte k=0x0c
float D,I,L;




void main()
{



   set_tris_b(0); //declaramos el puerto b como salida
   port_b=0;//el valor inicial es 0
   set_tris_a(1);//declaramos el puerto a como entrada
   port_a=0;




      while(1)
      {
      output_low(pin_b1);
      output_low(pin_b0);
      if(input(pin_a0)==1)
         {
         I=0;
         While(input(pin_a0)==1)
            {
            output_high(pin_b0);
            #use delay(clock=4000000)
            delay_us(50);
            I=I+1;
            }
         }

//grabar eepromm

#define LAST_VOLUME 10

write_eeprom(0x04,I);

#use delay (clock=4000000)
delay_ms(50);


//#define LAST_VOLUME 10
L=read_EEPROM(0x04);










      while(input(pin_a1)==1)
         {
         D=0;
         //output_high(pin_b1);
         while(D<=L)
            {
            output_high(pin_b1);
            #use delay(clock=4000000)
            delay_us(50);
            D=D+1;
            }

         }
      }
}
basicamente en un temporizador, en el que el tiempo que temporiza esta configurado por un pulsador en la entrada A0... y la partida del temporizador se la da A1.

bueno, eso es... ojalá me puedan ayudar gracias
 
Última edición por un moderador:
hola quisiera saber si alguien puede ayudarme tengo q hacer un proyecto para la escuela se trata de que con un pic controle un servo motor que cada 3 minutos gire a 180° y despues regrese a 0° otros 3 minutos y asi lo siga haciendo quien me puede ayudar???
 
Hola george.manson.69

Estoy probando el codigo USB escrito por ti, para comunicar USB del micro con el PC (CDC).
Programo el Pic con tu codigo, conecto el USB al PC, me reconoce el hardware, busco en la carpeta .../PICC/Drivers/ encuantra 3 ficheros, pero ninguno funciona, creo que es por el win7.

¿Puedes ayudarme?

Un saludo y felicidades por los proyectos, son muy utiles.
 
yO LO PROBE CON WINXP Y FUNCIONA...A LO MEJOR PODRIA SER ESO!!! EN LA CARPETA DONDE ESTAN LOS DRIVER HAY UN ARCHIVO QUE MODIFICAS...MRA ABRE EL ARCHIVO, "usb_desc_cdc.h" ve hasta abajo y encuentra "start device descriptors"

y busca en la linea

0x61,0x04, //vendor id (0x04D8 is Microchip, or is it 0x0461 ??) ==8,9
0x33,0x00, //product id ==10,11

esos numeros hexadecimales cambialos por estos

0:LOL:8,0x04, //vendor id (0x04D8 is Microchip, or is it 0x0461 ??) ==8,9
0x0A,0x00, //product id ==10,11

a ver si funciona!!!

pero no se te olvide hacer una copia de seguridad!!!!
 
Si te refieres al primer problema, era simplemente el cristal de 20Mhz. Nunca me habia pasado que fallara 2 cristales recien comprados.
Quité uno de un circuito viejo y a funcionar a la primera.

Luego tube problemas con el debug, y lo solucioné poniendo 2 resistencia pulldown en el PGC y PGD del programador, ahora funciona perfecto.

Un saludo.
 
Este proyecto lo subo porque se me hace que es muy interesante, ya que puedes controla 4 servomotores via RS232.

Aqui se encuetra el programa el microcontrolador en CCS C

Código:
///////////////////////////////////////
//AUTOR:JORGE ARTURO RODRIGUEZ HERNANDEZ
//TITLE;CONTROL DE 4 SERVOS
//DATE:20/NOVIEMBRE/'09
///////////////////////////////////////
//CONFIGURACION///////////////////
#include<16F628A.h>
#include<math.h>
#fuses HS,NOWDT,NOLVP,MCLR,NOPROTECT
#use delay(clock=20000000)
#use rs232(uart1,baud=2400)
//VARIABLES QUE SE USAN EN EL PROGRAMA
int x,A=0,B=0,C=0,D=0;
float y;
long zA=0,zB=0,zC=0,zD=0;
//CONFIGURACION DEL MICROCONTROLADOR
void config(void){
  set_tris_a(0x20);
  set_tris_b(0x02);
  setup_comparator(NC_NC_NC_NC);
  enable_interrupts(INT_RDA);
  enable_interrupts(GLOBAL);
}
//INTERRUPCION POR RESEPCION
#INT_RDA
void RS232_receive(void){
  if(kbhit()){
   x=getc();
   switch (x){
    case 'A':
     A=getc();
     break;
    case 'B':
     B=getc();
     break;
    case 'C':
     C=getc();
     break;
    case 'D':
     D=getc();
     break;
   }
  }
  y=(A*6.6666666e-6)+0.9e-3;
  zA=y*1000000;
  y=(B*6.6666666e-6)+0.9e-3;
  zB=y*1000000;
  y=(C*6.6666666e-6)+0.9e-3;
  zC=y*1000000;
  y=(D*6.6666666e-6)+0.9e-3;
  zD=y*1000000;
}
//INICIO DEL PROGRAMA PRINCIPAL
void main(void){
  config();
 do{
  output_high(PIN_A0);
  delay_us(zA);
  output_low(PIN_A0);
  output_high(PIN_A1);
  delay_us(zB);
  output_low(PIN_A1);
  output_high(PIN_A2);
  delay_us(zC);
  output_low(PIN_A2);
  output_high(PIN_A3);
  delay_us(zD);
  output_low(PIN_A3);
  delay_us(80000-zA-zB-zC-zD);
 }while(TRUE);
}
nota: se usa el virtual serial port para poder simular puertos seriales
 

Adjuntos

Última edición:
Hola aqui esta un proyecto simple donde manejas 6 display de 7 segmentos.

Aqui etsa el codigo que contiene el PIC.

Código:
///////////////////////////////////////
//AUTOR:JORGE ARTURO RODRIGUEZ HERNANDEZ
//TITLE;LETRERO CON DISPLAY DE 7 SEGMENTOS
//DATE:18/JUNIO/'09
///////////////////////////////////////

//CONFIGURACION///////////////////
#include<16f887.h>
#fuses HS,NOWDT,NOLVP,MCLR,NOPROTECT,NOPUT
#use delay(clock=20000000)
#use rs232(uart1,baud=2400)

//DEFINIMOS PINES

//#define    EN1    PIN_C0 
//#define    EN2    PIN_C1
//#define    EN3    PIN_C2    NO SE PORQUE LO PUSE
//#define    EN4    PIN_C3  PORQUE NO SE USAN
//#define    EN5    PIN_C4
//#define    EN6    PIN_C5

//AGREGAMOS VARIABLE FIJAS
const int LETRA[]={    0b00001001,    //H
                    0b01000000,    //O
                    0b01000111,    //L
                    0b00001000, //A
                    0b11111111, //SPACE
                    0b11111111, //SPACE 
                     0b11111111, //SPACE
                    0b11111111, //SPACE
                    0b11111111, //SPACE
                    0b11111111, //SPACE
                    0b11111111};//SPACE

//AGREGAMOS VARIABLES

unsigned int x=0;
signed int y=6,z=6,n=1,VALOR=100;
unsigned long i;


//CONFIGURACION DEL PIC

void config(void){

        set_tris_c(0x80);                //RC0-RC6 SALIDAS, RC7 ENTRADAS
        set_tris_d(0x00);                //RD0-RD7 SALIDAS
        setup_comparator(NC_NC_NC_NC);    //OPAM APAGADOS
        setup_adc(ADC_OFF);                //DAC APAGADO
}

void main(void){
        
        config();    //HABLAMOS A LA CONFIGURACION DE CONFIGURACION
        output_c(0x00);
        while(TRUE){
            for(i=0;i<=VALOR;i++){                //ciclo de temporizacion
                    for(y=z;y<=6;y++){            //ciclo donde activa cada display
                            bit_set(*7,y);        //con su correspondiente letra
                            output_d(LETRA[x]);
                            delay_ms(1);        //Tiempo de vizualizacion
                            bit_clear(*7,y);    //Apaga el display antes Prendido
                            x++;                //Incrementa para saber donde debe
                            if(x>=n) x=0;        //primero empezar el principo de la palabra
                    }
            }
            VALOR=VALOR-10;                        //Cuando valla mas letras mostradas se va a tardar
            if(VALOR<=9) VALOR=100;                //mas, entonces el tiempo debe de disminuir para
            z--;                                //una vizualizacion correcta
            if(z<=-4) z=6;                        //Decrementa para vizualizar mas letras al paso del tiempo
            n++;                                //transcurrido.
            if(n>=11) n=1;                        //Incrementa el limite a donde debe de llegar                                                //cada letra con corde al tiempo transcurrio
        }
}
 

Adjuntos

Arriba