Programas hechos en MPLAB

que tal amigos del foro tengo una duda inmensa sobre como programar en ccs c ya que mi programador funciona perfectamente en lenguaje ensamblador pero creo que estoy direccionando mal en c alguien puede decirme como se graba un pic desde ccs y con que programador
 
tu puedes grabar el pic con mplab... solo necesitas el .hex de ccs... nada mas...

HERNAN ponle algo de retardos a lo mejor sea por eso y revisa bien si estas las patitas que estas utilizando en el pic son las mismas que tienes en el programa...

mi problema con el codigo de la lcd se debia a los retardos....
 
Última edición:
Estoy loco con este programa para mostrar por el LCD esto tan sencillo en proteus me funciona bien pero al momento de probarlo realmente no hace nada, el programa trata de mostrar un mensaje en el lcd para decir q esta listo luego cuando el led prenda y apague el lcd indica el estado del led, el lcd no inicia ni tampoco pasa a la funcion de prender y apagar el led del pin_a2. Espero me puedas ayudar con esto. el lcd que uso al momento de probarlo es el LM071L de la hitachi. te adjunto la conexion en proteus para ver si me puedes indicar que esta malo.

Código:
#include <16F628.h>

#FUSES NOWDT                     //No Watch Dog Timer
#FUSES HS                        //High speed Osc (> 4mhz)
#FUSES NOPUT                     //No Power Up Timer
#FUSES NOPROTECT                 //Code not protected from reading
#FUSES NOBROWNOUT                //No brownout reset
#FUSES MCLR                      //Master Clear pin enabled
#FUSES NOLVP                     //No low voltage prgming, B3(PIC16) or B5(PIC18)  used for I/O
#FUSES NOCPD                     //No EE protection

#use delay(clock=20000000)
#define LCD_ENABLE_PIN PIN_B0
#define LCD_RS_PIN PIN_B1
#define LCD_RW_PIN PIN_B2
#define LCD_DATA_PORT 6
#define LCD_TYPE 2
#define LCD_TRIS_LOCATION set_tris_b(x)
#include <lcd.c>

#use fast_io (a)
#use fast_io (b)

void main()
{
   port_b_pullups(False);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   lcd_init();
   lcd_putc("\fReady...");
   delay_ms(500);
   output_a(0x00);
   set_tris_a(0x00);
   while(1)
   {
      output_high(PIN_A2);
      lcd_putc("\fOff");
      delay_ms(500);
      output_low(PIN_A2);
      lcd_putc("\fOn");
      delay_ms(500);
   }
}
 

Adjuntos

  • conexion.JPG
    conexion.JPG
    48.1 KB · Visitas: 125
Estoy loco con este programa para mostrar por el LCD esto tan sencillo en proteus me funciona bien pero al momento de probarlo realmente no hace nada, el programa trata de mostrar un mensaje en el lcd para decir q esta listo luego cuando el led prenda y apague el lcd indica el estado del led, el lcd no inicia ni tampoco pasa a la funcion de prender y apagar el led del pin_a2. Espero me puedas ayudar con esto. el lcd que uso al momento de probarlo es el LM071L de la hitachi. te adjunto la conexion en proteus para ver si me puedes indicar que esta malo.

Código:
#include <16F628.h>

#FUSES NOWDT                     //No Watch Dog Timer
#FUSES HS                        //High speed Osc (> 4mhz)
#FUSES NOPUT                     //No Power Up Timer
#FUSES NOPROTECT                 //Code not protected from reading
#FUSES NOBROWNOUT                //No brownout reset
#FUSES MCLR                      //Master Clear pin enabled
#FUSES NOLVP                     //No low voltage prgming, B3(PIC16) or B5(PIC18)  used for I/O
#FUSES NOCPD                     //No EE protection

#use delay(clock=20000000)
#define LCD_ENABLE_PIN PIN_B0
#define LCD_RS_PIN PIN_B1
#define LCD_RW_PIN PIN_B2
#define LCD_DATA_PORT 6
#define LCD_TYPE 2
#define LCD_TRIS_LOCATION set_tris_b(x)
#include <lcd.c>

#use fast_io (a)
#use fast_io (b)

void main()
{
   port_b_pullups(False);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   lcd_init();
   lcd_putc("\fReady...");
   delay_ms(500);
   output_a(0x00);
   set_tris_a(0x00);
   while(1)
   {
      output_high(PIN_A2);
      lcd_putc("\fOff");
      delay_ms(500);
      output_low(PIN_A2);
      lcd_putc("\fOn");
      delay_ms(500);
   }
}

El pin VEE debe de ir a tierra, en proteus el pin VEE va al positivo pero, fisicamente yo lo he conectado al negativo y funciona al 100. otra podria ser la configuracion del lcd. checa en algunos circuitos que he hecho antras y veras que he configurado el lcd diferente.
 
Este oprobador simplemente te checa el VID & PID, y te dice si esta conectado o no,
y aun estoy en base de experimentacion de cambiar el buffer general, en este caso solo puedes cam,biar el buffer de envio y resepcion. el general es los datos que envias.

En el .zip se encuentra todo lo necesario...para entenderlo mejor...el porgrama esta hecho en C# 2008, he creado tambien una libreria para usar el mpusbapi mas sencillo especialemnte para C#, el archivo es USB.dll.

Las funciones son simples:

VID_PID(); busca el vid&pid asignado y te manda un valor mayor que cero si es cierto.

cambiar_VIDPID(); pùedes cambair el VID & PID facilmente

entre varias funciones de escritura y lectura...

Y por supuesto esta el prgrama para el PIC18 y la simulacion en proteus
 

Adjuntos

  • Prueba 1.zip
    450.9 KB · Visitas: 182
Hola oye me interesa tu tema y ps no se mucho de PICS y ps talves esto se oiga tonto pero como lo conecto el control de servos y la programacion que hisiste para controlar el servo dandole coordenadas...
 
Perdon amigo por lo anterior mi duda es como crear los puertos seriales?

hola oye otra pregunta el pic que yo tengo es el PIC16F883 crees que actue igual?
 
Última edición:
Perdon amigo por lo anterior mi duda es como crear los puertos seriales?

hola oye otra pregunta el pic que yo tengo es el PIC16F883 crees que actue igual?

debe de funcionar igual, solo mira si tiene la misma RAM los dos pics el que yo use y el tuyo...los circuitos los probe fisicamente, y funcionan...yo creo que debe de funcionar con ese PICmicro 883...saludos
 
M.a.R.c.K.
Amigo. Por internet bajate un programita con el nombre
virtual serial port driver; es gratis y trabaja muy bien; facil de usar:D
Como dice crea puertos com virtuales, puedes trabajar tus aplicaciones en c# o vb
y simularlas junto con proteus..(y)
 
Hola amigos tengo un problema compilando un programa con el CCS que ya no se que pueda ser porque la verdad no se que intenta decirme el CCS.

Código:
#include <16F628.h>
#use delay(clock=4000000)
#fuses XT,WDT,NOMCLR,NOPROTECT
/*PUERTOS*/
#byte PORTA = 0x05
#byte TRISA = 0x85
#byte PORTB = 0x06
#byte TRISB = 0x86
#byte PR2   = 0x92
/*VARIABLES*/
INT estado= 0

//********************INTERRUPCIONES*********************
#int_TIMER0                                              //INTERRUPCION DEL TIMER0
VOID TIMER0(VOID){
IF(estado==0){
PR2= 1;                                                  //VALOR PARA PERÍODO
setup_ccp1(CCP_PWM);                                     //MODULO CCP EN MODO PWM
set_timer0 (242);                                        //CUENTA DEL TIMER0
estado= 1;
}
ELSE{
setup_ccp1(CCP_OFF);
estado= 0;
PORTB= 0;
}
}

/*************************PROGRAMA PRINCIPAL*********************************/

VOID main(){

/*PUERTOS*/
TRISB= 0;
TRISA= 0;
PORTA, PORTB= 0;
/*PWM*/
setup_timer_2(T2_DIV_BY_1,1,1);                          //CONFIGURACIÓN DEL TIMER2 PARA EL PERIODO DE 2uS --- Valor 1 --- Divisor 1
set_pwm1_duty(4);                                        //PARA UN DUTY CICLE DEL 50% --- 4/4*(1+1))
setup_ccp1(CCP_OFF);

/*CONFIGURACION DEL TIMER0*/
setup_timer_0(RTCC_INTERNAL | RTCC_DIV_1);               //GENERO UNA INTERRUPCIÓN CADA 14uS
set_timer0 (242);
enable_interrupts(int_timer0);
enable_interrupts(global);

WHILE(1){}
}
                                                

/*SI ESTADO ES 1 ESTA DANDO LOS PULSOS
SI ESTADO ES 0 ESTA EN LA SEGUNDA PARTE EN DONDE ES 0*/

El programa genera por 14uS un PWM y a los otros 14uS un nivel 0, me dice que falta un "," o un ";" en la línea 14 que vendría a ser donde esta la interrupción del TIMER0 donde dice #int_TIMER0. No se porque me dice eso es lo único que me impide compilar.
 
me dice que falta un "," o un ";" en la línea 14 que vendría a ser donde esta la interrupción del TIMER0 donde dice #int_TIMER0. No se porque me dice eso es lo único que me impide compilar.
El error está antes --> Te faltó el ; para terminar la linea " INT estado= 0 "
 
Hola Amigos:apreton:
Ustedes que lo saben y lo pueden todo, necesito tomar una cantidad n de muestras del
conversor adc del pic 873; sumarlas y luego dividir este resultado para sacar un promedio:oops:
de las muestras. como puedo hacer esto en ccs.Un ejemplo me vendria bien
Gracias por su ayuda:aplauso:
 
Hola Amigos:apreton:
Ustedes que lo saben y lo pueden todo, necesito tomar una cantidad n de muestras del
conversor adc del pic 873; sumarlas y luego dividir este resultado para sacar un promedio:oops:
de las muestras. como puedo hacer esto en ccs.Un ejemplo me vendria bien
Gracias por su ayuda:aplauso:

Perdon que insista
Alguien me puede dar una manito:apreton:
 
Hola Amigos:apreton:
Ustedes que lo saben y lo pueden todo, necesito tomar una cantidad n de muestras del
conversor adc del pic 873; sumarlas y luego dividir este resultado para sacar un promedio:oops:
de las muestras. como puedo hacer esto en ccs.Un ejemplo me vendria bien
Gracias por su ayuda:aplauso:

es sencillo

es:

Código:
for(sensores=0;sensores<=numero_sensores a manajer;sensores++){
            set_adc_channel(sensores);
            delay_us(50);
            channels(sensores)=read_adc();
}
 
for(sensores=0;sensores<=numero_sensores a manajer;sensores++){
            resultado+=channels(sensores);
}

yo digo que asi puede ser a la respuesta de tu pregunta....espero que te sirva
 
Atrás
Arriba