Title: Atelier de Forma
1Atelier de FormaçãoIniciação à robótica móvel
DEAR Robot
Associação Nacional de Professores de
Electrotecnia e Electrónica
2Microcontrolador
- 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).
3Aplicaçõ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
4Constituiçã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
5Constituiçã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
6microprocessador 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
7Estrutura de um microprocessador
8Estrutura de um microcontrolador
9Arquitectura interna de um microprocessador
UCP
bus comum de endereços
Memória
Instruções dados
8
bus de dados e instruções
Arquitectura von Neumann ou Princeton
10Arquitectura interna de um microcontrolador
bus de endereços de instruções
bus de endereços de dados
UCP
Memória de dados
Memória de Instruções
9
10
8
14
bus de instruções
bus de dados
Arquitectura Harvard
11Arquitectura interna de um microcontrolador
- RISC - Reduced Instruction Set Computer (35 no
16F84) - versus
- CISC - Complex Instruction Set Computer (150 no
8086)
12Arquitectura 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
13Arquitectura interna de um microcontrolador
- Memória de Dados
- SRAM (Static RAM)
- EEPROM
14Arquitectura interna de um microcontrolador
- Programação
- linguagem assembly
- linguagens HLL (High Level Language)
- Pascal, Basic, JAL, C
- Compiladores vs. Interpretadores
15Picaxe 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
16Picaxe 28X
Entradas Analógicas ou Digitais
Pinos de Saída
Pinos de Entrada/Saída configuráveis
Pinos de Entrada/Saída configuráveis
17Picaxe 28X
Entradas Analógicas A/D
Pinos de Saída PWM
18Linguagens 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.
19Lógica de Programação
- O paradigma tradicional
- Pressupõe um modelo do mundo
Interpretação dos sensores
Modelo do Mundo
Sensores
Execução
Planeamento
Actuadores
20Ló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.
21Lógica de Programação
- O paradigma das interacções prioritárias de
Rodney Brooks - Exemplo
Escapar
Bumpers
Detectar_Cor
Sensor Cor
S
SeguirPista
Sensor Pista
Motores
S
Sensor Procedimento Actuador
22BASIC
Programa dados instruções
- Elementos da Linguagem de Programação BASIC
- Símbolos
- Variáveis
- Constantes
- Instruções
23BASIC
- 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.
24BASIC
- 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
25BASIC
- 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.
26BASIC
- 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
27BASIC
- 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 ().
28BASIC
- 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
29BASIC
- 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.
30BASIC
- 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
31BASIC
- 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 download
reprograma toda a memória.
32BASIC
- 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 PICAXEgtCheck 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.
33BASIC
- 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.
34BASIC
- 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.
35BASIC
- 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
36BASIC
- 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.
37BASIC
- 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.
38BASIC
- 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.
39BASIC
- 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
40Programming Editor
- Instalação e password (picaxebegin)
- Configuração (Menu View/Options)
Mode PICAXE-28X Options 4MHz Serial
Port Language
41Programming Editor
- Programação em BASIC
- Programação por Fluxograma
42Programming 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
43Programming Editor-exemplo
main label_6 low 4 label_D if pin01 then
label_19 goto label_D label_19 high
4 label_20 if pin00 then label_6 if pin61
then label_4D if pin71 then label_44 goto
label_20 label_44 gosub blue goto
label_6 label_4D gosub red goto label_6
44Programming Editor-exemplo
As coisas complicam-se
45BASIC
- Instruções BASIC essenciais
- Controlo de pinos de Saída
- high 1
- low 2
- pins00000110
- high portc 1
- Leitura de pinos de entrada
- b0pins
- if pin01
46BASIC
- 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).
47BASIC
- 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
48BASIC
- Exemplo Controlo de um motor
- Programa
- Inicio
- high 7
- low 6
- pwmout 1,100,300
- end
49BASIC
- Salto incondicional
- goto label
- Controlo de fluxo
- If condição then label
50BASIC
- 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
51BASIC
- 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).
52BASIC
- ?? pode ser qualquer uma das seguintes condições
- igual a
- ltgt não igual a (diferente)
- ! não igual a (diferente)
- gt maior que
- gt maior que ou igual a
- lt menor que
- lt menor que ou igual a
53BASIC
- Seguimento de pista
- Com 1 sensor
- Com 2 sensores
- Com 3 sensores
- Com 3 sensores e flags
54Esquema de ligações
55BASIC
- 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.
56BASIC
- 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.
57BASIC
- 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.
58BASIC
- Vantagens face ao spagheti dos gotos.
- Programa
- If pin01 then
59BASIC
- 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.
60BASIC
- 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 fornext podem ser encadeados até 8
níveis de profundidade.
61BASIC
- 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
62BASIC
- 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).
63BASIC
- Exemplo sensor de cor
- symbol leitura w0
- inicio
- readadc10 0,leitura
- if leitura lt 200 then alarme
- goto inicio
- alarme
- sound 0,(50,50)
- sound 0,(100,50)
- sound 0,(120,50)
- pause 300
- goto inicio
64BASIC
- 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).