resumen_proyecto3_2p

9
Arduino Lenguaje: Processing/Wiring (basado en JAVA) Microprocesador: AtMega8 Open-Hardware: de libre acceso Placas: Serie, USB, Prototipos, stand-alone, Shields Placa serie: puerto RS232 Placa USB: puerto USB Arduino UNO: Microcontrolador: ATmega328 Memoria Flash: 32 Kb RAM: 2 Kb EEPROM: 1 Kb Placa de Prototipos: Matriz de agujeros para hardware adicional Es necesaria otra placa para la programación Placa Stand-Alone: Todos los esquemas del Arduino están disponibles para hacerlo en un protoboard. Shields: Placas para montar encima de las placas Arduino para extender sus funcionalidades. Ejemplos: Xbee (intercomunicador inalámbrico), Motor Shield(controlar motores y encoders), Ethernet Shield (conectar el Arduino a red Ethernet) Utilización: desarrollo de objetos interactivos autónomos. Lenguaje: Setup(): llamado al comienzo del programa para inicializar variables, definir los modos de los pines, indicar librerías, etc. Loop(): es un bucle que se repite indefinidamente. Es donde va el programa principal. Sketch: nombre utilizado para un programa. Comentarios: una línea//, multilíneas /*…*/ Algunas funciones: pinMode(Pin, Modo E/S)

Upload: enrique-paiva

Post on 07-Jul-2016

215 views

Category:

Documents


2 download

DESCRIPTION

Resumen de la materia proyecto 3, enfoque sobre arduino y propeller

TRANSCRIPT

Page 1: Resumen_Proyecto3_2P

Arduino

Lenguaje: Processing/Wiring (basado en JAVA)

Microprocesador: AtMega8

Open-Hardware: de libre acceso

Placas: Serie, USB, Prototipos, stand-alone, Shields

Placa serie: puerto RS232

Placa USB: puerto USB

Arduino UNO:

Microcontrolador: ATmega328

Memoria Flash: 32 Kb

RAM: 2 Kb

EEPROM: 1 Kb

Placa de Prototipos:

Matriz de agujeros para hardware adicional

Es necesaria otra placa para la programación

Placa Stand-Alone:

Todos los esquemas del Arduino están disponibles para hacerlo en un protoboard.

Shields:

Placas para montar encima de las placas Arduino para extender sus funcionalidades.

Ejemplos: Xbee (intercomunicador inalámbrico), Motor Shield(controlar motores y encoders),

Ethernet Shield (conectar el Arduino a red Ethernet)

Utilización: desarrollo de objetos interactivos autónomos.

Lenguaje:

Setup(): llamado al comienzo del programa para inicializar variables, definir los modos de los

pines, indicar librerías, etc.

Loop(): es un bucle que se repite indefinidamente. Es donde va el programa principal.

Sketch: nombre utilizado para un programa.

Comentarios: una línea//, multilíneas /*…*/

Algunas funciones:

pinMode(Pin, Modo E/S)

Page 2: Resumen_Proyecto3_2P

digitalWrite(Pin, Modo H/L)

delay(tiempo(ms))

Variables:

Char: caracteres ASCII, 1 byte, char var=’…’

Byte: 8 bits, valores numéricos de 127 a -128, byte numero …

Int: tipo entero de datos, 16 bits, rango de -32768 a 32767

Long: tipo dato largo o entero largo, 32 bits, rango de -2.147.483.648 a 2.147.483.647

Boolean: valores true/false, boolean var = …

Vector: estructura de datos int Vec[longitud]={}

Int digitalRead(pin): captura el valor del pin digital especificado (1/0)

Int analogRead(pin): captura el valor del pin analógico especificado (0/1024)

analogWrite(pin, valor): asigna un valor analógico al pin especificado, no es necesario declarar

pines analógicos como E/S.

Serial.begin(9600): inicializa el puerto serial a 9600

println: imprime línea a línea en el Serial Monitor

if(): comprueba si la condición contenida () se ha cumplido

if()…else: agrupa múltiples comprobaciones

for: realiza el control sobre una secuencia de repetición. Ej: for (int=1; i<=8, i++) {…}

switch case: estructura de control del flujo. Switch (var) {case var: … break; }

Arduino Software: IDE (Integrated Development Enviroment), Processing, JAVA

Librerías: proven funcionalidad extra al sketch. Importar librerías primero

EEPROM, Ethernet, Firmata, LiquidCrystal, Servo, SoftwareSerial, Stepper, Wire.

Page 3: Resumen_Proyecto3_2P

Propeller

El Propeller proporciona flexibilidad y potencia a través de sus ochos procesadores, llamados Cogs,

que puede realizar simultáneamente tareas independientes o cooperativas. Los Cogs comparten de

E/S y otros recursos.

Cada uno de estos ochos procesadores (Cogs) es de 32 bits, con una velocidad de procesos de 20

MIPS usando un pulso de reloj de 80 MHz. Es decir, en un momento en que están trabajando todos

los Cogs, tenemos una capacidad de proceso de 160 MIPS.

Cada procesador tiene su propia RAM local de 2Kb (512 registros de 32 bits). También existe una

memoria común, compartida, que se divide en dos secciones: una RAM de 32 Kb y una ROM de 32

Kb.

Especificaciones

La arquitectura del Propeller

La arquitectura del Propeller se basa en:

8 procesadores, denominados Cogs

Recursos propios de cada procesador

Recursos compartidos

Un controlador principal, llamada Hub.

El Hub se encarga de:

1. Mantener la integridad del sistema

2. Asignar el funcionamiento de los Cogs y el reparo de los recursos comunes

Page 4: Resumen_Proyecto3_2P

3. Controlar que el Cogs pueda tener acceso a los recursos comunes-exclusivos (mutuo-

exclusivo), tales como RAM/ROM principal, registros de configuración, etc.

4. Proporcionar el acceso exclusivo a los recursos siguiendo el procedimiento “Round

Robin”, sin importar cuantos Cogs están funcionando.

Los recursos compartidos:

Hay dos tipos de recursos compartidos en el Propeller:

1. Común

2. Mutuo-exclusivo

Los recursos comunes se pueden emplear cualquier momento por cualquier número de

Cogs.

Los recursos mutuo-exclusivos se puede alcanzar por cualquier Cog, pero solamente un

Cog a la vez.

Los recursos comunes

son los pines de E/S y el

contador del sistema. El

resto de los recursos

compartidos son mutuo-

exclusivos por

naturaleza y el acceso a

ellos es controlado por

el Hub.

EL reloj del sistema

El reloj del sistema es el oscilador principal o central para casi todos los componentes del

Propeller

La señal del reloj del sistema se proporciona a partir de una de las tres posibles fuentes:

o El oscilador interno de RC

o El circuito de PLL

o El oscilador de cristal

La fuente se determina en los ajustes del registro CLK, que es seleccionable en tiempo de

ejecución.

Un oscilador externo puede usar el multiplicador PLL que puede ser de 1x, 2x, 4x, 8x, 16x y

puede ser modificado en tiempo de ejecución.

El reloj puede ir de 32Khz hasta 80Mhz.

Page 5: Resumen_Proyecto3_2P

Cogs (procesadores).

El Propeller contiene ocho procesadores, llamados Cogs, numerados del 0 a 7.

Cada Cog contiene los siguientes componentes:

o Un procesador

o RAM local de @Kb configurados como 512 registros

o Dos asistentes de E/S

o 2 PLLs

o Un generador de video

o Registro de salida de E/S

o Registro de dirección de E/S

Pueden ejecutar tareas independientes

Pueden ejecutar instrucciones simultáneamente

Pueden tener acceso a los mismos recursos compartidos, como los pines de E/S, la RAM

global, y el contador del sistema

Pueden arrancar y parar en el tiempo de ejecución

El Hub

Para mantener la integridad del sistema, los recursos mutuo-exclusivos no debe ser accedido por

más de un Cog a la vez. El Hub mantiene esta integridad controlando el acceso a los recursos

mutuo-exclusivos, dando a cada Cog un turno para acceder a ellos de forma Round Robin desde el

Cog 0 a el Cog 7 y volviendo al Cog 0

EL Hub y el bus que controla, funcionan la mitad de la frecuencia de reloj del sistema. Esto

significa que el Hub da acceso al Cog a los recursos mutuo-exclusivos una vez cada 16 ciclos de

reloj del sistema

Pines de E/S

El Propeller tiene 32 pines de E/S, 28 de los cuales están destinados para fines de propósito

general. Cuatro pines de E/S (28-31) son de propósito especial durante el arranque y luego están

disponibles para usos generales

Después del arranque, cualquier pin de E/S se puede utilizar por cualquier Cog en cualquier

momento puesto que el conjunto de pines de E/S es un recurso común.

Contador del Sistema (común)

Es un contador global de 32 bits.

Los Cogs pueden leer el contador del sistema (vía su registro CNT) para realizar cálculos de

sincronización y pueden utilizar el comando de WAITCNT para crear retrasos eficaces

dentro de su proceso.

Page 6: Resumen_Proyecto3_2P

Registro CLK (común)

El registro de CLK es el de control de configuración del reloj del sistema; determina la

fuente y las características del Reloj del Sistema.

El registro de CLK configura el oscilador RC, el reloj PLL, el oscilador de cristal, y los

circuitos del selector del reloj.

Es configurado en el tiempo de compilación por la declaración CLKMODE

Semáforos (mutex)

Hay ocho semáforos disponibles para facilitar el acceso exclusivo a los recursos definidos

por el usuario entre los múltiples Cogs.

Los semáforos son bits globales accedidos a través del Hub con las siguientes instrucciones:

LOCKNEW, LOCKRET, LOCKSET y LOCKCLR.

Los semáforos solo pueden ser accedidos a través del Hub, sólo un Cog a la vez puede

afectarlos

Memoria Principal (mutex)

La memoria principal es un bloque de 64 K bytes que es accesible por todos los Cogs como

recurso mutuo-exclusivo a través del Hub.

Está formada por 32 KB de RAM y 32 KB de ROM.

Los 32 KB de RAM principal son de propósito general y constituyen el destino de una

“aplicación Propeller”, que puede ser descargada de un host o cargada de los 32 KB de

EEPROM externa.

La ROM se utiliza para almacenar la definición de caracteres, funciones matemáticas, el

Boot Loader y el intérprete Spin.

Definición de caracteres

La primera mitad de la ROM contiene un sistema de 256 definiciones de carácter. Cada definición

de carácter corresponde a 16 píxeles de ancho y 32 píxeles de alto. Estas definiciones de carácter

se pueden utilizar para las presentaciones de vídeo, LCD gráfico, impresión, etc.

El arranque o reset

El proceso de encendido o reset se divide en las siguientes fases:

1. Carga el programa embebido del Boot Loader al Cog 0 y arranca.

2. El Boot loader realiza una o más de las siguientes tareas en este orden:

a. Detecta la comunicación de un host, en los pines P30 y P31. Si se detecta conversa con

el host para identificar el chip Propeller y posiblemente para descargar un programa

en RAM global y opcionalmente en la EEPROM externa de 32Kb.

Page 7: Resumen_Proyecto3_2P

b. Si no se detectó ninguna comunicación, el Boot Loader busca la EEPROM externa 32Kb

en los pines P28 y P29. Si se detecta una EEPROM, se carga los 32KBen el RAM global

del Propeller.

c. Si no se detectó ninguna EEPROM, el Boot Loader se para, se detiene el Cog 0, el chip

del Propeller entra en modo de parada, y todos los pines de E/S se fijan como

entradas.

3. Si los pasos 2a y 2b son capaces de cargar un programa a la RAM global, y el host no ha

mandado un comando de suspensión., el Cog 0 se re arranca con el intérprete Spin y el

código del usuario se ejecuta desde la RAM global.

Entorno de desarrollo

Software Propeller

El software del Propeller consta de:

Un archivo ejecutable

Unos archivos de ayuda on-line

Archivos de la biblioteca Propeller

Cada archivo de la biblioteca es un objeto independiente, disponible para utilizar en los proyectos

Propeller, con código fuente y documentación incorporada. Son realmente archivos de texto, que

pueden ser corregidos en cualquier editor de texto.

Documentación

Es posible escribir la documentación de usuario para un objeto dentro del archivo fuente del objeto.

Esto significa que habrá menos archivos para mantener

Para permitir este proceso, sean creados dos tipos de comentarios en la fuente:

1. Los comentarios código

2. Comentario de documento

El lenguaje Spin

El Propeller puede ser programado en asembler o en un lenguaje propio llamado Spin.

Bloques de código

CON: declaración de constantes

VAR: declaración de variables

OBJ: declaración de referencias de objetos

PUB: declaración de métodos públicos

PRI: declaración de métodos privados

DAT: declaración de datos

Page 8: Resumen_Proyecto3_2P

Control de Cog

COGID: obtener el ld de Cog actual

COGNEW: iniciar el siguiente Cog disponible

COGINIT: iniciar o reiniciar un Cog por su ld

COGSTOP: detener un Cog por su ld

REBOOT: resetear el chip Propeller

Control de proceso

LOCKNEW: comprobar un nuevo semáforo

LOCKRET: devolver semáforo

LOCKCLR: pone un semáforo a eros por ld

LOCKSET: fijar un semáforo por ld

WAITCNT: espera a que el contador del sistema alcance el valor

WAITPEQ: esperar a que el pin se iguale a un valor

WAITPNE: espera que el pin no se igual a un valor

WAITVID: espera a la sincronización de video y repartir el siguiente grupo color/pixel

Control de flujo

IF, ELSEIF, ELSE

CASE, OTHER

REPEAT… FROM… TO… STEP… UNTIL… WHILE

NEXT: salta el resto del bloque REPEAT y va a la siguiente iteración del bucle

QUIT sale del bucle REPEAT.

RETURN sale de PUB/PRI con estado normal y opcionalmente con un valor de retorno

ABORT sale de PUB/PRI con estado de abort y opcionalmente con un valor de retorno

Operaciones sobre pines

Dira[pin] configura un pin como entrada o salida

o Dira[1]:=1 configura como salida

o Dira[2]:=0 configura como entrada

Outa[pin] configura el pin como alto o bajo

o Outa[4]:=1 coloca el P4 como alto

o Outa[4]:=0 coloca como bajo

Ina[pin] lee un pin

Retrasos de tiempo

Los tres constructores de bloques básicos para un evento de tiempo en Spin son:

Cnt un registro que cuenta los ciclos de reloj

Page 9: Resumen_Proyecto3_2P

Clkfreq un comando que regresa la frecuencia del reloj en hz

Waitcnt un comando de espera a que el registro cnt tenga cierto valor

o waitcnt (clkfreq + cnt) ' espera por 1 s

o waitcnt(clkfreq/1000 + cnt) ' espera 1 ms

Definición del reloj de un sistema

El reloj del sistema se define en el bloque CON de la siguiente manera:

CON

o _xinfreq = 5_000_000

o _clkmode = xtal1 + pll16x

Comando Repeat

Existen diferentes formas de modificar el ciclo repeat para contar hasta cierto valor y parar.

repeat 20 ' Repite el ciclo 20 veces

repeat until valor == 20 ' Repite hasta que valor es igual a 20

repeat while valor < 20 ' Repite mientras que valor es menor que 20

repeat valor from 0 a 18 step 2 ‘asigna a valor los valores de 0 a 18 de dos en dos