Vous êtes sur la page 1sur 64

Atelier de Formao

Iniciao robtica mvel

Bases de Programao
Associao Nacional de Professores de
Electrotecnia e Electrnica

DEAR
Robot

Microcontrolador
Circuito

integrado em alta escala (VLSI) que


incorpora a maior parte dos elementos que
constituem um controlador e se destina a
uma determinada tarefa.
Costuma

estar incorporado no dispositivo


que controla (controlador embebido embedded controller).

Aplicaes
indstria

informtica
(perifricos: rato, teclado,...)
electrodomsticos (fornos,
mq. lavar, vdeos, etc)
sistemas AVACs
telecomunicaes
indstria automvel

Constituio
Um microcontrolador dispe normalmente
dos seguintes elementos:
processador

ou CPU
memria de dados (RAM)
memria de programa
(ROM/PROM/EPROM/EEPROM)
linhas de entrada/sada (E/S) programveis

Constituio
mdulos

de controlo de perifricos (portos


srie, paralelo,USB,I2C,etc.)
gerador de impulsos de relgio
temporizadores
co-de-guarda (watchdog)
conversores A/D e D/A
comparadores analgicos

microprocessador vs.
microcontrolador
o

microprocessador um sistema aberto


constri-se um computador com as
caractersticas desejadas juntando os
mdulos necessrios
o microcontrolador um sistema fechado
contem um computador completo e as
suas prestaes limitadas no se podem
modificar

Estrutura de um
microprocessador
bus de endereos
bus de dados

bus de controle

Memria

controlador 1 controlador 2
perifricos

perifricos

Estrutura de um
microcontrolador

perifricos

perifricos

Arquitectura interna de
um microprocessador
UCP

bus comum
de endereos

Memria
Instrues

8
bus de dados
e instrues

+
dados

Arquitectura von Neumann ou Princeton

Arquitectura interna de
um microcontrolador
Memria
de
Instrues

bus de
endereos de
instrues
10

UCP

bus de
endereos de
dados 9

14
bus de
instrues

8
bus de dados

Arquitectura Harvard

Memria
de
dados

Arquitectura interna de
um microcontrolador
RISC

- Reduced Instruction Set Computer


(35 no 16F84)
versus
CISC

- Complex Instruction Set Computer


(+150 no 8086)

Arquitectura interna de
um microcontrolador
Memria de Programa
Tipologia
PROM (Programmable Read Only Memory)
EPROM (Electrically PROM)
OTP (One Time Programmable)
EEPROM (Electrically Erasable PROM)
FLASH

Arquitectura interna de
um microcontrolador
Memria de Dados

SRAM (Static RAM)


EEPROM

Arquitectura interna de
um microcontrolador
Programao
linguagem

assembly
linguagens HLL (High Level Language):
Pascal, Basic, JAL, C
Compiladores

vs. Interpretadores

Picaxe 28X

Caractersticas:
600 linhas cdigo
21 pinos E/S
9-17 sadas
0-12 entradas
0-4 entradas A/D
2 sadas PWM

Picaxe 28X
Entradas
Analgicas
ou Digitais

Pinos de
Entrada/Sada
configurveis

Pinos de
Sada

Pinos de
Entrada/Sada
configurveis

Picaxe 28X
Entradas
Analgicas
A/D

Pinos de Sada
PWM

Linguagens de programao

PBasic (compatvel com


Basic Stamp).
Ambiente integrado de
desenvolvimento com
suporte para
programao grfica por
fluxogramas.
Editor, compilador,
programador,debugger e
simulador incorporados.

Lgica de Programao

O paradigma tradicional:
Pressupe um modelo do mundo

Sensores

Interpretao
dos sensores

Modelo
do Mundo

Actuadores

Execuo

Planeamento

Lgica de Programao

O paradigma das interaces prioritrias de Rodney


Brooks
Utiliza uma estratgia em que s os sensores so os
iniciadores dos comportamentos.
Os comportamentos so sistemas em camadas de
controlo que funcionam em paralelo, cada vez que
os sensores apropriados so activados.
Um sistema de arbitragem de prioridades utilizado
para activar o comportamento dominante.
Todos os comportamentos funcionam em paralelo,
com os de mais alto nvel a suprimirem o
funcionamento dos de nvel inferior.

Lgica de Programao

O paradigma das interaces prioritrias de


Rodney Brooks
Exemplo:
Bumpers
Sensor Cor
Sensor Pista
Sensor

Escapar
Detectar_Cor S
SeguirPista
Procedimento

Motores
Actuador

BASIC
Programa = dados + instrues
Elementos da Linguagem de Programao
BASIC
Smbolos
Variveis
Constantes
Instrues

BASIC

LABELS
As labels (etiquetas) so usadas como marcadores
em todo o programa. As labels so usadas para
marcar uma posio para onde saltar no programa
atravs de uma instruo goto, gosub ou outra
instruo.
Uma label pode ser qualquer palavra (no reservada)
e pode conter dgitos e o carcter underscore ( _ ). As
labels devem ter como carcter inicial uma letra (no
um dgito), e so definidas com o sinal dois-pontos (:)
a seguir ao nome. O sinal no necessrio quando a
label faz parte integrante de instrues.

BASIC

O compilador no case-sensitive (sensvel a


maisculas), pelo que podem ser usadas
indiscriminadamente maisculas e
minsculas.
Exemplo:
ciclo:
high 1 ; liga a sada 1
pause 500
; espera de 5 segundos
low 1 ; desliga a sada 1
PAUSE 500 ; espera de 5 segundos
goto Ciclo
; salto para o incio

BASIC

Espaos em branco e Sintaxe

Whitespace (espao em branco) o termo utilizado


pelos programadores para definirem a rea branca na
impresso de um programa. Nela se incluem os
espaos, as tabulaes e as linhas vazias. Qualquer
uma delas pode ser utilizada no programa para o
tornar mais compreensvel e facilitar a leitura.
Convencionou-se colocar as labels encostadas
esquerda. Todas as outras instrues devem ser
espaadas atravs da tecla de tabulao. Esta
conveno torna o programa mais fcil de ler e de
seguir.

BASIC

COMENTRIOS
Os comentrios comeam por um apstrofe
() ou ponto e vrgula (;) e continuam at ao
fim da linha. A instruo REM pode tambm
ser utilizada para inserir comentrios.
Exemplos:
high 0
coloca pin0 alto
high 2
;coloca pin2 alto
REM coloca pin3 alto

BASIC

CONSTANTES

As constantes podem ser declaradas de quatro


modos diferentes:
decimais, hexadecimais, binrias e ASCII.

Os nmeros decimais so escritos directamente sem


qualquer prefixo.
Os nmeros hexadecimais (hex) so precedidos pelo
sinal dlar ($).
Os nmeros binrios so precedidos pelo sinal de
percentagem (%).
Os valores ASCII so colocados entre plicas ().

BASIC

Exemplos:
100
$64
%01100100
A
Hello

B1 = B0 ^ $AA

100 em decimal
64 hex
01100100 binrio
A ascii (65)
Hello equivalente a H,
e, l, l, o.
ou exclusivo da
varivel B0 com AA hex

BASIC

SMBOLOS
Os smbolos podem ser associados a valores
constantes, nomes alias (alternativos) para variveis e
endereos de programa. Os valores constantes e os
nomes alias de variveis so atribudos fazendo seguir
ao nome do smbolo o sinal de igual (=), seguido da
varivel ou constante.
Os smbolos podem utilizar qualquer palavra que no
seja reservada (instrues).
Os smbolos podem conter letras e nmeros, mas o
primeiro carcter obrigatoriamente uma letra. O uso
dos smbolos no aumenta a dimenso do programa e
torna-o mais legvel.

BASIC

Os endereos de programa so atribudos fazendo seguir o


smbolo pelo sinal dois pontos (:).

Exemplo:
symbol LED_E = 7 define um pino de sada
symbol CONTA = B0
define o smbolo de uma varivel
let CONTA = 200 carrega a varivel com o valor 200
CICLO:
define endereo de programa
high LED_E
pause CONTA

liga a sada 7
espera 0,2 segundos (200 milisegundos)

low LED_E
pause CONTA
goto CICLO

desliga a sada 7
espera 0,2 segundos
salta para o incio CICLO

BASIC

Compreendendo a memria do PICAXE


A memria do PICAXE constituda por trs reas
diferentes. A quantidade de memria varia conforme o tipo
de PICAXE.
Memria de Programa
A memria de programa onde o programa guardado
aps uma transferncia (download). Trata-se de uma
memria rpida tipo FLASH, que se pode reprogramar at
cerca de 100 000 vezes. O programa no se perde quando
se desliga a alimentao, pelo que executado assim que
esta ligada de novo. No normalmente necessrio
apagar um programa, pois cada novo download
reprograma toda a memria.

BASIC

Num PICAXE28X pode carregar cerca de 600 linhas


de programa. Este valor aproximado, pois cada
instruo ocupa espaos diferentes em memria.
Para verificar a memria livre basta seleccionar o
menu PICAXE>Check Syntax.
Memria de Dados
A memria de dados um espao adicional de
memria do microcontrolador. Os dados tambm no
so perdidos quando se desliga a alimentao. Em
cada transferncia de dados (download) esta
memria posta a 0.

BASIC

RAM (Variveis)
A memria RAM usada para guardar dados
temporrios em variveis durante a execuo do
programa. Esta memria perde toda a informao
quando se desliga a alimentao. Existem trs tipos
de variveis usos gerais, armazenamento e
funes especiais.

BASIC

Variveis de Usos Gerais (GPR General Purpose


Registers)

Existem 14 variveis de usos gerais tipo byte. Estas


variveis byte so designadas b0 a b13. As variveis
tipo byte (8 bits) podem guardar nmeros inteiros
entre 0 e 255.

Para nmeros maiores podem combinar-se duas


variveis byte de modo a criar uma varivel word,
que capaz de guardar nmeros inteiros entre 0 e
65535.

BASIC

Estas variveis word so designadas w0 a w6, e so


construdas do seguinte modo:
w0 = b1 : b0
w1 = b3 : b2
w2 = b5 : b4
w3 = b7 : b6
w4 = b9 : b8
w5 = b11 : b10
w6 = b13 : b12

BASIC

Para alm disso os bytes b0 e b1 (w0) podem ser


divididos em variveis bit.
As variveis bit podem ser utilizadas onde for
necessrio guardar um nico bit (0 ou 1) numa
varivel
b0 = bit7: bit6: bit5: bit4: bit3: bit2: bit1: bit0
b1 = bit15: bit14: bit13: bit12: bit11: bit10: bit9: bit8
Pode utilizar qualquer varivel word, byte ou bit numa
expresso matemtica ou instruo que utilize
variveis.

BASIC

Variveis para Funes Especiais (SFR)


As variveis disponveis para funes especiais
dependem do tipo de PICAXE.
pins = representa o dado lido no porto de entrada
pins = representa o porto de sada na escrita

Note que pins uma pseudo varivel que se pode


aplicar tanto a portos de entrada como de sada.
Quando usado esquerda de uma expresso de
atribuio de pinos aplica-se ao porto de sada.

BASIC

Por exemplo,
let pins = %11000011

vai colocar as sadas 7,6,1,0 altas e as


restantes baixas.
O sinal % indica ao compilador que se est a
trabalhar em binrio, em vez de decimal.
Quando usado direita de uma expresso de
atribuio de pinos aplica-se ao porto de entrada
(porto C no PICAXE28X).
Por exemplo,
let b1 = pins
vai guardar em b1 o estado actual do porto de entrada.

BASIC

A varivel pins est separada em variveis bit


individuais para leitura de entradas bit individuais
atravs da instruo if...then.
pins = pin7 : pin6 : pin5 : pin4 : pin3 : pin2 : pin1 : pin0

Programming Editor

Instalao e password (picaxebegin)


Configurao (Menu View/Options)
Mode PICAXE-28X
Options: 4MHz

Serial Port
Language

Programming Editor

Programao em BASIC
Programao por Fluxograma

Programming Editor

Programao por Fluxograma


Simbologia
Incio/Fim
Processo:
aco a ser
realizada
E/S define
entradas e
sadas
Deciso a
tomar
Conector

Subrotina

Programming Editor-exemplo
blue

red
Program for Washing Machine Model

main:high 0
label_6:
label_D:
high 7

start

low 4

pin0=1
N

Check
door switch

Green LED off

Lock solenoid

low 4
ifDopin0=1
then
let b0=label_19
0
motor
sequence
goto label_D
let pins = 96

pause 3000
high 4

pin0=0

Green LED on

Door open again!

N
pin6=1
N
pin7=1
N

Y
Test red & blue switches

let pins = 32

label_19: high 4
pause 2000
low 7
label_20:
if pin0=0 then
label_6
if pin6=1 then label_4D
pins = 160
high 6
if pin7=1 let
then
label_44
goto label_20
pause 3000

pause 2000

low 6

let b0=b0+ 1

Y
gosub blue

gosub red

label_44: gosub blue


goto label_6b0> 10
low 0
Unlock door

label_4D:
gosub red let pins = 16
return
goto label_6
return

Programming Editor-exemplo
start

gosub ler_cor

let b0=pins& 224

000

001
b0= 0

010
b0= 32

011
b0= 64

gosub avancar

gosub esquerda

forward

pwmout 1,10,40

halt

101
b0= 128

gosub avancar

gosub esquerda

parar
avancar

100
b0= 96

gosub direita

esquerda

direita

alarme

left

right

sound 0,(50,50)

pwmout 1,10,40

pwmout 1,10,40

pause 1000

pwmout 1,10,40

110
b0= 160
Y

pwmout 2,10,40
pwmout 2,10,40

pwmout 2,10,40

return

b1> 20

b1< 70

return

As coisas complicam-se

gosub parar

readadc 0,b1

return
return

gosub esquerda

ler_cor

Y
return

b0= 224

gosub avancar

b1> 132

b1< 150

Y
pwmout 2,10,40

111
b0= 192

gosub alarme

return

BASIC

Instrues BASIC essenciais


Controlo de pinos de Sada

high 1
low 2
pins=%00000110
high portc 1

Leitura de pinos de entrada


b0=pins
if pin0=1

BASIC

Sadas PWM
Instruo pwmout
Sintaxe:
PWMOUT pino, perodo, dutycycle
Pino uma varivel/constante que especifica o pino E/S
a usar (1 ou 2).
Perodo uma varivel/constante (0-255) que estabelece
o perodo do sinal de PWM.
Duty cycle uma varivel/constante (valor de 10 bits,
logo, de 0-1024) que define o ciclo de trabalho (tempo
em que o sinal est alto em cada perodo).

BASIC

Esta instruo difere de todas as outras pelo facto de ser


executada continuamente (independente do resto do
programa) at que outra instruo pwmout seja enviada.
Para parar o sinal pwmout, basta enviar uma instruo pwmout
com o perodo 0.
Perodo PWM = (perodo + 1) x 4 x (1/4000000) = (perodo + 1) us
Ciclo Trabalho = (dutycyle) x (1/4000000) = (dutycycle)/4 us

BASIC
Exemplo: Controlo de um motor
Programa
Inicio:
high 7
low 6
pwmout 1,100,300
end

BASIC

start

Salto incondicional
goto label

Controlo de fluxo
If condio then label

pin0=1
Aqui

Y
Ali

BASIC
inicio:
if pin6 = 0 then direita
goto esquerda
**************************
esquerda:
low 7
low 6
high 5
low 4
pwmout 1,10,25
pwmout 2,10,25
goto inicio

***************************
direita:
high 7
low 6
low 5
low 4
pwmout 1,10,25
pwmout 2,10,25
goto inicio
*****************************

BASIC

if then
if and then
if or then
Sintaxe:
IF varivel ?? valor (AND/OR varivel ?? valor ...)
THEN endereo
Varivel (s) comparada com o valor(s).
Valor uma varivel/constante.
Endereo uma label (etiqueta) que especifica
o endereo para onde saltar se a condio
se verificar (for verdadeira).

BASIC
?? pode ser qualquer uma das seguintes condies
=
igual a
<>
no igual a (diferente)
!=
no igual a (diferente)
>
maior que
>=
maior que ou igual a
<
menor que
<=

menor que ou igual a

BASIC

Seguimento de pista
Com 1 sensor
Com 2 sensores
Com 3 sensores
Com 3 sensores e flags

Esquema de ligaes
Sensor de
obstculos
(2outputs)

Sensor
de cor
Alimentao
dos sensores

Bezouro
Led

Sensor
de pista
(3inputs)

9V

Ligao
ao cabo
srie para
programar

9,6V

Sensor de
obstculos
(1input)

M2

M1

BASIC

Subrotinas
Os procedimentos ou subrotinas, so largamente
utilizados na programao para reduzir o tamanho
dos programas, usando seces de cdigo que se
repetem num nico procedimento. A passagem de
valores para o procedimento, por variveis, permite
repetir a mesma seco de cdigo a partir de vrias
localizaes do programa.

BASIC

GOSUB endereo

Endereo uma label (etiqueta) que especifica o


endereo.

Funo:
Salta para a subrotina (procedimento) localizado no
endereo, regressando quando encontra a instruo
return. So permitidas at 16 GOSUBs (ou 256 no
Picaxe 28X), podendo ser aninhadas at 4 nveis.

Return

BASIC

GOSUB endereo Return


Informao:
A instruo gosub (ir para um procedimento), um
salto temporrio para uma seco separada do
cdigo, de onde regressar, atravs da instruo
return.
Cada instruo gosub, deve ter uma instruo return
correspondente.
No deve confundir esta instruo com a instruo
goto, que um salto incondicional para uma nova
localizao no programa.

BASIC
Esquerda

Direita

return

return

start

pin0=1

N
gosub Esquerda

gosub Direita

Vantagens face ao spagheti dos


gotos.
Programa:
If pin0=1 then

BASIC

Ciclos repetidos
for next
Sintaxe:
FOR varivel = inicio TO fim {STEP {-} incremento}
NEXT {varivel}
Varivel vai ser usada como um contador
Incio o valor inicial da varivel
Fim o valor final da varivel
Incremento um valor opcional que se sobrepe ao valor de
incremento normal do contador (+1). Se o incremento for
precedido de um -, ser considerado que Fim menor que
Inicio e, portanto, o valor de incremento subtrado cada vez
que o ciclo se realiza.

BASIC

Informao:

Os ciclos for next so utilizados para repetir seces


de cdigo um certo nmero de vezes. Quando se usa
uma varivel byte, o ciclo repete-se at 255 vezes.
Cada vez que a linha next encontrada, o valor da
varivel eincrementado (ou decrementado) do valor
definido por step (+1 por omisso). Quando o valor
final ultrapassado o ciclo pra e o fluxo do programa
continua a partir da linha seguinte instruo next.
Os ciclos fornext podem ser encadeados at 8
nveis de profundidade.

BASIC

Exemplo:

ciclo:
for b0 = 1 to 20
high 1
pause 500
low 1
pause 500
next b0
pause 2000
goto ciclo

define um ciclo de 20 vezes


liga a sada 1
espera 0,5 segundos
desliga a sada 1
espera 0,5 segundos
salta para o incio, incrementando b0 de +1,
at que b0 = 20
espera 2 segundos
salto para o incio

BASIC

Leituras de tenses analgicas


Instruo readadc10
Sintaxe:
READADC10 canal, varivelword
Canal uma varivel/constante especificando um
endereo (0-3) pinos 2,3,4 e 5.
Varivelword uma varivel word que recebe os
dados lidos (0-1024).
Funo:
L um canal ADC (converso analgico-digital) de 10
bits de resoluo para uma varivel de dimenso word
(0-1024).

BASIC

Exemplo: sensor de cor


symbol leitura = w0
inicio:
readadc10 0,leitura
if leitura < 200 then alarme
goto inicio
alarme:
sound 0,(50,50)
sound 0,(100,50)
sound 0,(120,50)
pause 300
goto inicio

BASIC

Outras instrues:
PAUSE milisegundos
Milisegundos uma varivel/constante (0-65535)
que especifica quantos milisegundos dura a pausa.

SOUND pino, (nota, durao, nota, durao, )


Pino uma varivel/constante (0-7) que especifica o pino
E/S a usar.
Nota(s) so variveis/constantes (0-255) que especificam
o tipo e a frequncia.
Nota 0 silncio. Notas 1-127 so tons crescentes. Notas
128-255 so rudos brancos crescentes.
Durao(s) so variveis/constantes (0-255) que especificam
a durao mltiplos aproximados de 10ms).

Vous aimerez peut-être aussi