El presente sitio presenta diseños y proyectos realizados con Solidworks y otros programas 3d , además de laminas y modelos 3d para practicar en casa, con el único objetivo de poder aprender y explorar la capacidad de Solidworks, no existiendo en ningún caso fines de lucro.
Showing posts with label CODIGO CCS. Show all posts
Showing posts with label CODIGO CCS. Show all posts

Friday, March 1, 2013

Conversión Analógico Digital CCS

Posted by Juan Francisco | Friday, March 1, 2013 | Category: | 0 comentarios


/////////////////////////////////////////////////////////////////////////
////                                                                 ////
////  This program displays the min and max of 30 A/D samples over   ////
////  the RS-232 interface.  The process is repeated forever.        ////
////                                                                 ////
////  If required configure the CCS prototype card as follows:       ////
////     Insert jumper from output of POT to pin A5                  ////
////     Use a 10K POT to vary the voltage.                          ////
////                                                                 ////
////  Jumpers:                                                       ////
////     PCM,PCH    pin C7 to RS232 RX, pin C6 to RS232 TX           ////
////     PCD        none                                             ////
////                                                                 ////
////  This example will work with the PCM, PCH, and PCD compilers.   ////
////  The following conditional compilation lines are used to        ////
////  include a valid device for each compiler.  Change the device,  ////
////  clock and RS232 pins for your hardware if needed.              ////
/////////////////////////////////////////////////////////////////////////


#include <30f5011 .h="">
#fuses HS,NOWDT
#use delay(clock=20000000)
#use rs232(baud=9600, UART1)


void main() { 

   int i, value, min, max;

   printf("Sampling:");                        

   setup_adc_ports( sAN0 );                     
   setup_adc( ADC_CLOCK_INTERNAL );            
   set_adc_channel( 0 );                      

   do {
      min=255;
      max=0;
      for(i=0; i<=30; ++i) {
         delay_ms(100);                        
         value = read_adc();                   
         if(valuemax)
            max=value;
      }
      printf("nrMin: %2X  Max: %2Xnr",min,max);     
   } while (TRUE);
}

Watchdog Timer CCS

Posted by Juan Francisco | | Category: | 0 comentarios

/////////////////////////////////////////////////////////////////////////
////                                                                 ////
////  This program demonstartes the watchdog timer.  If the user     ////
////  does not hit a key in the set amount of time, the processor    ////
////  restarts, and tells the user why it restarted.                 ////
////                                                                 ////
////  Jumpers:                                                       ////
////     PCH    pin C7 to RS232 RX, pin C6 to RS232 TX               ////
////     PCD    none                                                 ////
////                                                                 ////
////  This example will work with the PCD compiler.                  ////
////  The following conditional compilation lines are used to        ////
////  include a valid device for each compiler.  Change the device,  ////
////  clock and RS232 pins for your hardware if needed.              ////
/////////////////////////////////////////////////////////////////////////



#ifndef __PCD__
 #error This example is only for dsPIC/PIC24 devices
#endif

#include <30f5011 .h="">
#fuses HS,NOPROTECT,WDT,WPSB1,WPSA512
#use delay(clock=20000000)
#use rs232(baud=9200, UART1)

main()   {


   switch ( restart_cause() )
   {
      case RESTART_WATCHDOG:
      {
         printf("rnRestarted processor because of watchdog timeout!rn");
         break;
      }
      case RESTART_POWER_UP:
      {
         printf("rnNormal power up!rn");
         break;
      }
   }

   setup_wdt(WDT_ON);

   while(TRUE)
   {
      restart_wdt();
      printf("Hit any key to avoid a watchdog timeout.rn");
      getc();
   }
}

Generador simple de Onda cuadrada CCS

Posted by Juan Francisco | | Category: | 0 comentarios

/////////////////////////////////////////////////////////////////////////
////                                                                 ////
////  This program displays a message over the RS-232 and waits for  ////
////  any keypress to continue.  The program will then begin a 1khz  ////
////  square wave over I/O pin B4.                                   ////
////                                                                 ////
////  Comment out the printf's and getc to eliminate the RS232 and   ////
////  just output a square wave.                                     ////
////                                                                 ////
////  Change both delay_us to delay_ms to make the frequency 1 hz.   ////
////  This will be more visable on a LED.                            ////
////                                                                 ////
////                                                                 ////
////  Change the device, clock and RS232 pins for your hardware if   ////
////  needed.                                                        ////
/////////////////////////////////////////////////////////////////////////




#include <30f2010 .h="">

//#device ICD=TRUE  // For using the debugger, un-comment

#use delay(crystal=20mhz)



// UART1A specifies the alternate UART pins Pin_C13, Pin_C14
// use UART1 to sprcify UART for pins Pin_F3, Pin_F2

#use rs232(baud=9600, UART1A)


void main() {

   printf("Press any key to beginnr");
   getc();
   printf("1 khz signal activatednr");

   while (TRUE) {
     output_high(PIN_B4);
     delay_us(500);
     output_low(PIN_B4);
     delay_us(500);
   }
}

Simple Coversor Analógico Digital CCS

Posted by Juan Francisco | | Category: | 0 comentarios

/////////////////////////////////////////////////////////////////////////
////                                                                 ////
////  This program displays the min and max of 30 A/D samples over   ////
////  the RS-232 interface.  The process is repeated forever.        ////
////                                                                 ////
////  Configure the CCS prototype card as follows:                   ////
////      Insert jumpers from: 11 to 17, 12 to 18 and 9 to 16        ////
////      Use the #9 POT to vary the voltage.                        ////
/////////////////////////////////////////////////////////////////////////



#include<16f877a .h="">
#fuses HS,NOLVP,NOWDT,PUT
#use delay(clock=20000000)
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7)

void main() {
   int i, value, min, max;
   
   printf("Sampling:");
   
   setup_adc_ports( RA0_ANALOG );
   setup_adc( ADC_CLOCK_INTERNAL );
   set_adc_channel( 0 );
   
   do {                       //Takes 30 samples from pin A0
      min = 255;              //and displays the min and max
      max = 0;                //values for that 100ms period
      for(i = 0; i <= 30; ++i) {
         delay_ms(100);
         value = read_adc();
         if(value < min)
            min = value;
         if(value > max)
            max = value;
      }
      printf("nrMin:%x MAX: %x", min, max);
   } while (TRUE);
}

Contar segundos con el timer 0 CCS

Posted by Juan Francisco | | Category: | 0 comentarios

///////////////////////////////////////////////////////////////////////
////                                                               ////
//// This program uses the RTCC (timer0) and interrupts to keep a  ////
//// real time seconds counter.  A simple stop watch function is   ////
//// then implemented.                                             ////
////                                                               ////
//// Configure the CCS prototype card as follows:                  ////
////     Insert jumpers from: 11 to 17 and 12 to 18.               ////
///////////////////////////////////////////////////////////////////////



#include<16f877a .h="">
#fuses HS,NOLVP,NOWDT,PUT
#use delay(clock=20000000)
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7)

#define high_start 76
byte seconds, high_count;

#INT_RTCC                                    //Interrupt procedure
clock_isr() {                                //called every time RTCC
   high_count -= 1;                          //flips from 255 to 0

   if(high_count==0) {
      ++seconds;
      high_count=high_start;                 //Inc SECONDS counter every
   }                                         //76 times to keep time
}

void main() {                                //a simple stopwatch program
   byte start, time;

   high_count = high_start;
   setup_timer_0( RTCC_INTERNAL | RTCC_DIV_256 );
   set_timer0(0);
   enable_interrupts(INT_RTCC);
   enable_interrupts(GLOBAL);

   do {
      printf("Press any key to begin.nr");
      getc();
      start = seconds;
      printf("Press any key to stop.rn");
      getc();
      time = seconds - start;
      printf("%U seconds.nr", time);
   } while (TRUE);
}

Stepper Motor Controller CCS

Posted by Juan Francisco | | Category: | 0 comentarios

/////////////////////////////////////////////////////////////////////////
////  This program interfaces to a stepper motor.  The program will  ////
////  use the RS-232 interface to either control the motor with a    ////
////  analog input, a switch input or by RS-232 command.             ////
////                                                                 ////
////  Configure the CCS prototype card as follows:                   ////
////     Connect stepper motor to pins 47-50 (B0-B3)                 ////
////     Conenct 40 to 54 (pushbutton)                               ////
////     Connect 9 to 15 (pot)                                       ////
////     See additional connections below.                           ////
/////////////////////////////////////////////////////////////////////////



#include <16c74 .h="">
#fuses HS,NOWDT,NOPROTECT
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)  // Jumpers: 8 to 11, 7 to 12

#include 

#byte port_b = 6

#define FOUR_PHASE TRUE

#ifdef FOUR_PHASE

byte const POSITIONS[4] = {0b0101,
                           0b1001,
                           0b1010,
                           0b0110};
#else
byte const POSITIONS[8] = {0b0101,
                           0b0001,
                           0b1001,
                           0b1000,
                           0b1010,
                           0b0010,
                           0b0110,
                           0b0100};
#endif


drive_stepper(BYTE speed, char dir, BYTE steps) {
   static BYTE stepper_state = 0;
   BYTE i;

   for(i=0; i
      delay_ms(speed);
      set_tris_b(0xf0);
      port_b = POSITIONS[ stepper_state ];
      if(dir!='R')
         stepper_state=(stepper_state+1)&(sizeof(POSITIONS)-1);
      else
         stepper_state=(stepper_state-1)&(sizeof(POSITIONS)-1);
   }
}



use_pot() {
   BYTE value;

   setup_adc(adc_clock_internal);
   set_adc_channel( 1 );
   printf("rn");

   while( TRUE ) {
      value=read_adc();
      printf("%2Xr",value);
      if(value<0x80 font="">
         drive_stepper(value,'R',8);
      else if(value>0x80)
         drive_stepper(128-(value-128),'F',8);
   }

}


use_switch(BYTE speed, char dir) {

   BYTE steps;

   printf("nrSteps per press: ");
   steps = gethex();

   while(true) {
      while(input(PIN_B7)) ;
      drive_stepper(speed,dir,steps);
      while(!input(PIN_B7)) ;
      delay_ms(100);
   }
}


main() {

   byte speed,steps;
   char dir;

   setup_port_a(RA0_RA1_ANALOG);

   while (TRUE) {
       printf("nrSpeed (hex): ");
       speed = gethex();

       if(speed==0)
          use_pot();

       printf("nrDirection (F,R): ");
       dir=getc()|0x20;
       putc(dir);

       printf("nrSteps (hex): ");
       steps = gethex();

       if(steps==0)
          use_switch(speed,dir);

       drive_stepper(speed,dir,steps);
   }

}