640 likes | 812 Views
DEAR Robot. Atelier de Formação Iniciação à robótica móvel. Bases de Programação. Associação Nacional de Professores de Electrotecnia e Electrónica. Microcontrolador.
E N D
DEAR Robot Atelier de FormaçãoIniciação à robótica móvel Bases de Programação Associação Nacional de Professores de Electrotecnia e Electrónica
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
bus de endereços P bus de dados bus de controle controlador 2 controlador 1 Memória periféricos periféricos Estrutura de um microprocessador
C periféricos periféricos Estrutura de um microcontrolador
Arquitectura 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”
Arquitectura interna de um microcontrolador bus de endereços de instruções bus de endereços de dados UCP Memória de Instruções Memória de dados 10 9 14 8 bus de instruções bus de dados Arquitectura “Harvard”
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 Saída Pinos de Entrada/Saída configuráveis 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 Modelo do Mundo Interpretação dos sensores Sensores Execução Planeamento Actuadores
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: Escapar Bumpers Detectar_Cor Sensor Cor S SeguirPista Sensor Pista Motores S 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 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 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 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 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 • Salto incondicional • goto label • Controlo de fluxo • If condição then label
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 ‘*****************************