Introduccion a la programacion de PICS en lenguaje C (CCS)

Iniciado por MARCO_RECARGADO, 26 Julio 2007, 17:47 PM

0 Miembros y 3 Visitantes están viendo este tema.

Sourraund

#160
Hay algunas lecciones del post en los que no se pueden ver las imagenes de la simulación en el Proteus, hay algún modo de poder visualizarlas?

Saludos.
Ingredientes: Sal y disfuta.
Cómete el mundo.

http://www.sourraundweb.tk

Sourraund

Cuando quiero usar un lcd, sea el ejemplo que sea, siempre me sale este error:
"DSIM model LCDALPHA.DLL failed to authorize - Missing or invalid Customer Key"

¿Alguien sabe como puedo solucionarlo?

Saludos y gracias.
Ingredientes: Sal y disfuta.
Cómete el mundo.

http://www.sourraundweb.tk

elektronische

Tengo un problema tratando de conectar un teclado de 4x3 a una LCD mediante un PIC 16F877A, no logro hacer que obtenga los datos del teclado, ajunto el código y el diagrama en ISIS, tal vez me puedan ayudar.

#include <16f877a.h>                      //PIC utilizado
#fuses HS,NOWDT,NOPROTECT,NOLVP           //Configuramos los fuses
#use delay (clock=4000000)                //Oscilador a 4Mhz
#INCLUDE "lcd.c"                         //Incluyo LCD.C
#INCLUDE "kbd.c" 


void lcd_mostrar(void);
char a;
#byte PORTD=0xF81
#define use_portb_kbd TRUE

void main(void)
{
   port_b_pullups(TRUE);
   kbd_init();
   lcd_init();
   lcd_mostrar();
}

void lcd_mostrar(void)
{
a=kbd_getc();
lcd_putc(a);

}


dNnYaU~

Buen día, antes que nada, me agrada este foro, recién lo he encontrado y hay mucha información valiosa gracias a los que se dan el tiempo de ayudar. aunque yo no cuento con suficiente tiempo si me gustaría aportar de lo poco que he hecho con PICs en CCS.
Bueno... por lo pronto quisiera comentarle aqui al colega y para todos aquellos que tengan el mismo problema o simplemente quieran agilizar el tiempo de programación con un LCD, me agradaría adjuntarles una librería que en lo personal no me ha dado problemas.

Así que aquí viene mi primer pregunta:

¿Como adjunto un archivo en este foro para compartir información?  :P


Cita de: Sourraund en 24 Febrero 2010, 11:13 AM
Cuando quiero usar un lcd, sea el ejemplo que sea, siempre me sale este error:
"DSIM model LCDALPHA.DLL failed to authorize - Missing or invalid Customer Key"

¿Alguien sabe como puedo solucionarlo?

Saludos y gracias.


INSPIRACION, MOTIVACION, RENOVACION,  ACTITUD,  CONFRONTACION, CONCENTRACION, CONOCIMIENTO... RESPIRA...                                                        "LO DE MAS... ES LO DE MENOS"-
                                                                               ~'dnny@u '~

tercules

hola amigos quisiera que me den una mano con este codigo cual sera el  problema con el copilador:
codigo:
#include <16F876.H>                     
#fuses HS,XT,NOPUT,NOPROTECT,NOWDT           
#use delay(clock=8M)                         
#include <Flex_lcd.c>                           

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

///****   DEFINIMOS NOMBRES A PUERTOS   ****///
#bit CENTENAS  = 0x06.4
#bit UNIDADES  = 0x06.5   
#bit SPEEDUP   = 0x06.6   
#bit SPEEDDOWN = 0x06.7

///****    VARIABLES GLOBALES  ***///
int  contador,stop,Duty,FlagRamp,
     mil,cen,dec,uni,
     uni2,dec2,cen2,mil2;

void reset()
{                                 
mil=0; dec=0; cen=0; uni=0;                   
uni2=0; dec2=0; cen2=0; mil2=0;
contador=0;
output_b(0x00);
output_c(0x00);
output_a(0x00);
Stop=0;
FlagRamp=0;
Duty=0;
set_pwm1_duty(0);                           //Borra la pantalla LCD
}
///****    FUNCIÓN PANTALLA DE ARRANQUE   ****///
void inicial()                                 
{
lcd_gotoxy(2,1); lcd_putc("BOBINADORA 3.0");   
lcd_gotoxy(2,2); lcd_putc("INOXSTEEL 2009");
delay_ms(3000);
lcd_putc("\f");
}

///****    FUNCIÓN FIN DE BOBINADO   ****///
void Fin()                                 
{
int i;
for (i=0;i<5;i++)
{
  lcd_putc("\f");
  delay_ms(300);
  lcd_gotoxy(5,1); lcd_putc("BOBINADO");
  lcd_gotoxy(4,2); lcd_putc("FINALIZADO");
  delay_ms(300);
}
lcd_putc("\f");
reset();
}

///****     INTERRUPCIÓN TIMER0    ****///
///      TIMER0 EN MODO CONTADOR       ///
/// LLEVA EL CONTEO POR SENSOR EXTERNO ///

#int_TIMER0
Void TIMER0_isr(void)                         
{                                             
contador=1;
set_timer0(255);
clear_interrupt(int_TIMER0);
}
   
///****           INTERRUPCIÓN RB0           ****///
/// PUESTA EN MARCHA SI HAY CANTIDAD INTRODUCIDA ///

#int_EXT

void Start_isr(void)
  {
   if (uni!=0 || cen!=0)
    {lcd_putc("\f"); Stop=1;}
 
  clear_interrupt(int_EXT);
  }

///****       INTERRUPCIÓN RB4-RB7         ****///
/// TOMA LOS DATOS RECIBIDOS EN LOS PULSADORES ///
///    CENTENAS, UNIDADES, VELOCIDAD + Y -     /// 

#int_RB
Void Pulsadores_isr()
   {
   if (SPEEDUP==1)  if (duty<82) Duty+=4;
   if (SPEEDDOWN==1)if (duty>2) Duty-=4;
   if (CENTENAS==1) cen++;
   if (UNIDADES==1) uni++;
                                     
   if (uni>9) {dec++; uni=0;}             
   if (dec>9) dec=0;                   
   if (cen>9) {mil++; cen=0;}     
   if (mil>9) mil=0; 

   clear_interrupt(int_RB);
   }

///****       INTERRUPCIÓN TIMER1          ****///
/// SE ENCARGA DEL ARRANQUE SUAVE DEL MOTOR    ///
/// AL INICIAR EL BOBINADO - DE 0% A 50% VEL.  /// 

#int_TIMER1
Void SoftStart()
   {
    if (stop==1 && Duty<42 && FlagRamp==0)
       {Duty+=2; set_timer1(50000);}
   
    if (Duty==42) FlagRamp=1;
   }

///****FUNCIÓN PRINCIPAL****/// 

Void Main(Void)                               
  {
   int16 speed;
   speed=0;
   
   set_tris_a(0b110000);
   set_tris_b(0b11110001);
   set_tris_c(0b00000000);

   ///**** HABILITACIÓN Y AJUSTE DE INTERRUPCIONES****///
   enable_interrupts(int_EXT);
   enable_interrupts(int_TIMER0);
   enable_interrupts(int_TIMER1);
   enable_interrupts(int_RB);
   enable_interrupts(global);

   ext_int_edge(L_TO_H);
   setup_timer_0(RTCC_EXT_L_TO_H|RTCC_DIV_1);
   setup_timer_2(T2_DIV_BY_16,82,1);
   setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
   setup_ccp1(CCP_PWM);

   clear_interrupt(int_RB);
   clear_interrupt(int_EXT);
   clear_interrupt(int_RTCC);
   clear_interrupt(int_ccp1);

   reset();                                       

   lcd_init();                                       

   inicial();

while (true)
  {
///****BLOQUE PRINCIPAL DE PRESELECCIÓN****///
 
   if (stop==0)
   {
    lcd_gotoxy(1,1);  lcd_putc("INTRODUCE EL N");     
    lcd_gotoxy(15,1); lcd_putc(223);                         
    lcd_gotoxy(1,2);  lcd_putc("DE ESPIRAS");
    lcd_gotoxy(12,2); printf(lcd_putc,"%u",mil);                           
    lcd_gotoxy(13,2); printf(lcd_putc,"%u",cen);   
    lcd_gotoxy(14,2); printf(lcd_putc,"%u",dec);   
    lcd_gotoxy(15,2); printf(lcd_putc,"%u",uni);   
   }

///****BLOQUE EN FUNCIONAMIENTO****///

   if (Stop==1)
   { 
    lcd_gotoxy( 1,1); lcd_putc("BOBINANDO");
    delay_ms(20);
    lcd_gotoxy(11,1); printf(lcd_putc,"V.%03Lu",Speed);
    lcd_gotoxy(16,1); lcd_putc("%");
    lcd_gotoxy( 1,2); lcd_putc("ESPIRAS N");
    lcd_gotoxy(10,2); lcd_putc(223);
    lcd_gotoxy( 1,1); lcd_putc("         ");
    delay_ms(20);
    lcd_gotoxy(12,2); printf(lcd_putc,"%u",mil2);
    lcd_gotoxy(13,2); printf(lcd_putc,"%u",cen2);   
    lcd_gotoxy(14,2); printf(lcd_putc,"%u",dec2);   
    lcd_gotoxy(15,2); printf(lcd_putc,"%u",uni2);   

    set_pwm1_duty(duty);              //PWM para control de velocidad

    Speed = Duty;                     //Variable de % de velocidad en pantalla
    Speed = (( Speed * 100) / 82 );

    if (contador==1)                 
    {uni2++; contador=0;}                   
    if (uni2>9) {dec2++; uni2=0;}   
    if (dec2>9) {cen2++; dec2=0;}
    if (cen2>9) {mil2++; cen2=0;}

    if (mil2==mil && dec2==dec &&   
    cen2==cen && uni2==uni) 
   {Stop=0; lcd_putc("\f"); fin();} 
  }
}
}

samael.sys

Hola Amigos he probado parte de lo q aki se habla de los PIC, yo estoy usando el 16f877 con algo de lo q aki hay, por el momento solo quiero encender un led, al parcer el programa esta bien; pero cuando lo simulo en proteus no me funciona, aki les dejo el codigo :

//#include "C:\pruebas pic\control_motores.h"
#include <16F877.h>
#device adc=8

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES RC                       //Resistor/Capacitor Osc with CLKOUT
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES BROWNOUT                 //Reset when brownout detected
#FUSES LVP                      //Low Voltage Programming on B3(PIC16) or B5(PIC18)
#FUSES NOCPD                    //No EE protection
#FUSES NOWRT                    //Program memory not write protected
#FUSES NODEBUG                  //No Debug mode for ICD

#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#byte port_b=0x06
void main()
{

   port_b_pullups(TRUE);
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(FALSE);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   
   
   // TODO: USER CODE!!
   set_tris_b (0x00);                  // Declaramos puerto B como salida
   set_tris_a (0x1F);
   port_b=0;
   output_high(PIN_B0);
   //delay_ms (10);             // esperamos 10 ms
}



GRACIAS!!!! :D

INVINCIBLE

Buenas noches colegillasª!!

Mi pregunta es la siguiente...una vez que tengo compilado el codigo en c en el CCS y me simula ese codigo en el Proteus ...cual es el paso a seguir para poder grabar el contenido a la PIC respectiva suponienod que use la f1684a? Tengo entendido que primero debo generar un .ASM y luego el .HEX ... Por favor espero su gentil respuesta ..

Gracias

JCCC

tienes el programa compilando y corriendo...
ya tienes generado el .HEX, con el winpinc800, icprog o cualquier otro programa lo programas (con un programador de PICs) no es necesario el ASM.
posdata: al menos pasate un rato por san google....

Tokes

samael:

He compilado tu código exactamente como lo pusiste y si funciona (al menos en mi máquina).

Es todo.

osmar6

hola!! soy nuevo en esto de programar pic C  y me gustaria saber si es posible grabar en el pic con el programa CCS?? disculpen la ignoracia, pero como dije soy nuevo en esto.. desde ya muchas gracias..