Sei sulla pagina 1di 22

Curso de formacin en robtica 2011 D.

Carmona

Caractersticas de pingino. Conceptos bsicos de programacin. Entrada/Salida.

D. Carmona - CurRo 2k11

Programacin en pinguino

D. Carmona - CurRo 2k11

USB 2.0 4 temporizador/contador (1/3 de 8/16 bit). 5 Entradas analgicas 10 bit. Hasta 18 I/O digital (5 analogicas) Cristal de 20Mhz. 2 salidas PWM (3Khz) USART .

D. Carmona - CurRo 2k11

RST 13 14 15 16 17 RUN

7 6 5 4 3 2 1 0
8 9

10 11 12

D. Carmona - CurRo 2k11

Pin Digital Analog Otros name I/O usos input 0 1 2 3 4 5 6 7 8 9 10 Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes yeshw yeshw yeshw yeshw yeshw Serial Tx Serial Rx -

Microchip name RB0/AN12/INT0/FLT0/SDI/SDA RB0 RB1/AN10/INT1/SCK/SCL RB1 RB2/AN8/INT2/VMO RB2 RB3/AN9/CCP2/VPO RB3 RB4/AN11/KBI0 RB4 RB5/KBI1/PGM RB5 RB6/KBI2/PGC RB6 RB7/KBI3/PGD RB7 RC6/TX/CK RC6 RC7/RX/DT/SDO RC7 RC0/T1OSO/T13CK RC0

D. Carmona - CurRo 2k11

Pin Digital Analog Otros name I/O usos input 11 12 13 14 15 16 17 Run Yes Yes Yes Yes Yes Yes Yes No Yesall Yesall Yesall Yesall Yesall PWM PWM USB USB -

Microchip name RC1/T1OSI/CCP2/UOE RC1 RC2/CCP1 RC2 RA0/AN0 RA1/AN1 RA2/AN2/VREF-/CVREF RA2/AN2 RA3/AN3/VREF+ RA3/AN3 RA5/AN4/SS/HLVDIN/C2OU RA5/AN4 RA4/T0CKI/C1OUT/RCV RC5/D+/VP RC4/D-/VM MCLR/VPP/RE3
D. Carmona - CurRo 2k11 7

USB+ No USBUSB- No Reset No

Servos

Alimentacin 5V Sensores

Expansin

Sensores analgicos

Alimentacin de bateras

Sensores digitales

D. Carmona - CurRo 2k11

Algunas de las caractersticas del PIC 18F2550 no estn implementadas (aun) en el software de pingino. El circuito dispone de dos pulsadores:
RESET:
Reset hardware del PIC. Prepara el PIC para programar.

RUN:
Inicia la ejecucin del programa cargado en memoria.

D. Carmona - CurRo 2k11

El circuito se puede alimentar:


Por USB. (solo lo que funciona a 5V) Con alimentacin externa (entre 7.5 y 12V)

USB

Para seleccionar la forma de alimentar el circuito se utiliza un jumper situado junto al conector USB.
Externa

D. Carmona - CurRo 2k11

10

Programacin en pinguino

D. Carmona - CurRo 2k11

11

Tipo bool char short int long 1 bit

Tamao

Signo por defecto unsigned signed signed signed signed

Rango con signo -128, +127 -32.768, +32.767 -32.768, +32.767 -2.147.483.648, +2.147.483.647 ---

Rango sin signo 0, 1 0, +255 0, +65.535 0, +65.535 0, +4.294.967.295 1.175494351E-38, 3.402823466E+38 --

8 bits, 1 byte 16 bits, 2 bytes 16 bits, 2 bytes 32 bits, 4 bytes

float

4 bytes IEEE 754

signed generic

pointer 1, 2, 3 or 4 bytes

D. Carmona - CurRo 2k11

12

Los programas de pingino tienen tres funciones bsicas:


Setup: Setup
Funcin de configuracin. Se ejecuta antes de iniciar el programa. Se utiliza para configurar los dispositivos que se necesitan en el programa.

Loop: Loop
Funcin principal. Es un bucle infinito.

UserInterrupt: UserInterrupt
Funcin que se ejecuta cuando se activa alguna interrupcin del microcontrolador. El cdigo debe averiguar que produjo la interrupcin.

D. Carmona - CurRo 2k11

13

void setup () { //configuracin } void userinterrupt() { //Manejador de interrupciones } void loop () { //Programa principal }

D. Carmona - CurRo 2k11

14

Programacin en pinguino

D. Carmona - CurRo 2k11

15

Los pines de pingino nombrados del 0 al 17 son pines que pueden utilizarse como entradas o salida digitales.
Los pines 13 al 17 se pueden utilizar con entradas analgicas.

Para configurarlos pines como entrada o salida se utiliza la funcin pinMode(). pinMode La configuracin de los pines de E/S digital se hace normalmente en la funcin setup(). setup

D. Carmona - CurRo 2k11

16

Configura un pin como entrada o salida Sintaxis: Sintaxis


pinMode (pin , modo)

pin:
Numero de pin de 0 a 17. (para el PIC18F2550)

modo:
Modo de funcionamiento:
INPUT: INPUT El pin funciona como entrada. OUTPUT: OUTPUT El pin funciona como salida.

Todos los pines por defecto se configuran como entradas.

D. Carmona - CurRo 2k11

17

D. Carmona - CurRo 2k11

18

D. Carmona - CurRo 2k11

19

Para escribir en un pin se utiliza la funcin digitalWrite(). Sintaxis: Sintaxis digitalWrite(pin,valor) Pin:
Pin que se quiere escribir.

Valor:
Nivel lgico que se quiere escribir en el pin
HIGH (alto, salida a la tensin de alimentacin) LOW (bajo, salida a masa).

Antes de poder escribir en un pin, debe configurarse como salida (OUTPUT) con pinMode.

D. Carmona - CurRo 2k11

20

Para leer el estado de un pin se utiliza la funcin digitalRead(). Sintaxis: Sintaxis bool digitalRead(pin) Pin:
Pin que se quiere leer.

Resultado:
Devuelve un valor booleano (0 1) en funcin del nivel de tensin del pin.

Antes de leer el estado un pin, debe configurarse como entrada (INPUT) con pinMode.
Si leemos un pin de salida, se lee el valor del latch.

D. Carmona - CurRo 2k11

21

En los PIC 18F se utilizan tres registros para la configuracin y uso de los puertos de E/S.
Registro PORTx: PORTx
Registro que contiene el estado lgico de los pines del puerto x.

Registro TRISx: TRISx


Registro que configura los pines del puerto x como entrada o salida. Bit a 1 pin de entrada. Bit a 0 pin de salida.

Registro LATx: LATx


Registro utilizado en operaciones de lectura-modificacinescritura. Se recomienda su uso para escribir en el puerto.

D. Carmona - CurRo 2k11

22

Configurando el puerto en bloque:


TRISA=0x00; TRISB=0xFF; TRISC=0xF0;

Configuracin pin a pin:


TRISAbits.TRISA3=0; //pin3 del PORTA como salida. TRISCbits.TRISC4=1; //pin4 del PORTC como entrada.

D. Carmona - CurRo 2k11

23

Escribiendo los 8 bits del puerto:

PORTA=0xA5; LATA=0xA5;
Escribiendo bit a bit:

//Escribe 10100101 //Escribe 10100101

El puerto debe configurarse como salida con TRISx.

PORTBbits.RB2=1; //Setea el pin2 del puerto B (RB2) LATBbits.LATB2=1; PORTCbits.RC0=0; //Resetea el pin0 del puerto C (RC0) LATCbits.LATC0=0;
D. Carmona - CurRo 2k11 24

Leyendo un puerto (8 bits):


Valor = PORTC;

//Lee los 8 pines del PORTC [RC0..RC7]


Leyendo un pin del puerto:
PORTBbits.RB1=PORTCbits.RC1; //Escribe en RB1 el valor del pin RC1

D. Carmona - CurRo 2k11

25

Los pines del 13 al 17 de pinguino pueden usarse como entradas analgicas de 10 bit. Para leer el valor de las entradas analgicas se utiliza la funcin analogRead(). Sintaxis: unsigned int analogRead(pin)
Pin Pin: pin a leer (entre 13 y 17). Resultado: Resultado Devuelve un valor entre 0 y 1023 (10 bit) proporcional a la tensin en el pin indicado.
1023=5V 0=0V.

D. Carmona - CurRo 2k11

26

No es necesario configurar con pinMode. pinMode. Debe estar configurado como entrada (por defecto).

D. Carmona - CurRo 2k11

27

En pingino podemos utilizar la funcin analogWrite, analogWrite para generar una seal PWM.
La precisin del PWM es de 10 bit. La frecuencia es de 3Khz. Solo se puede utilizar en los pines 11 y 12.

Sintaxis: Sintaxis
analogWrite(pin,ratio);
Pin: Pin
pin que se configura como PWM (solo 11 o 12)

Ratio: Ratio
valor entre 0 y 1023. El tiempo en alto del PWM es proporcional a este valor. P.Ej: 513 PWM 50%

D. Carmona - CurRo 2k11

28

Programacin en pinguino

D. Carmona - CurRo 2k11

29

La funcin delay, delay se utiliza para hacer una pausa en el programa.


Es un retardo software.

Sintaxis: Sintaxis
delay (unsigned int milisegundos);

Funcionamiento: Funcionamiento
La ejecucin del programa queda pausada durante la cantidad de milisegundos indicada.

D. Carmona - CurRo 2k11

30

La funcin delayMicroseconds, delayMicroseconds se utiliza para hacer una pausa en el programa.


Es un retardo software.

Sintaxis: Sintaxis
delayMicroseconds (unsigned microsegundos);

Funcionamiento: Funcionamiento
La ejecucin del programa queda pausada durante la cantidad de microsegundos indicada.

D. Carmona - CurRo 2k11

31

Programacin en pinguino

D. Carmona - CurRo 2k11

32

Desde la Beta 9 el IDE de pinguino se incluyen funciones para controlar servomotores. Cualquier pin de I/O de pinguino puede utilizarse para controlar un servo.
Incluso todos los pines simultneamente.

Las funciones de control de servos hacen uso del Timer1 del microcontrolador, por lo que si se usan las funciones no podr usarse este temporizador.

D. Carmona - CurRo 2k11

33

Para configurar un pin como driver para servos se utiliza la funcin servo.attach. Sintaxis:
servo.attach (PIN); PIN);

PIN es un valor entre 0 y 17 que indica el n de pin que se quiere usar para controlar un servo.
Tambien se puede utilizar una variable de tipo unsigned char con este fin.

Esta funcin se utiliza (normalmente) dentro de la funcin setup. setup

D. Carmona - CurRo 2k11

34

D. Carmona - CurRo 2k11

35

Una vez configurado el pin como driver de servos, segenera automaticamente la seal de control del servo. Para poder volver a utilizar el pin como entrada o salida normal, se utiliza la fincion servo.detach. Sintaxis:
servo.detach (PIN); PIN);

Ejemplo:

D. Carmona - CurRo 2k11

36

Para controlar la posicin del servo se utiliza la funcin servo.write. servo.write Sintaxis:
servo.write ( PIN,posicion PIN,posicion); posicion); PIN es un valor entre 0 y 17 que indica el n de pin que se quiere usar para controlar un servo. posicion es un valor entre 1 y 250 que indica la posicin deseada en el servo:
1 posiciona el servo a la posicin -90 90 125 posiciona el servo a la posicin 0 250 posiciona el servo a la posicin 90

El valor es proporcional a la posicin:


168 ->45

Se pueden utilizar variables de tipo unsigned char con para indicar en la funcin el nmero de pin y la posicin.

D. Carmona - CurRo 2k11

37

D. Carmona - CurRo 2k11

38

En el caso de servo modificados para giro continuo, la funcin servo.write, servo.write permite el control de sentido se giro y velocidad. posicion indica:
1 El servo gira en sentido anti-horario a mxima velocidad. XX mantiene en servo parado. 250 El servo gira en sentido horario a mxima velocidad.

D. Carmona - CurRo 2k11

39

El valor que detiene el servo vara de un motor a otro, y es necesario averiguar ese valor para cada servo.
Idealmente ese valor es 125, aunque puede variar hacia arriba o abajo.

En valores prximos al de paro del motor, la velocidad de giro es menor. La relacin entre el valor posicion y velocidad de giro no es lineal.
Normalmente el motor ya gira a velocidad mxima cuando la diferencia entre el valor posicion y el valor que para el motor es mayor de 20 o 30.
D. Carmona - CurRo 2k11 40

D. Carmona - CurRo 2k11

41

servo.read (PIN); PIN);


Lee el valor de posicion del servo. No lee la posicin real, sino el ultimo valor que se ha escrito.

servo.setMaximumPulse(PIN servo.setMaximumPulse PIN); PIN


Posiciona el servo a 90

servo.setMinimumPulse(PIN servo.setMinimumPulse PIN); PIN


Posiciona el servo a -90

D. Carmona - CurRo 2k11

42

Pinguino Wiki
http://pinguino.koocotte.org/index.php/Main_Page

Pinguino tutorial
http://sites.google.com/site/pinguinotutorial/

Web oficial del proyecto pinguino


http://www.hackinglab.org/pinguino/

SDCC
http://sdcc.sourceforge.net/

Control de servos:
http://linuxdroids.wordpress.com/2010/07/29/pin guino-rutina-para-controlar-18-servos/

D. Carmona - CurRo 2k11

43

Potrebbero piacerti anche