Atelier de Formação
Iniciação à robótica móvel
Bases de Programação
Associação Nacional de Professores de
Electrotecnia e Electrónica
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).
Aplicações
indústria
informática
(periféricos: rato, teclado,...)
electrodomésticos (fornos,
máq. lavar, vídeos, etc)
sistemas AVACs
telecomunicações
indústria automóvel
Constituição
Um microcontrolador dispõe normalmente
dos seguintes elementos:
processador
ou CPU
memória de dados (RAM)
memória de programa
(ROM/PROM/EPROM/EEPROM)
linhas de entrada/saída (E/S) programáveis
Constituição
módulos
de controlo de periféricos (portos
série, paralelo,USB,I2C,etc.)
gerador de impulsos de relógio
temporizadores
cão-de-guarda (watchdog)
conversores A/D e D/A
comparadores analógicos
microprocessador vs.
microcontrolador
o
microprocessador é um sistema aberto
constrói-se um computador com as
características desejadas juntando os
módulos necessários
o microcontrolador é um sistema fechado
contem um computador completo e as
suas prestações limitadas não se podem
modificar
Estrutura de um
microprocessador
bus de endereços
P
bus de dados
bus de controle
Memória
controlador 1 controlador 2
periféricos
periféricos
Estrutura de um
microcontrolador
C
periféricos
periféricos
Arquitectura interna de
um microprocessador
UCP
bus comum
de endereços
Memória
Instruções
8
bus de dados
e instruções
+
dados
Arquitectura “von Neumann” ou “Princeton”
Arquitectura interna de
um microcontrolador
Memória
bus de
endereços de
instruções
10
UCP
bus de
endereços de
dados 9
de
de
Instruções
Memória
14
bus de
instruções
8
bus de dados
Arquitectura “Harvard”
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
Memória 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
Memória de Dados


SRAM (Static RAM)
EEPROM
Arquitectura interna de
um microcontrolador
Programação
linguagem
assembly
linguagens HLL (High Level Language):
Pascal, Basic, JAL, C
Compiladores
vs. Interpretadores
Picaxe 28X

Características:
600 linhas código
21 pinos E/S
9-17 saídas
0-12 entradas
0-4 entradas A/D
2 saídas PWM
Picaxe 28X
Entradas
Analógicas
ou Digitais
Pinos de
Entrada/Saída
configuráveis
Pinos de
Saída
Pinos de
Entrada/Saída
configuráveis
Picaxe 28X
Entradas
Analógicas
A/D
Pinos de Saída
PWM
Linguagens de programação



PBasic (compatível com
Basic Stamp).
Ambiente integrado de
desenvolvimento com
suporte para
programação gráfica por
fluxogramas.
Editor, compilador,
programador,debugger e
simulador incorporados.
Lógica de Programação


O paradigma “tradicional”:
Pressupõe um modelo do mundo
Sensores
Interpretação
dos sensores
Modelo
do Mundo
Actuadores
Execução
Planeamento
Lógica de Programação





O paradigma das interacções prioritárias de Rodney
Brooks
Utiliza uma estratégia em que só os sensores são os
iniciadores dos comportamentos.
Os comportamentos são sistemas em camadas de
controlo que funcionam em paralelo, cada vez que
os sensores apropriados são activados.
Um sistema de arbitragem de prioridades é utilizado
para activar o comportamento dominante.
Todos os comportamentos funcionam em paralelo,
com os de mais alto nível a suprimirem o
funcionamento dos de nível inferior.
Lógica de Programação


O paradigma das interacções prioritárias de
Rodney Brooks
Exemplo:
Bumpers
Sensor Cor
Sensor Pista
Sensor
Escapar
Detectar_Cor S
SeguirPista
Procedimento
S
Motores
Actuador
BASIC
Programa = dados + instruções
Elementos da Linguagem de Programação
BASIC
 Símbolos
 Variáveis
 Constantes
 Instruções
BASIC



LABELS
As labels (etiquetas) são usadas como marcadores
em todo o programa. As labels são usadas para
marcar uma posição para onde “saltar” no programa
através de uma instrução goto, gosub ou outra
instrução.
Uma label pode ser qualquer palavra (não reservada)
e pode conter dígitos e o carácter underscore ( _ ).
As labels devem ter como carácter inicial uma letra
(não um dígito), e são definidas com o sinal doispontos (:) a seguir ao nome. O sinal não é
necessário quando a label faz parte integrante de
instruções.
BASIC


O compilador não é case-sensitive (sensível
a maiúsculas), pelo que podem ser usadas
indiscriminadamente maiúsculas e
minúsculas.
Exemplo:
ciclo:
high 1
pause 500
low 1
PAUSE 500
goto Ciclo
; liga a saída 1
; espera de 5 segundos
; desliga a saída 1
; espera de 5 segundos
; salto para o início
BASIC

Espaços em branco e Sintaxe

Whitespace (espaço em branco) é o termo utilizado
pelos programadores para definirem a área branca
na impressão de um programa. Nela se incluem os
espaços, as tabulações e as linhas vazias. Qualquer
uma delas pode ser utilizada no programa para o
tornar mais compreensível e facilitar a leitura.
Convencionou-se colocar as labels encostadas à
esquerda. Todas as outras instruções devem ser
espaçadas através da tecla de tabulação. Esta
convenção torna o programa mais fácil de ler e de
seguir.

BASIC






COMENTÁRIOS
Os comentários começam por um apóstrofe
(‘) ou ponto e vírgula (;) e continuam até ao
fim da linha. A instrução REM pode também
ser utilizada para inserir comentários.
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, binárias e ASCII.




Os números decimais são escritos directamente sem
qualquer prefixo.
Os números hexadecimais (hex) são precedidos pelo
sinal dólar ($).
Os números binários são precedidos pelo sinal de
percentagem (%).
Os valores ASCII são colocados entre plicas (“).
BASIC

Exemplos:
100
$64
%01100100
“A”
“Hello”

B1 = B0 ^ $AA





‘ 100 em decimal
‘ 64 hex
‘ 01100100 binário
‘ “A” ascii (65)
‘ “Hello” – equivalente a “H”,
“e”, “l”, “l”, “o”.
‘ ou exclusivo da
‘variável B0 com AA hex
BASIC




SÍMBOLOS
Os símbolos podem ser associados a valores
constantes, nomes alias (alternativos) para variáveis
e endereços de programa. Os valores constantes e
os nomes alias de variáveis são atribuídos fazendo
seguir ao nome do símbolo o sinal de igual (=),
seguido da variável ou constante.
Os símbolos podem utilizar qualquer palavra que não
seja reservada (instruções).
Os símbolos podem conter letras e números, mas o
primeiro carácter é obrigatoriamente uma letra. O
uso dos símbolos não aumenta a dimensão do
programa e torna-o mais legível.
BASIC

Os endereços de programa são atribuídos fazendo seguir o
símbolo pelo sinal dois pontos (:).

Exemplo:
symbol LED_E = 7 ‘ define um pino de saída
symbol CONTA = B0
‘ define o símbolo de uma variável
let CONTA = 200 ‘ carrega a variável com o valor
‘ 200
CICLO:
‘ define endereço de programa
high LED_E
pause CONTA
‘ liga a saída 7
‘ espera 0,2 segundos (200 milisegundos)
low LED_E
pause CONTA
goto CICLO
‘ desliga a saída 7
‘ espera 0,2 segundos
‘salta para o início CICLO
BASIC




Compreendendo a memória do PICAXE
A memória do PICAXE é constituída por três áreas
diferentes. A quantidade de memória varia conforme
o tipo de PICAXE.
Memória de Programa
A memória de programa é onde o programa é
guardado após uma transferência (download). Tratase de uma memória rápida tipo FLASH, que se pode
reprogramar até cerca de 100 000 vezes. O
programa não se perde quando se desliga a
alimentação, pelo que é executado assim que esta é
ligada de novo. Não é normalmente necessário
apagar um programa, pois cada novo download
reprograma toda a memória.
BASIC




Num PICAXE28X pode carregar cerca de 600 linhas
de programa. Este valor é aproximado, pois cada
instrução ocupa espaços diferentes em memória.
Para verificar a memória livre basta seleccionar o
menu PICAXE>Check Syntax.
Memória de Dados
A memória de dados é um espaço adicional de
memória do microcontrolador. Os dados também não
são perdidos quando se desliga a alimentação. Em
cada transferência de dados (download) esta
memória é posta a 0.
BASIC


RAM (Variáveis)
A memória RAM é usada para guardar dados
temporários em variáveis durante a execução do
programa. Esta memória perde toda a informação
quando se desliga a alimentação. Existem três tipos
de variáveis – usos gerais, armazenamento e
funções especiais.
BASIC

Variáveis de Usos Gerais (GPR – General
Purpose Registers)

Existem 14 variáveis de usos gerais tipo byte. Estas
variáveis byte são designadas b0 a b13. As variáveis
tipo byte (8 bits) podem guardar números inteiros
entre 0 e 255.

Para números maiores podem combinar-se duas
variáveis byte de modo a criar uma variável word,
que é capaz de guardar números inteiros entre 0 e
65535.
BASIC

Estas variáveis word são designadas w0 a w6, e são
construídas 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 além disso os bytes b0 e b1 (w0) podem ser
divididos em variáveis bit.
As variáveis bit podem ser utilizadas onde for
necessário guardar um único bit (0 ou 1) numa
variável
b0 = bit7: bit6: bit5: bit4: bit3: bit2: bit1: bit0
b1 = bit15: bit14: bit13: bit12: bit11: bit10: bit9: bit8
Pode utilizar qualquer variável word, byte ou bit
numa expressão matemática ou instrução que utilize
variáveis.
BASIC






Variáveis para Funções Especiais (SFR)
As variáveis disponíveis para funções especiais
dependem do tipo de PICAXE.
pins = representa o dado lido no porto de entrada
pins = representa o porto de saída na escrita
Note que pins é uma ‘pseudo’ variável que se pode
aplicar tanto a portos de entrada como de saída.
Quando usado à esquerda de uma expressão de
atribuição de pinos aplica-se ao porto de saída.
BASIC

Por exemplo,
let pins = %11000011



vai colocar as saídas 7,6,1,0 altas e as
restantes baixas.
O sinal % indica ao compilador que se está a
trabalhar em binário, em vez de decimal.
Quando usado à direita de uma expressão de
atribuição 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 variável pins está separada em variáveis bit
individuais para leitura de entradas bit individuais
através da instrução if...then.
pins = pin7 : pin6 : pin5 : pin4 : pin3 : pin2 : pin1 : pin0
Programming Editor


Instalação e password (picaxebegin)
Configuração (Menu View/Options)
Mode PICAXE-28X
Options: 4MHz
Serial Port
Language
Programming Editor


Programação em BASIC
Programação por Fluxograma
Programming Editor

Programação por Fluxograma
Simbologia
 Início/Fim
 Processo:
acção a ser
realizada
 E/S define
entradas e
saídas
 Decisão 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
0
let b0=label_19
motor
sequence
goto label_D
let pins = 96
pause 3000
Y
high 4
pin0=0
Green LED on
Y
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
Y
label_4D:
gosub red let pins = 16
return
goto label_6
return
N
Programming Editor-exemplo
start
gosub ler_cor
let b0=pins& 224
000
001
b0= 0
N
Y
010
b0= 32
011
b0= 64
N
Y
gosub avancar
gosub esquerda
Y
forward
halt
Y
gosub esquerda
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
pwmout 1,10,40
101
b0= 128
N
Y
gosub avancar
parar
avancar
100
b0= 96
N
N
110
b0= 160
Y
pwmout 2,10,40
pwmout 2,10,40
pwmout 2,10,40
return
b1> 20
b1< 70
return
gosub alarme
As coisas complicam-se
gosub parar
readadc 0,b1
return
return
Y
gosub esquerda
ler_cor
Y
return
b0= 224
N
Y
gosub avancar
N
b1> 132
N
b1< 150
Y
pwmout 2,10,40
111
b0= 192
N
return
N
Y
Y
N
N
BASIC


Instruções BASIC essenciais
Controlo de pinos de Saída
–
–
–
–

high 1
low 2
pins=%00000110
high portc 1
Leitura de pinos de entrada
– b0=pins
– if pin0=1…
BASIC

Saídas PWM
– Instrução pwmout
– Sintaxe:
PWMOUT pino, período, dutycycle
Pino é uma variável/constante que especifica o pino E/S
a usar (1 ou 2).
Período é uma variável/constante (0-255) que estabelece
o período do sinal de PWM.
Duty cycle é uma variável/constante (valor de 10 bits,
logo, de 0-1024) que define o ciclo de trabalho (tempo
em que o sinal está alto em cada período).
BASIC


Esta instrução difere de todas as outras pelo facto de ser
executada continuamente (independente do resto do
programa) até que outra instrução pwmout seja enviada.
Para parar o sinal pwmout, basta enviar uma instrução pwmout
com o período 0.
Período PWM = (período + 1) x 4 x (1/4000000) = (período + 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 condição then label
pin0=1
Aqui
N
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 variável ?? valor (AND/OR variável ?? valor ...)
THEN endereço
Variável (s) é comparada com o valor(s).
Valor é uma variável/constante.
Endereço é uma label (etiqueta) que especifica
o endereço para onde saltar se a condição
se verificar (for verdadeira).
BASIC
?? pode ser qualquer uma das seguintes condições
=
igual a
<>
não igual a (diferente)
!=
não 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 ligações
Sensor de
obstáculos
(2outputs)
Sensor
de cor
Alimentação
dos sensores
Bezouro
Led
Sensor
de pista
(3inputs)
9V
Ligação
ao cabo
série para
programar
9,6V
M2
M1
BASIC


Subrotinas
Os procedimentos ou subrotinas, são largamente
utilizados na programação para reduzir o tamanho
dos programas, usando secções de código que se
repetem num único procedimento. A passagem de
valores para o procedimento, por variáveis, permite
repetir a mesma secção de código a partir de várias
localizações do programa.
BASIC

GOSUB endereço

Endereço é uma label (etiqueta) que especifica o
endereço.

Função:
Salta para a subrotina (procedimento) localizado no
endereço, regressando quando encontra a instrução
return. São permitidas até 16 GOSUBs (ou 256 no
Picaxe 28X), podendo ser aninhadas até 4 níveis.

Return
BASIC





GOSUB endereço Return
Informação:
A instrução gosub (ir para um procedimento), é um
salto temporário para uma secção separada do
código, de onde regressará, através da instrução
return.
Cada instrução gosub, deve ter uma instrução return
correspondente.
Não deve confundir esta instrução com a instrução
goto, que é um salto incondicional para uma nova
localização no programa.
BASIC
Esquerda
Direita
return
return
start
pin0=1
Y
N
gosub Esquerda
gosub Direita



Vantagens face ao “spagheti” dos
gotos.
Programa:
If pin0=1 then…
BASIC









Ciclos repetidos
for … next
Sintaxe:
FOR variável = inicio TO fim {STEP {-} incremento}
NEXT {variável}
Variável vai ser usada como um contador
Início é o valor inicial da variável
Fim é o valor final da variável
Incremento é um valor opcional que se sobrepõe 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 é subtraído cada vez
que o ciclo se realiza.
BASIC

Informação:

Os ciclos for… next são utilizados para repetir
secções de código um certo número de vezes.
Quando se usa uma variável byte, o ciclo repete-se
até 255 vezes. Cada vez que a linha next é
encontrada, o valor da variável ´eincrementado (ou
decrementado) do valor definido por step (+1 por
omissão). Quando o valor final é ultrapassado o ciclo
pára e o fluxo do programa continua a partir da linha
seguinte à instrução next.
Os ciclos for…next podem ser encadeados até 8
níveis 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 saída 1
‘ espera 0,5 segundos
‘ desliga a saída 1
‘ espera 0,5 segundos
‘ salta para o início, incrementando b0 de +1,
‘ até que b0 = 20
‘ espera 2 segundos
‘ salto para o início
BASIC








Leituras de tensões analógicas
Instrução readadc10
Sintaxe:
READADC10 canal, variávelword
Canal é uma variável/constante especificando um
endereço (0-3) – pinos 2,3,4 e 5.
Variávelword é uma variável word que recebe os
dados lidos (0-1024).
Função:
Lê um canal ADC (conversão analógico-digital) de 10
bits de resolução para uma variável de dimensão
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 instruções:
PAUSE milisegundos
Milisegundos é uma variável/constante (0-65535)
que especifica quantos milisegundos dura a pausa.

SOUND pino, (nota, duração, nota, duração, …)
Pino é uma variável/constante (0-7) que especifica o pino
E/S a usar.
Nota(s) são variáveis/constantes (0-255) que especificam
o tipo e a frequência.
Nota 0 é silêncio. Notas 1-127 são tons crescentes. Notas
128-255 são ruídos brancos crescentes.
Duração(s) são variáveis/constantes (0-255) que especificam
a duração múltiplos aproximados de 10ms).
Download

Apresentação sobre Programação