Upload
phungquynh
View
215
Download
0
Embed Size (px)
Citation preview
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).
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
Aplicações
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
Constituição
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 controle
P
Memória controlador 2controlador 1
bus de endereços
bus de dados
periféricos periféricos
Arquitectura interna de
um microprocessador
UCP
Memória
Instruções
+
dadosbus de dados
e instruções
bus comum
de endereços
8
Arquitectura “von Neumann” ou “Princeton”
Arquitectura interna de
um microcontrolador
Arquitectura “Harvard”
UCPMemória
de
dados
bus de dados
bus de
endereços de
dados
8
Memória
de
Instruções
9
bus de
endereços de
instruções10
14
bus de
instruções
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
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
Pinos de
Entrada/Saída
configuráveis
Pinos de
Entrada/Saída
configuráveis
Entradas
Analógicas
ou Digitais Pinos de
Saída
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
SensoresInterpretação
dos sensores
Modelo
do Mundo
PlaneamentoExecuçãoActuadores
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:
Sensor Pista MotoresSeguirPista S
Sensor Cor Detectar_Cor S
Bumpers Escapar
Sensor Procedimento 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 dois-pontos (:) 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 ; liga a saída 1
pause 500 ; espera de 5 segundos
low 1 ; desliga a saída 1
PAUSE 500 ; espera de 5 segundos
goto Ciclo ; 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 „ 100 em decimal
$64 „ 64 hex
%01100100 „ 01100100 binário
“A” „ “A” ascii (65)
“Hello” „ “Hello” – equivalente a “H”, “e”, “l”, “l”, “o”.
B1 = B0 ^ $AA „ 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 „ liga a saída 7
pause CONTA „ espera 0,2 segundos (200 milisegundos)
low LED_E „ desliga a saída 7
pause CONTA „ espera 0,2 segundos
goto CICLO „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). Trata-se 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 downloadreprograma 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 bitnuma 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 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
start
low 4
pin0=1Y
N high 4
pin0=0Y
N
pin6=1Y
N
pin7=1Y
N gosub blue gosub red
red blue
high 7
high 6
pause 3000
low 7
low 6
return
return
let b0= 0
let b0=b0+ 1
let pins = 96
let pins = 160
pause 2000
pause 2000
let pins = 16
high 0
low 0
let pins = 32
pause 3000
Green LED off
Green LED on
Door open again!
Check
door switch
Test red & blue switches
Lock solenoid
Do motor
sequence
Unlock door
Program for Washing Machine Model
b0> 10
Y
N
main:
label_6: low 4
label_D: if pin0=1 then label_19
goto label_D
label_19: high 4
label_20: if pin0=0 then label_6
if pin6=1 then label_4D
if pin7=1 then label_44
goto label_20
label_44: gosub blue
goto label_6
label_4D: gosub red
goto label_6
Programming Editor-exemplo
start
avancar esquerda direita
forward left right
pwmout 1,10,40
pwmout 2,10,40
returnreturn
pwmout 2,10,40
pwmout 1,10,40 pwmout 1,10,40
pwmout 2,10,40
return return
pwmout 2,10,40
pwmout 1,10,40
let b0=pins& 224
b0= 0
Y
N b0= 32
Y
N b0= 64
Y
N b0= 96
Y
N b0= 128
Y
N b0= 224
Y
Nb0= 160
Y
N b0= 192
Y
N
gosub avancar gosub esquerda gosub avancar gosub esquerda gosub direita gosub avancar gosub esquerda gosub parar
000001 010 011 100 101 110 111
halt
parar
gosub ler_cor
alarmeler_cor
readadc 0,b1sound 0,(50,50)
pause 1000
return
b1> 20
Y
N
b1< 70
Y
N
b1> 132
Y
N
b1< 150
Y
N
gosub alarme
return
As coisas complicam-se
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 pwmoutcom 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
Salto incondicional
– goto label
Controlo de fluxo
– If condição then label
start
pin0=1Y
N
Aqui 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
Esquema de ligações
M2 M1
9V
9,6V
Alimentação
dos sensores
Ligação
ao cabo
série para
programar
Sensor
de pista
(3inputs)
Sensor de
obstáculos
(2outputs)
Sensor
de cor
Bezouro
Led
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 Return
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.
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 returncorrespondente.
Não deve confundir esta instrução com a instrução goto, que é um salto incondicional para uma nova localização no programa.
BASIC
start
pin0=1Y
N
gosub Esquerda gosub Direita
Esquerda Direita
return return
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 „ define um ciclo de 20 vezes
high 1 „ liga a saída 1
pause 500 „ espera 0,5 segundos
low 1 „ desliga a saída 1
pause 500 „ espera 0,5 segundos
next b0 „ salta para o início, incrementando b0 de +1,
„ até que b0 = 20
pause 2000 „ espera 2 segundos
goto ciclo „ 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 corsymbol 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 milisegundosMilisegundos é 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).