Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ROBOT-MINISUMO
Departamento de Electricidad-Electrnica
ndice:
Pgina
16
16
ndice:
Pgina
1.- Introduccin
Este proyecto consiste en realizar un robot que sea capaz de localizar, seguir, empujar y tirar
a otro robot de similares condiciones, de un tatami.
Este Robot tiene la misin, como su nombre lo indica, de luchar con otros robots similares
en peso y tamao, para ello se han utilizado dos motores, controlados mediante cuatro
sensores pticos CNY70, y el inversor de giro L293 para que de esta manera pueda realizar
giros de derecha a izquierda y de izquierda a derecha. Para el control del robot se han
empleado tcnicas digitales que tiene como ncleo principal el PIC 16F876A.
Para poder localizar al contrincante hemos empleado los Sensores Infrarrojos GP2D12 que
miden la distancia a la que se encuentra su oponente, as podremos atacar y tirar al otro
robot del tatami.
Adems, el robot fue diseado para poder ser controlado como coche teledirigido.
En todo momento el control del robot puede hacerse manualmente.
Existe una comunicacin entre el robot y un mando en radio frecuencia con los mdulos de
CEBECK C-0503 y C-0504. Que son un transmisor y receptor de datos en modulacin AM
que trabajan a una frecuencia portadora 433,92 MHz y tienen un Ancho de Banda de 4 KHz.
El diseo del proyecto lo hacemos mediante una herramienta llamada Proteus, que permite
simular el hardware y el software a la vez, pudiendo ejecutarse paso a paso cada programa.
Se puede trabajar con ficheros .ASM y C.
Para la programacin del PIC 16F876A hemos utilizado una herramienta llamada PIC C
Compiler.
El software se puede ser grabado en el robot directamente sin necesidad de extraer el
microcontrolador, para ello se ha utilizado el grabador PICdownloader.exe.
Los microcontroladores tienen que tener cargado previamente un programa de
comunicaciones para comunicarnos con un Ordenador Personal.
Seal
In /
Out
Descripcin
DCD
In
Detector de Portadora
de Datos
RxD
(RD)
In
Recepcin de Datos
TxD
(TD)
Out
Transmisin
Datos
DTR
Out
Terminal
Listo
5
6
GND
DSR
In
Masa
Dispositivo de Datos
Listo
RTS
Out
Peticin de envo
CTS
In
RI
In
Indicador de llamada
de
de
Datos
INn
1
0
1
0
OUTn
1
0
Z
Z
HZ = Alta Impedancia
As podemos ver que poniendo a nivel alto la entrada de habilitacin "EN", la salida de este "OUT"
pasa de alta impedancia al mismo nivel que se encuentre la entrada "IN" pero amplificado en
tensin y en corriente, siendo esta de 1A mximo.
En este diseo colocamos optoacopladores en la salida de cada una de las entradas del L293B
porque al inicio del arranque del motor, este demanda ms voltaje y corriente que la nominal, por lo
que requiere que aislemos las salidas del puerto del microcontrolador, ya que una demanda excesiva
de estos parmetros, pueden llegar a daar su estructura y funcionalidad.
10
El LED infrarrojo emite el haz de luz a travs de una pequea lente convergente que hace que el haz
emisor llegue de forma paralela al objeto. Cuando la luz choca con un obstculo, una cierta cantidad
de luz se refleja, casi todas las sustancias tienen un grado bastante grande de rugosidad de la
superficie que produce una dispersin hemisfrica de la luz (la llamada reflexin no terica).
Alguno de estos haces de esta luz rebota hacia el sensor que es recibido por la lente. La lente
receptora tambin es una lente convexa. Acta para convertir el ngulo de posicin. Si un objeto se
pone en el plano focal de una lente convexa y los otros rayos de luz paralelos en otro lado, el rayo
que pasa por el centro de la lente atraviesa inalterado o marca el lugar focal. Los rayos restantes
tambin enfocan a este punto.
Caractersticas:
1. Menos influencia del color de los objetos reflexivos
2. Lnea indicadora de distancia output/distance :
Tipo de salida indicadora de la distancia analgica (tensin analgica) para el GP2D12.
Distancia del detector de 10 a 80 cm.
11
12
Se ha utilizado este microcontrolador, ya que el robot est diseado para controlar varios perifricos
(motores, servomotores, sensores infrarrojos y sensores pticos, radio frecuencia, cargador del
programa controlador, etc) y es necesario muchas lneas de entrada y salida. Este microcontrolador
dispone de los elementos necesarios para controlar los sensores y motores como los Timers,
convertidores de analgica a digital, salidas de control por PWM.
El microcontrolador PIC 16F876A trabaja a una frecuencia de 1 MHz y ejecuta una instruccin en
1s.
Tiene un Jumper JUMPER que nos sirve para cargar el programa procedente del Ordenador
Personal en el microcontrolador o recibir los datos del receptor de RF.
13
14
Mando
VDD
U2E
7805_JOAN
Ve
R7E
GND2
220
220uF
Antena
R6E
C2E
220uF
VSS
E_RF1E
BD136_JOAN
GND3
VO
C1E
9V
D7E
15
2.2k
11
VI
13
BAT1E
GND
1
2
K
INTERRUPTOR_JOAN
1N4007_JOAN
Q1E
Vcc
SW6E
D6E
CON1E
LED-RED_JOAN
K
1
BORNIER1_JOAN
C3E
15pF
U1E
220
220
220
220
220
RB0E
RB1E
RB2E
RB3E
RB4E
R5E
R4E
R3E
R2E
R1E
LED-YELLOW_JOAN
LED-GREEN_JOAN
LED-RED_JOAN
LED-RED_JOAN
LED-RED_JOAN
SW4E
SW5E
Adelante
RB4E
1
SW3E
Atras
RB2E
Izquierda
SW2E
SW1E
RB0E
1
RB3E
1
RB1E
D5E
D4E
D3E
D2E
D1E
Parar
Derecha
21
22
23
24
25
26
27
28
11
12
13
14
15
16
17
18
RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
OSC1/CLKIN
OSC2/CLKOUT
MCLR/Vpp/THV
RA0/AN0
RA1/AN1
RA2/AN2/VREFRA3/AN3/VREF+
RA4/T0CKI
RC0/T1OSO/T1CKI
RA5/AN4/SS
RC1/T1OSI/CCP2
RC2/CCP1
RC3/SCK/SCL
RC4/SDI/SDA
RC5/SDO
RC6/TX/CK
RC7/RX/DT
9
10
1
2
3
4
5
6
7
VDD
X1E
4MHz
C4E
15pF
PIC16F876_JOAN
15
16
17
18
19
20
5.3.- Control.
5.3.1.- Esquema Elctrico.
21
22
5.4.- Mando.
5.4.1.- Esquema Elctrico.
Mando
VDD
VSS
Ve
R7E
220uF
220
220uF
GND1
R6E
C2E
GND2
C1E
9V
E_RF1E
BD136_JOAN
Antena
VO
GND3
VI
Vcc
GND
D7E
11
15
2.2k
13
BAT1E
2
Q1E
7805_JOAN
1
2
K
INTERRUPTOR_JOAN
1N4007_JOAN
D6E
U2E
SW6E
CON1E
LED-RED_JOAN
1
BORNIER1_JOAN
C3E
15pF
U1E
220
RB0E
RB1E
RB2E
RB3E
RB4E
R5E
220
R4E
220
R3E
220
R2E
220
R1E
LED-YELLOW_JOAN
LED-GREEN_JOAN
LED-RED_JOAN
LED-RED_JOAN
LED-RED_JOAN
Adelante
SW3E
RB4E
SW4E
SW5E
Atras
RB2E
Izquierda
SW2E
SW1E
RB0E
RB3E
RB1E
D5E
D4E
D3E
D2E
D1E
Parar
Derecha
21
22
23
24
25
26
27
28
11
12
13
14
15
16
17
18
RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
OSC1/CLKIN
OSC2/CLKOUT
MCLR/Vpp/THV
RA0/AN0
RA1/AN1
RA2/AN2/VREFRA3/AN3/VREF+
RA4/T0CKI
RC0/T1OSO/T1CKI
RA5/AN4/SS
RC1/T1OSI/CCP2
RC2/CCP1
RC3/SCK/SCL
RC4/SDI/SDA
RC5/SDO
RC6/TX/CK
RC7/RX/DT
9
10
1
2
3
4
5
6
7
VDD
X1E
4MHz
C4E
15pF
PIC16F876_JOAN
23
Listado General
Adrin Mancero P.
domingo, 09 de noviembre de 2008
28 Resistencias
Cantidad:
2
6
2
4
9
1
4
Referencia
Valor
4.7k
R2, R4, R6, R8, R18, R21
10k
R24, R25
100
R6, R7, R9, R10
330
R1, R3, R5, R7, R9, R10, R12, R14, R16 220
R38
240
R11, R13, R15, R17
18k
Coste Unitario
0.05
0.05
0.05
0.05
0.05
0.05
0.05
Coste
0.10
0.30
0.10
0.20
0.45
0.05
0.20
Valor
2200F
100nF
1F
15pF
10F
Coste Unitario
0.05
0.05
0.05
0.05
0.05
Coste
0.05
0.25
0.15
0.10
0.05
Referencia
U1
U2
U3, U4, U5, U6
U7
U9
U10
Valor
PIC16F876_JOAN
Coste Unitario
3
2
0.5
0.5
2
5
Coste
3
2
0.50
0.50
2
5
Referencia
D1, D2, D4, D5, D6, D7, D8, D9, D10,
D11, D12
D3
Valor
LED-RED_JOAN
Coste Unitario
0.20
Coste
2.20
LED-GREEN_JOAN
0.20
0.20
R22, R23
12 Condensadores
Cantidad:
1
5
3
2
1
Referencia
C1
C2, C4, C9, C10, C11
C3, C5, C8
C13-C16
C15
10 Circuitos Integrados.
Cantidad:
1
2
4
1
1
1
LM350K_JOAN
MAX232
OPTOCOUPLER-NPN
74HC14
L293
13 Diodos.
Cantidad:
11
2
24
85 Componentes diversos.
Cantidad:
2
2
4
8
2
2
4
2
10
Referencia
Valor
INFR1, INFR2
GP2D12
CONN-SIL5
CONN_SIL3_JOAN
Coste Unitario
16
0.2
0.5
0.15
10
0.20
0.15
0.15
0.10
Coste
32
0.20
2
1.20
10
0.40
0.60
0.30
1
ON-OFF
INTERRUPTOR_JOAN
CNY70
MASAS
INICIO, SENSOR CONTACTO
BORNIER 1
9V
PULSADOR_JOAN
CONN-H10
2
2
Bornier 2
9V
0.30
10
0.60
20
2
8
1
1
1
1
1
3
1
2
14
8
6
4
2
SER1, SER2
SERVOMOTOR-PWM_JOAN
Arandela Plstico
RF1
Conector de RF2
RF2
RV1
CRISTAL
Placa de C.I.
Zcalo de C.I.
Zcalo de C.I.
Separadores metlicos Macho-Hembra
Tuercas
Tornillos
Tornillos
Rueda Madera
Mtrica 3
ANTENA_JOAN
CONN-SIL15
CEBEK-C-0504_JOAN
5k
CRYSTAL_JOAN (1 MHz)
70 x 75 cm.
28 patillas
6 patillas
Mtrica 3
Mtrica 3
Mtrica 3
Mtrica 3
Dimetro 6.4cm
5
0.05
0.0
0.5
7
0.30
1
5.5
0.5
0.5
0.5
0.1
0.1
0.1
0.5
10
0.4
0.0
0.50
7
0.30
1
16.5
0.50
1
7
0.80
0.60
0.40
1
BATERIA
Coste total
132,70
Listado General
6.2.- Mando.
Mando.DSN
Pedro Alonso Sanz,
7 Resistencias.
Cantidad:
6
Referencia
R1E-R6E
Valor
220
Coste Unitario
0.05
Coste
0.30
25
R7E
2.2k
0.05
0.05
Valor
220uF
15pF
Coste Unitario
0.30
0.05
Coste
0.60
0.10
Referencia
U1E
U2E
Valor
PIC16F876_JOAN
7805_JOAN
Coste Unitario
5
1
Coste
5
1
Referencia
Q1E
Valor
BD136_JOAN
Coste Unitario
1
Coste
1
Referencia
D1E
D2E
D3E-D5E, D7E
D6E
Valor
LED-YELLOW_JOAN
LED-GREEN_JOAN
LED-RED_JOAN
1N4007_JOAN
Coste Unitario
0.20
0.20
0.20
0.20
Coste
0.20
0.20
0.80
0.20
Valor
Bornier 2
BORNIER1_JOAN
CONN-SIL15
CEBEK-C-0503_JOAN
PULSADOR_JOAN
INTERRUPTOR_JOAN
CRYSTAL_JOAN
(4 MHz)
50 x 110 cm.
28 patillas
9V
Mtrica 3
Mtrica 3
Mtrica 3 x 10 mm.
Coste Unitario
0.30
0.00
0.15
7
0.20
1
1
Coste
0.30
0.00
0.15
7
1
1
1
6
0.5
1
0.5
0.1
0.1
0.5
1
6
0.5
1
2
0.4
0.4
0.5
1
4 Condensadores.
Cantidad:
2
2
Referencia
C1E, C2E
C3E, C4E
2 Circuitos Integrados.
Cantidad:
1
1
1 Transistor.
Cantidad:
1
7 Diodos.
Cantidad:
1
1
4
1
28 Componentes diversos.
Cantidad:
1
1
1
1
5
1
1
Referencia
Conector de BAT1E
CON1E
Conector de E_RF1E
E_RF1E
SW1E-SW5E
SW6E
X1E
1
1
1
4
4
4
1
1
Placa de C.I.
Zcalo de C.I.
Batera de petaca
Separadores metlicos Macho-Hembra
Tuercas
Tornillos
Porta Bateras
Soporte de plstico
Coste total 2
50 x 110 cm.
Mando
31,75
26
200
600
200
200
100
200
______
1500
7.2.- Material.
8.- Referencias.
[1] Libro:
[2] Libro:
[3] Libro:
www.microchip.com
www.datasheetcatalog.com
27
// TRISA en 85h.
// PORTA en 05h.
// TRISB en 86h.
// PORTB en 06h.
// TRISC en 87h.
// PORTC en 07h.
// Motor parado.
}
}
28
// TRISA en 85h.
// PORTA en 05h.
// TRISB en 86h.
// PORTB en 06h.
// TRISC en 87h.
// PORTC en 07h.
// Giro Derecha.
if(RB5==1){
RB2 = 1;
RB3 = 0;
RA4 = 0;
RC0 = 1;
}
// Giro Izquierda.
if(RB6==1){
RB2 = 0;
RB3 = 1;
RA4 = 0;
RC0 = 1;
}
// Giro adelante.
29
// Giro atrs.
}
}
// Bucle infinito.
TH = 41;
Futaba_RC2(TH);
delay_ms(1000);
TH = 57;
Futaba_RC2(TH);
delay_ms(1000);
TH = 73;
Futaba_RC2(TH);
delay_ms(1000);
TH = 100;
Futaba_RC2(TH);
delay_ms(2000);
TH = 41;
Futaba_RC2(TH);
delay_ms(1000);
TH = 25;
Futaba_RC2(TH);
delay_ms(1000);
}
}
30
// Inicializamos el LCD.
for (;;)
{
set_adc_channel(0);
delay_us(20);
q = read_adc();
v = (5.0 * q) / 1024.0;
d=Gp2d12_v_d(v);
// Bucle infinito.
// Habilitacin canal 0 "AN0"
// Retardo de 20uS necesaria para respetar el tiempo de Adquisicion Tad.
// Lectura canal 0 "AN0"
// Conversion a tension del codigo digital "q".
lcd_gotoxy(1,1);
// Posicionamos el Cursor en la posicion 1, linea 1.
printf(lcd_putc, "voltios = %01.3fV", v);
// Saltamos de linea y escribimos en el
//LCD "VOLTAJE =" y 4 digitos de "P"
// en formato truncado de 4 digitos con 3 decimales y el caracter "V".
lcd_gotoxy(1,2);
printf(lcd_putc, "d = %01.3fcm",d );
// Saltamos de linea y escribimos en el
//LCD "VOLTAJE =" y 4 digitos de "P"
// en formato truncado de 4 digitos con 3 decimales y el caracter "V".
}
}
31
// TRISA en 85h.
// PORTA en 05h.
// TRISB en 86h.
// PORTB en 06h.
// TRISC en 87h.
// PORTC en 07h.
// TRISA en 85h.
// PORTA en 05h.
32
// TRISB en 86h.
// PORTB en 06h.
// TRISC en 87h.
// PORTC en 07h.
// TRISA en 85h.
// PORTA en 05h.
// TRISB en 86h.
// PORTB en 06h.
33
// TRISC en 87h.
// PORTC en 07h.
// TRISA en 85h.
// RB1 en 0x06 patilla 3.
// RB0 en 0x06 patilla 2.
// RA4 en 0X05 patilla 4.
// RC0 en 0x07 patilla 0.
n = portB;
RBIF = 0;
enable_interrupts(int_rb);
enable_interrupts(int_ext);
ext_int_edge(L_TO_H);
enable_interrupts(GLOBAL);
while (TRUE)
{
gp2d12();
}
}
// ****** Atencin a la interrupcin por cambio en RB4,RB5,RB6 y RB7. ***************
#INT_RB
void cny70 (void)
{
int i;
while(RB5==1|RB6==1){
RB2 = 1;
RB3 = 0;
RA4 = 1;
34
RB2 = 1;
RB3 = 0;
RA4 = 1;
RC0 = 0;
}
i = portB;
setup_adc_ports(0);
for (;;)
{
delay_ms(20);
q = read_adc();
v = (5.0 * q) / 1024.0;
// Bucle infinito.
// Retardo de 20uS necesaria para respetar el tiempo de Adquisicion Tad.
// Lectura canal 0 "AN0"
// Conversion a tension del codigo digital "q".
d=Gp2d12_v_d(v);
if (d>=8&&d<=30){
RB3 = 1;
RB2 = 0;
RA4 = 0;
RC0 = 1;
}
else{
RB3 = 0;
RB2 = 0;
RA4 = 0;
RC0 = 0;
}
}
}
35
36
TH = THmed;
set_pwm2_duty(TH);
delay_ms(5);
}
void Inicializacion_Futaba_RC2()
{
int16 TH;
setup_timer_2(T2_DIV_BY_16,249,1);
// setup_timer(Prescaler,PR2,Postscaler)
// Configuracin timer2. Si el Periodo = 16mS ----> T = 16000uS
// T = [PR2+1] x Tcm x Postscaler
// PR2 puede valer de 0 a 255.
// Tcm es el tiempo de Ciclo Maquina. Tcm = 4/Fosc = 4/1.000.000 hz = 4uS.
// Prescaler puede valer 1,4,16
// Postscaler puede valer 1.
// 16000uS = [PR2+1] x 1 x 16
// PR2 =[T/(Tcm x Preescaler x Postscaler)]-1
// PR2 =[16000uS/(4uS x 16 x 1)]-1 = 249
(en C 249)
setup_ccp1(CCP_PWM);
TH = THmed;
set_pwm1_duty(TH);
delay_ms(5);
}
void Futaba_RC1(int16 TH)
{
TH = TH+THmin;
if(TH>THmin && TH<THmax) set_pwm2_duty(TH);
if(TH<=THmin)
{
TH=THmin+1;
set_pwm2_duty(TH);
}
if(TH>=THmax)
{
TH=THmax-1;
set_pwm2_duty(TH);
}
delay_ms(5);
// Tiene que transcurrir un tiempo mayor que el periodo de la senal T =16000 us,
37
10.2.- LCD1.
///////////////////////////////////////////////////////////////////////////////////////////////////////////
////
LCDD.C
////
////
Driver for common LCD modules
////
////
////
//// lcd_init() Must be called before any other function.
////
////
////
//// lcd_putc(c) Will display c on the next position of the LCD.
////
////
The following have special meaning:
////
////
\f Clear display
////
////
\n Go to start of second line
////
////
\b Move back one position
////
////
////
//// lcd_gotoxy(x,y) Set write position on LCD (upper left is 1,1)
////
////
////
//// lcd_getc(x,y) Returns character at position x,y on LCD
////
////
////
///////////////////////////////////////////////////////////////////////////////////////////////////////////
////
(C) Copyright 1996,2003 Custom Computer Services
////
//// This source code may only be used by licensed users of the CCS C ////
//// compiler. This source code may only be distributed to other
////
//// licensed users of the CCS C compiler. No other use, reproduction ////
//// or distribution is permitted without written permission.
////
//// Derivative programs created using this software in object code
////
//// form are not restricted in any way.
////
///////////////////////////////////////////////////////////////////////////////////////////////////////////
38
39
40
10.3.- KBD1.
///////////////////////////////////////////////////////////////////////////////////////////////////////////
////
KBDD.C
////
////
Generic keypad scan driver
////
////
////
//// kbd_init() Must be called before any other function.
////
////
////
//// c = kbd_getc(c) Will return a key value if pressed or /0 if not
////
////
This function should be called frequently so as
////
////
not to miss a key press.
////
////
////
///////////////////////////////////////////////////////////////////////////////////////////////////////////
////
(C) Copyright 1996,2003 Custom Computer Services
////
//// This source code may only be used by licensed users of the CCS C ////
//// compiler. This source code may only be distributed to other
////
//// licensed users of the CCS C compiler. No other use, reproduction ////
//// or distribution is permitted without written permission.
////
//// Derivative programs created using this software in object code
////
//// form are not restricted in any way.
////
///////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////// The following defines the keypad layout on port D
// Un-comment the following define to use port B
#define use_portb_kbd TRUE
// Make sure the port used has pull-up resistors (or the LCD) on
// the column pins
#if defined(__PCH__)
#if defined use_portb_kbd
#byte kbd = 0xF81
41
void kbd_init() {
}
char kbd_getc( ) {
42
43
10.4.- 16F876.
//////// Standard Header file for the PIC16F876 device ////////////////
#device PIC16F876
#nolist
//////// Program memory: 8192x14 Data RAM: 367 Stack: 8
//////// I/O: 22 Analog Pins: 5
//////// Data EEPROM: 256
//////// C Scratch area: 77 ID Location: 2000
//////// Fuses: LP,XT,HS,RC,NOWDT,WDT,NOPUT,PUT,PROTECT,PROTECT_5%
//////// Fuses: PROTECT_50%,NOPROTECT,NOBROWNOUT,BROWNOUT,LVP,NOLVP,CPD
//////// Fuses: NOCPD,WRT,NOWRT,DEBUG,NODEBUG
////////
////////////////////////////////////////////////////////////////// I/O
// Discrete I/O Functions: SET_TRIS_x(), OUTPUT_x(), INPUT_x(),
//
PORT_B_PULLUPS(), INPUT(),
//
OUTPUT_LOW(), OUTPUT_HIGH(),
//
OUTPUT_FLOAT(), OUTPUT_BIT()
// Constants used to identify pins in the above are:
#define PIN_A0
#define PIN_A1
#define PIN_A2
#define PIN_A3
#define PIN_A4
#define PIN_A5
40
41
42
43
44
45
#define PIN_B0
#define PIN_B1
#define PIN_B2
#define PIN_B3
#define PIN_B4
#define PIN_B5
#define PIN_B6
#define PIN_B7
48
49
50
51
52
53
54
55
#define PIN_C0
#define PIN_C1
#define PIN_C2
#define PIN_C3
#define PIN_C4
#define PIN_C5
#define PIN_C6
#define PIN_C7
56
57
58
59
60
61
62
63
44
////////////////////////////////////////////////////////////////// Timer 0
// Timer 0 (AKA RTCC)Functions: SETUP_COUNTERS() or SETUP_TIMER_0(),
//
SET_TIMER0() or SET_RTCC(),
//
GET_TIMER0() or GET_RTCC()
// Constants used for SETUP_TIMER_0() are:
#define RTCC_INTERNAL 0
#define RTCC_EXT_L_TO_H 32
#define RTCC_EXT_H_TO_L 48
#define RTCC_DIV_1
#define RTCC_DIV_2
#define RTCC_DIV_4
#define RTCC_DIV_8
#define RTCC_DIV_16
#define RTCC_DIV_32
#define RTCC_DIV_64
#define RTCC_DIV_128
#define RTCC_DIV_256
8
0
1
2
3
4
5
6
7
#define RTCC_8_BIT
45
#define T1_DIV_BY_1
#define T1_DIV_BY_2
#define T1_DIV_BY_4
#define T1_DIV_BY_8
0
0x10
0x20
0x30
////////////////////////////////////////////////////////////////// Timer 2
// Timer 2 Functions: SETUP_TIMER_2, GET_TIMER2, SET_TIMER2
// Constants used for SETUP_TIMER_2() are:
#define T2_DISABLED
0
#define T2_DIV_BY_1
4
#define T2_DIV_BY_4
5
#define T2_DIV_BY_16
6
////////////////////////////////////////////////////////////////// CCP
// CCP Functions: SETUP_CCPx, SET_PWMx_DUTY
// CCP Variables: CCP_x, CCP_x_LOW, CCP_x_HIGH
// Constants used for SETUP_CCPx() are:
#define CCP_OFF
0
#define CCP_CAPTURE_FE
4
#define CCP_CAPTURE_RE
5
#define CCP_CAPTURE_DIV_4
6
#define CCP_CAPTURE_DIV_16
7
#define CCP_COMPARE_SET_ON_MATCH
8
#define CCP_COMPARE_CLR_ON_MATCH
9
#define CCP_COMPARE_INT
0xA
#define CCP_COMPARE_RESET_TIMER
0xB
#define CCP_PWM
0xC
#define CCP_PWM_PLUS_1
0x1c
#define CCP_PWM_PLUS_2
0x2c
#define CCP_PWM_PLUS_3
0x3c
long CCP_1;
#byte CCP_1 =
0x15
#byte CCP_1_LOW=
0x15
#byte CCP_1_HIGH=
0x16
long CCP_2;
#byte CCP_2 =
0x1B
#byte CCP_2_LOW=
0x1B
#byte CCP_2_HIGH=
0x1C
////////////////////////////////////////////////////////////////// SPI
// SPI Functions: SETUP_SPI, SPI_WRITE, SPI_READ, SPI_DATA_IN
// Constants used in SETUP_SSP() are:
#define SPI_MASTER
0x20
#define SPI_SLAVE
0x24
#define SPI_L_TO_H
0
#define SPI_H_TO_L
0x10
#define SPI_CLK_DIV_4 0
#define SPI_CLK_DIV_16 1
#define SPI_CLK_DIV_64 2
#define SPI_CLK_T2
3
#define SPI_SS_DISABLED 1
46
////////////////////////////////////////////////////////////////// ADC
// ADC Functions: SETUP_ADC(), SETUP_ADC_PORTS() (aka SETUP_PORT_A),
//
SET_ADC_CHANNEL(), READ_ADC()
// Constants used for SETUP_ADC() are:
#define ADC_OFF
0
// ADC Off
#define ADC_CLOCK_DIV_2 0x100
#define ADC_CLOCK_DIV_8 0x40
#define ADC_CLOCK_DIV_32 0x80
#define ADC_CLOCK_INTERNAL 0xc0
// Internal 2-6us
////////////////////////////////////////////////////////////////// INT
// Interrupt Functions: ENABLE_INTERRUPTS(), DISABLE_INTERRUPTS(),
//
EXT_INT_EDGE()
//
// Constants used in EXT_INT_EDGE() are:
#define L_TO_H
0x40
#define H_TO_L
0
// Constants used in ENABLE/DISABLE_INTERRUPTS() are:
#define GLOBAL
0x0BC0
47
0x0B20
0x0B08
0x0B10
0x8C40
0x8C10
0x8C20
0x8C01
0x8C02
0x8C04
0x8D01
0x8C08
0x8D08
0x8D10
0x0B20
48
49