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

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

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

skapunky

Si lo programaste con CCS utilizando el wizard...no hace falta, porque te linkea a un archivo externo que forma parte del proyecto con los fuzes declarados.

El codigo que has puesto tu...no tiene ese include, en tu caso si los necesitas.
Killtrojan Syslog v1.44: ENTRAR

Meta

Hola:

¿Hay enlaces sobre CCS para bajarlo?

Bajé la Demo y nay nay.

Es para hacer pruebas con la entrenadora que compré,

Ver análisis personal.

Saludo.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

zulay

hola alguien me puede decir para que sirve la isntruccion byte, ejemplo:
byte  x,y,z;
y para que sirve #FUSES XT, NOWDT, NOPROTECT, NOPUT

soy nuevo en esto
gracias

skapunky

La instrucción byte es la declaración de variable tipo byte, en este caso en lenguace C, fijate:

int variable1;
byte variable2;

Lo segundo que comentas:

Citar#FUSES XT, NOWDT, NOPROTECT, NOPUT

Són los fuzes de configuración del PIC, en este caso esta declaración es para el compilador CCS, por ejemplo el NOWTD deshabilitas el watchdog...hay varios y simplemente es mirar lo que hace cada uno. En el caso del MPLAB se declaran mediante la directiva "PRAGMA".
Killtrojan Syslog v1.44: ENTRAR

02arca14

tengo duda sobre las banderas en pic c como utilizarlas
me pueden ayudar ::)

crva07

Hola Marco..  este foro a sido el mejor que he visitado..  Necesito que me ayudes en un proyecto..  talves tengas algun codigo con el cual hayas hecho comuniacion I2C.. necesito leer los datos de un Acelerometro mma7660.. con el pic 16F877A. y mostrarlos en un lCD.. [ el acelerometro viene en un modulo ya soladado con resistencia y capacitores, los pines son (INT, SCL, SDA, VCC, GND).].....     intento hacer la comunicacion del Pic-Acelerometro.. pero no obtengo resultados..  ojala me pudieras ayudar..  te agradeceria un mundo 

ingtasco

Buen dia mi nombre es alvaro y esto empezando en esto de los PIC, espero aportar algo de conocimiento ya que estoy terminando mi carrera como Ingeniero Electrónico.. Suena raro que ya culminando la carrera apenas vaya a empezar a trabajar con PIC. La respuesta es que en la U poco se enfocan a esta área, a pesar que es muy importante. Pero weno pa eso estamos acá  para aprender mas y mas y ser reciproco con el conocimiento.

Quisiera empezar preguntando : ¿Por donde empezar a trabajar con CCS? , ¿Arrancando con el Wizard o desde codigo 0?

mecatronico

Cita de: Juan_elec en  8 Noviembre 2008, 02:29 AM
olas a todos que tal me parece muy interesante este foro ya que puedes compartir muxas ideas y cosas mas weno io queria contar y preguntar a la vez es que io hice una tarea en mi univ de un controlador de velocidad de un motor dc la velocidad es vista en un lcd y mi velocidad de referencia la escojo con un potenciometro ,mediante el pic16f876A corrijo el error  ante  una perturbacion en el eje mediante un pid programado en el pic weno el trabjo si me flipa pero mi problem es que mi valor de refencia que me aparece en el lcd de mi trabajo no es igual ami valor de salida de mi lcd mm y no se si seran los parametros de mi motor que esten mal o sera mis valores kp ki kd habe si alguien me dice alguito de como corregir esto pls mayor inf les puedo pasar mi simulacion en proteus si entienden mi idea gracias ahi les va el programa de formacion del pid.

#include <16F876A.h>
#device adc=10
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES HS                       //High speed Osc (> 4mhz)
#FUSES PUT                      //Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NODEBUG             
     //No Debug mode for ICD
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection

#use delay(clock=20000000)
#include <lcd.c>
#define  factor   3000/1023
#define  f2       0.23
#use fast_io(a)
#use fast_io(c)
#use fast_io(b)

float rpm,vel_m;
int   cont_t0;
int16 vel,vref,duty,aux;
signed long duty_c,uk_int;
float uk,uk_1,ek,ek_1,ek_2,f_vref;
int Kp,Ki,Kd;

void set_pwm1_dc(unsigned long duty_pwm);

#int_TIMER0
void TIMER0_isr()
{
   set_timer0(61);      // para contar 10 ms
   cont_t0++;
   if(cont_t0==10)
   {
      cont_t0=0;
      vel=get_timer1();   // contamos cuanros pulsos pasaron
      vel=vel*6;        // son 100 pulsos por revolucion
                        // asi obtenemos en revoluciones cada 100 milisegundos
                        // vel = #p/deci * 1rev/100p * 10 deci/1 seg * 60 seg/min
                        // vel esta en rpm
      lcd_gotoxy(9,2);
      printf(lcd_putc,"Vm=%Lu",vel);
      set_timer1(0);
   }
}

void main()
{
   set_tris_a(0xff);
   
   setup_adc(ADC_CLOCK_DIV_8);
   
   setup_adc_ports(AN0);
   set_adc_channel(0);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
   setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1);
   setup_timer_2(T2_DIV_BY_4,0XFF,4);
   setup_ccp1(CCP_PWM);
   set_pwm1_duty(0);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   set_timer0(61);
   set_timer1(0);
   clear_interrupt(INT_TIMER0);
   enable_interrupts(INT_TIMER0);
   enable_interrupts(GLOBAL);
   
   set_tris_c(0b11111011);
   set_tris_b(0);
   output_b(0);
   lcd_init();
   set_pwm1_dc(700);
   lcd_putc("   CONTROL PID\n");
   delay_ms(1000);
   output_b(0);
   
   uk=0;
   uk_1=0;
   ek=0;
   ek_1=0;
   ek_2=0;
   
   Kp=10;
   Ki=10;
   Kd=5;
   for(;;)
   {
      aux=read_adc();
      if(aux!=vref)
      {
         vref=aux;
         f_vref=vref;
         rpm=vref*factor;
         lcd_gotoxy(1,2);
         printf(lcd_putc,"Vr=%4.0f",rpm);     
      }
      vel_m=vel;
      ek=rpm-vel_m;
     
      uk=Kd*ek_2+(Kp+2*Kd)*ek_1+(Kp+Ki+Kd)*ek-uk_1;   // controlador pid
      ek_1=ek;
      ek_2=ek_1;
      uk_1=uk;
      uk_int=uk;
      duty_c=uk_int*f2;
      if(duty_c>1023)
         duty_c=1023;
      else if(duty_c<=0)
         duty_c=0;
      duty=duty_c;
      set_pwm1_dc(duty);       
   }
   
}

void set_pwm1_dc(unsigned long duty_pwm)
{
#byte   CCP1CON=0x17
#byte   CCPR1L=0x15

   bit_clear(CCP1CON,4);
   bit_clear(CCP1CON,5);
   if(bit_test(duty_pwm,0))
         bit_set(CCP1CON,4);
   if(bit_test(duty_pwm,1))
         bit_set(CCP1CON,5);
   duty_pwm>>=2;                 //rota dos veces
   duty_pwm&=0x00FF;             // dejamos solo un byte
   CCPR1L=duty_pwm;     
}

graxias ojala me puedan ayuda xD


una consulta quisiera saber mas ala detalle acerca de tu controlador de velcidad ps estoy necesitando urgente implementar uno para un curso la verdad es que recien he estado revisando temas afines a programacion por ende se me hace un poco complicado entender algunas instrucciones ,espero puedas ayudarme porfavor

el motor que deseo controlar es de 19w de potencia 24voltios con un encoder de 100PPR
PORFAVOR ESPERO QUE ME AYUDES  :huh:

demian662

Si alguien puede ayudarme, estoy buscando el ccs compiler y no puedo encontrarlo, si alguien tiene un link que no este fuera de servicio seria muy util

hemerson

Estoy iniciándome en lo que es programación me pueden ayudar con un manual que me ayude a comprender el código de antemano gracias