Friday, March 1, 2013
Generador simple de Onda cuadrada CCS
/////////////////////////////////////////////////////////////////////////
//// ////
//// 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="">30f2010>
//#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
/////////////////////////////////////////////////////////////////////////
//// ////
//// 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. ////
/////////////////////////////////////////////////////////////////////////
#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
///////////////////////////////////////////////////////////////////////
//// ////
//// 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="">16f877a>
#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);
}
/////////////////////////////////////////////////////////////////////////
//// 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="">16c74>
#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="">0x80>
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);
}
}
Secuenciador de luces Led con 555 y 4017
Los siguientes elementos fueron empleados en el montaje del
circuito:
- Fuente: Bateria 9V DC.
- Resistencias: R3 (10 unidades de 200 Ω ó 330 Ω), R2 (de 33 KΩ, 82 KΩ, 100 KΩ ó potenciómetro de 100 KΩ ó 1 MΩ) y R1 (de 6.8 ó 10 KΩ).
- Condensador cerámico C2 de 0.01 μF.
- Condensador electrolítico C1 de 10, 100 μF.
- Diodos LEDs: 9 unidades.
- Circuito integrado LM 555.
- Circuito integrado 4017.

