1) O documento apresenta o BASIC Step, uma versão brasileira do microcontrolador BASIC Stamp.
2) O BASIC Stamp foi criado por Chip Gracey em 1992 para permitir que qualquer pessoa possa programar microcontroladores de forma simples.
3) O BASIC Step foi desenvolvido no Brasil pela Tato Equipamentos Eletrônicos para tornar o BASIC Stamp acessível devido ao seu preço em dólar que era inviável para compra no Brasil.
1) O documento apresenta o BASIC Step, uma versão brasileira do microcontrolador BASIC Stamp.
2) O BASIC Stamp foi criado por Chip Gracey em 1992 para permitir que qualquer pessoa possa programar microcontroladores de forma simples.
3) O BASIC Step foi desenvolvido no Brasil pela Tato Equipamentos Eletrônicos para tornar o BASIC Stamp acessível devido ao seu preço em dólar que era inviável para compra no Brasil.
1) O documento apresenta o BASIC Step, uma versão brasileira do microcontrolador BASIC Stamp.
2) O BASIC Stamp foi criado por Chip Gracey em 1992 para permitir que qualquer pessoa possa programar microcontroladores de forma simples.
3) O BASIC Step foi desenvolvido no Brasil pela Tato Equipamentos Eletrônicos para tornar o BASIC Stamp acessível devido ao seu preço em dólar que era inviável para compra no Brasil.
1) O documento apresenta o BASIC Step, uma versão brasileira do microcontrolador BASIC Stamp.
2) O BASIC Stamp foi criado por Chip Gracey em 1992 para permitir que qualquer pessoa possa programar microcontroladores de forma simples.
3) O BASIC Step foi desenvolvido no Brasil pela Tato Equipamentos Eletrônicos para tornar o BASIC Stamp acessível devido ao seu preço em dólar que era inviável para compra no Brasil.
Baixe no formato PDF, TXT ou leia online no Scribd
Fazer download em pdf ou txt
Você está na página 1de 46
Introduo a Microcontroladores com BASIC Step
Derli Lus Angnes
0
Introduo a Microcontroladores com BASIC Step
Derli Lus Angnes
1 ndice
Introduo.................................................................................................................................. 02 O que so microcontroladores e microprocessadores ........................................................ 03 Instrues e linguagem de programao............................................................................... 03 O BASIC Step............................................................................................................................. 04 Compilador BASIC Step ........................................................................................................... 05 Experimento 01: Conhecendo BASIC Step ............................................................................ 06 Instrues do BASIC Step........................................................................................................ 07 Experimento 02 : Trabalhando com sadas............................................................................ 07 a) Sinalizador para sada de veculos ................................................................................ 08 b) Seqencial de 6 canais .................................................................................................. 09 c) Contador dcada............................................................................................................ 11 d) Contador dcada sem decodificador e com display anodo comum.............................. 11 e) Gerando tons musicais................................................................................................... 12 f) Gerando tons musicais aleatoriamente.......................................................................... 13 Experimento 03 : Trabalhando com entradas ........................................................................ 13 a) Teclando tons musicais.................................................................................................. 13 b) Escolhendo um led......................................................................................................... 14 c) Conhecendo o comando potencimetro ........................................................................ 15 d) Temporizador de tempo ajustvel .................................................................................. 15 Experimento 04 : Trabalhando com display de cristal liquido............................................. 17 a) Inserindo mensagem no LCD......................................................................................... 19 Exemplo de aplicao : Semforo........................................................................................... 19 Famlia BASIC Step................................................................................................................... 21 ANEXO Instrues de comando do BASIC Step................................................................. 22 1. Alto, liga, high................................................................................................................. 22 2. Aleatrio, random........................................................................................................... 22 3. Baixo, desliga, low.......................................................................................................... 23 4. Chave, button................................................................................................................. 23 5. Console, debug .............................................................................................................. 25 6. Descana, nap ............................................................................................................... 25 7. Dorme, sleep.................................................................................................................. 26 8. Entrada, input ................................................................................................................. 27 9. Escreve, write................................................................................................................. 28 10. Escreveserial, serout...................................................................................................... 28 11. Execute, gosub............................................................................................................... 31 12. Fim, end.......................................................................................................................... 31 13. Gerapulso, pulsout ......................................................................................................... 32 14. Inverte, toggle................................................................................................................. 32 15. Invertedireo, reverse................................................................................................... 32 16. L, read .......................................................................................................................... 33 17. Leserial, serin................................................................................................................. 33 18. Alto, liga, high................................................................................................................. 36 19. Medepulso, pulsim......................................................................................................... 36 20. Pausa, pause ................................................................................................................. 37 21. Potencimetro, por ......................................................................................................... 37 22. Procura, lookdown.......................................................................................................... 38 23. Pula, branch ................................................................................................................... 39 24. Repita-ate-continue, for-to-next...................................................................................... 40 25. Retorna, return ............................................................................................................... 41 26. Saida, output .................................................................................................................. 41 27. Se-entao, if-then............................................................................................................. 42 28. Som, sound .................................................................................................................... 43 29. Tabela, lookup................................................................................................................ 43 30. Vaipara, goto.................................................................................................................. 44 31. Let................................................................................................................................... 44
Introduo a Microcontroladores com BASIC Step
Derli Lus Angnes
2
Introduo
BASIC Step uma verso brasileira do famoso microcontrolador BASIC Stamp. O criador do BASIC Stamp tem uma histria interessante:
Em 1979 Chip Gracey (foto ao lado) teve sua primeira introduo programao e eletrnica: o computador Apple II. Chip se interessou imediatamente na nova mquina, escreveu cdigos em BASIC para mostrar grficos e removeu a tampa do computador para ver os componentes eletrnicos. Esta experincia o levou rapidamente a examinar cdigos fontes de videogames e outros aparelhos eletrnicos, a tentar usar estes aparelhos para outras finalidades. O hobby rapidamente se transformou em negcio quando ele passou a fabricar equipamentos para duplicar programas para o computador Comodore 64.
Os colgios no ofereciam cursos de hardware nem de software em 1982, e quando Chip se formou em 1986, a faculdade no parecia ser o melhor lugar para iniciar um novo negcio. Ao contrrio ele e seu amigo Lance Walley fundaram a Parallax no seu apartamento. Os primeiros produtos foram digitalizadores de sons para o Aplle II e programadores para o 8051.
Os negcios cresceram lentamente at 1992 quando a Parallax lanou seu primeiro BASIC Stamp. A Parallax sabia que o BASIC Stamp seria especial ele era a ferramenta que eles precisavam para os seus prprios projetos de hobby. O fato que o BASIC Stamp poderia criar a sua prpria indstria, no era conhecido pelos fundadores da Parallax, mas rapidamente se tornou aparente que o pequeno computador tinha o seu grupo de entusiastas. Ele permitia a qualquer pessoa programar um microcontrolador, e dava a elas comandos poderosos de entrada e sada permitiam lig-lo a outros componentes eletrnicos. Ao final de 1998 a Parallax tinha vendido 125.000 mdulos BASIC Stamp e distribua uma srie completa de acessrios para ele atravs de mais de 40 distribuidores no mundo todo.
O preo em dlar do BASIC Stamp tornou invivel sua compra no Brasil. A Tato Equipamentos Eletrnicos criou o BASIC Step, a verso brasileira do famoso microcontrolador. O BASIC Step possui compilador prprio com instrues em portugus (TBASIC), alm do tradicional PBASIC.
No curso, o aluno aprender a relacionar software e hardware, por isso fundamental que o aluno conhea princpios de eletrnica analgica e digital para poder desenvolver todos os experimentos sem muita dificuldade.
Esse fascculo visa repassar noes de microcontroladores, a sua relao com o mundo e suas vantagens, em uma linguagem fcil e objetiva de forma extremamente agradvel.
Grande parte dos exerccios pode ser implementada com uma placa de prototipagem e alguns componentes eletrnicos adicionais.
3 O que so microcontroladores e microprocessadores
Ambos so computadores digitais que realizam operaes em seqncia sem interveno humana. As operaes so programadas por um programador, que segue uma lista de instrues que compe a linguagem de programao (Assembly, C, Java).
Os microcontroladores ou C so conhecidos como computadores embutidos em circuito- integrado. Em um microcontrolador podemos encontrar memria, CPU, entradas e sadas. Alguns ainda possuem perifricos como conversores A/D e D/A, comparadores. Alguns microcontroladores chegam a custar muitas vezes mais barato do que um transistor. Existem uma quantidade grande de C no mercado, veja alguns nomes a baixo:
Famlia 8051 fabricante Intel
PIC fabricante Microchip
AVR fabricante Atmel
BASIC Stamp fabricante Parallax
BASIC Step fabricante Tato Equipamentos
BasicStep
Os C esto presentes em agendas eletrnicas, telefones celulares, alarmes, CLPs, veculos, caixas eletrnicos, impressoras...
O microprocessador um circuito integrado que possui uma poderosa CPU (Unidade Central de Processamento). o microprocessador que processa as informaes de uma memria ou de um perifrico. No possvel obter um computador somente com um microprocessador. Um exemplo clssico o computador pessoal que agrega no interior do gabinete diversos componentes, dentre eles o microprocessador. Os microprocessadores so requisitados sempre que houver a necessidade de se processar inmeros clculos em um curtssimo espao de tempo. Exemplo de processadores: Z80, 8080, 80386, 80486...
Instrues e linguagem de programao
Programao a seqncia de operaes que o sistema deve executar para que a tarefa determinada seja realizada. Cada operao correspondente a uma instruo que pode ser interpretada e executada pelo computador. As instrues so constitudas por uma srie de bits. Esses bits so decodificados e acionam as variveis de controle internas ao sistema para que a operao correspondente instruo seja realizada.
Cada microcontrolador adota uma linguagem de programao. As linguagens mais difundidas para microcontroladores so: Assembly e C. Todo programador deve conhecer o Set de Instrues de seu microcontrolador para poder realizar a programao do chip.
O cdigo fonte do programa, ou seja, a escrita do programa precisa passar por um compilador, o compilador ir traduzir cada linha digitada em linguagem de mquina, para que o microcontrolador possa ser gravado. A gravao requer muitas vezes um equipamento de gravao. No mercado existem gravadores dedicados e universais que permitem a gravao de inmeros chipss. O nosso BASIC Step s precisa de um cabo para ser programado.
Introduo a Microcontroladores com BASIC Step
Derli Lus Angnes
4
O BASIC Step BASIC Step um microcontrolador extremamente fcil de utilizar, com comandos em portugus e ingls. Alimentao de 7,5V a 15V. Possui 8 entradas e sadas com capacidade de corrente de 25mA.Tamanho: 3,5 cm x 3,0 cm. Hardware: O Basic Step trabalha com um microcontrolador PIC16F628 e numa nica placa engloba esse microcontrolador, uma memria com o interpretador PBASIC e um regulador de tenso. Pode ser alimentado com tenso de 7,5 a 15v. Possui 8 portas configurveis para entrada ou sada. programvel diretamente pela serial do computador, por um cabo simples, por isso, no precisa de programadores caros ou difceis de construir. Tudo isso numa minscula placa. Outra vantagem que ele se encaixa perfeitamente na matriz de contatos, simplificando os testes. Veja a pinagem do BASIC Step: Pino Funo PWR Alimentao +7 a +15V GND 0V - Terra Pc0 Sada de sinais de progr. Pc1 Entrada de sinais de progr. OUT +5V Sada de tenso +5V RESET Reseta com nvel baixo P0 I/O P1 I/O P2 I/O P3 I/O P4 I/O P5 I/O P6 I/O
P7 I/O Software: O BASIC Step programado pela linguagem Tbasic ou Pbasic. Ambas so muito fceis de utilizar, sendo que a diferena est no idioma: Pbasic ingls e o Tbasic portugus. Ao lado o compilador BASIC Step. O compilador permite edio de texto do cdigo fonte, possui compilador, debug para procurar erros de digitao, dowload para transferncia do programa ao microcontrolador e ajuda para consulta de instrues. O software est na vero 0.9.22 e pode ser executado no Windows 95, Windows 98, Windows Me e Windows XP.
Introduo a Microcontroladores com BASIC Step
Derli Lus Angnes
5 Programao: Para programar o BASIC Step so necessrios:
Microcontrolador BASIC Step; Fonte CC para alimentao do C; Compilador BASIC Step; Computador; Cabo de gravao;
Opcionalmente uma placa de prototipagem StepLab.
O Basic Step utiliza a comunicao serial do PC para gravao. O cabo utilizado simples e a coneo para DB9 e DB25 esto indicados abaixo:
Cabo de gravao do BASIC Step com o PC atravs do conector DB9. Cabo de gravao do BASIC Step com o PC atravs do conector DB25.
Compilador BASIC Step
Para instalar o compilador ser necessrio ter um computador: 100Mhz com 8MB de memria e 2MB de espao no disco com um driver de disket. O compilador utiliza sistema operacional Windows 95 ou superior. Veja a tela principal:
Introduo a Microcontroladores com BASIC Step
Derli Lus Angnes
6 Barra de ferramentas:
Experimento 01: Conhecendo BASIC Step
Vamos conhecer como o BASIC Step trabalha, para isso necessrio escrever um programa. A princpio no vamos comentar as funes de cada instruo, pois o objetivo compreender e se familiarizar com o modo de trabalho de gravao de um microcontrolador. Vamos l: Conecte o cabo de gravao da placa StepLab porta serial do seu computador. Monte agora o hardware e o software. O BASIC Step, o compilador e a placa Steplab podem ser adquiridos na home page do fabricante: www.tato.ind.br
Hardware:
Monte o circuito ao lado em uma matriz de contatos ou na placa StepLab. Confira as ligaes. Evite curto-circuito, pois um erro pode ocasionar a perda de um pino de I/O.
O VDD + 5VCC.
Software:
Digite o mesmo texto da figura em seu compilador.
Depois de digitado, clique com mouse sobre o cone compile para transformar seu programa em linguagem de mquina.
Caso surja uma mensagem de erro, aps o clique no cone compile, d ok na tela de mensagem e revise todo o texto. O compilador est lhe dizendo que existe um erro no cdigo fonte, um Bug. Por isso Debugar um programa fundamental antes da compilao final.
Agora pressione novamente o cone compile, ele ir compilar o programa.
Agora faa o download para o C. Verifique o cabo de gravao.
Aguarde, o compilador est estabelecendo comunicao com o C.
Veja o resultado! Caso o led no tenha piscado, revise o hardware e seu software.
Introduo a Microcontroladores com BASIC Step
Derli Lus Angnes
7 Instrues de comando do BASIC Step
Vamos utilizar a linguagem Pbasic para desenvolver nossos programas, o compilador tambm suporta a linguagem Tbasic, desenvolvida pelo fabricante. A linguagem Pbasic muito semelhante utilizada por outros microcontroladores: BASIC Stamp, 8052-Basic... Por essa razo, adotaremos o Pbasic como linguagem principal nos experimentos do curso.
Tabela de Instrues do BASIC Step Instrues em Portugus - Tbasic Instrues em Ingls - Pbasic ALTO LE BRANCH OUTPUT ALEATRIO LESERIAL BUTTON PAUSE BAIXO LIGA DEBUG POT CHAVE MEDEPULSO EEPROM PULSIN CONSOLE PAUSA END PULSAUT DESCANA POTENCIOMETRO FOR...NEXT PWM DESLIGA PROCURA GOSUB RANDOM DORME PULA GOTO READ ENTRADA REPITA...CONTINUE HIGH RETURN ESCREVE RETORNA IF...THEN REVERSE ESCREVESERIAL SAIDA INPUT SERIN EXECUTE SE...ENTO LET SEROUT FIM SOM LOOKDOWN SLEEP GERAPULSO TABELA LOOKUP SOUND INVERTE VAIPARA LOW TOGGLE INVERTEDIREO NAP WRITE
So 32 instrues a disposio do programador, em nosso curso no veremos todas por no haver necessidade. Como vemos na tabela acima, percebemos que o compilador suporta duas linguagens: o Tbasic e o Pbasic. Disponibilizamos todas as instrues no anexo. Os comentrios podem ser escritos aps o smbolo . Um comentrio no considerado pelo compilador, ele deve ser utilizado para comentar uma linha de programao. Exemplo:
pin0 = 1 liga pino 0 do basic step
Experimento 02 : Trabalhando com sadas
Os pinos do BASIC Step quando estiverem trabalhando como sada drenam no mximo 25mA em sua sada, para cargas que necessitem de uma capacidade maior de corrente h a necessidade de ser adicionado um amplificador de corrente na sada (transistor, driver, tiristor, rel, contactora).
Ao lado um driver 2004. O C.I. possui 7 transistores darlington NPN. O C.I. 2004 pode ser utilizado com o BASIC Step, sempre que houver necessidade de elevao da corrente dos pinos. No esquea que o 2004 inverte o sinal. Para acionar cargas de baixa potncia, como os diodos emissores de luz, no se faz necessrio utilizar o driver. Desde que no ultrapasse 25mA por pino.
Introduo a Microcontroladores com BASIC Step
Derli Lus Angnes
8
a) Sinalizador para sada de veculos:
Vamos criar nosso segundo programa, um sinalizador de veculos:
Hardware:
Monte o circuito ao lado na placa StepLab. Utilizando o 2004 e um rel poderamos utilizar este circuito prximo a uma garagem.
Software: *********************************** *PROGRAMA: Sinalizador de veculo * *PROGRAMADOR: Derli L. Angnes * *DATA: 02/11/02 * *VERSO: 1.0 * ***********************************
output 0 o comando torna pino 0 uma sada novamente: novamente: um label, uma posio de memria
pin0 = 0 estamos atribuindo a sada 0 o binrio 0 o led liga pause 1000 pausa a sada por 1000ms = 1seg. pin0 = 1 estamos atribuindo a sada 0 o binrio 1 led desl. pause 1000 pausa a sada por 1000ms = 1seg. goto novamente goto manda saltar para label novamente
O resultado no compilador deve ficar igual tela a baixo:
Agora revise o programa e corrija erros se houver.
Salve o programa no disket.
Depois compile o programa.
Por ltimo, transfira o programa para o BASIC Step, clicando no cone Download.
Aguarde a transferncia!
Introduo a Microcontroladores com BASIC Step
Derli Lus Angnes
9 Se seu programa estiver funcionando voc deve ter observado que somente um led est oscilando, necessrio terminar o programa. Acrescente os comandos para fazer o segundo led piscar. Uma outra forma de escrever o programa anterior utilizando os comandos high e low. Veja:
Software: *********************************** *PROGRAMA: Sinalizador de veculo * *PROGRAMADOR: Derli L. Angnes * *DATA: 02/11/02 * *VERSO: 2.0 * ***********************************
novamente: novamente: um label, uma posio
low 0 pino 0 est em nvel baixo pause 1000 pausa a sada por 1000ms = 1seg. high 0 pino 0 est em nvel alto pause 1000 pausa a sada por 1000ms = 1seg. goto novamente goto manda saltar para label novamente,entra em ciclo
Os comandos low e high atribuem nvel lgico s sadas e ao mesmo tempo configura o pino declarado como uma sada.
b) Seqencial de 6 canais
Hardware: Monte o circuito ao lado na placa StepLab. Vamos construir um seqencial de 6 canais, lembra do 4017...
Software: *********************************** *PROGRAMA: Seqncial de 6 canais * *PROGRAMADOR: Derli L. Angnes * *DATA: 02/11/02 * *VERSO: 1.0 * ***********************************
REPITA: label
LOW 0 pe nvel baixo na porta 0 HIGH 0 pe nvel alto na porta 0 PAUSE 100 aguarda 100ms LOW 0 pe nvel baixo na porta 0
LOW 1 pe nvel baixo na porta 1 HIGH 1 pe nvel alto na porta 1 PAUSE 100 aguarda 100ms LOW 1 pe nvel baixo na porta 1
LOW 2 pe nvel baixo na porta 2
Introduo a Microcontroladores com BASIC Step
Derli Lus Angnes
10 HIGH 2 pe nvel alto na porta 2 PAUSE 100 aguarda 100ms LOW 2 pe nvel baixo na porta 2
LOW 3 pe nvel baixo na porta 3 HIGH 3 pe nvel alto na porta 3 PAUSE 100 aguarda 100ms LOW 3 pe nvel baixo na porta 3
LOW 4 pe nvel baixo na porta 4 HIGH 4 pe nvel alto na porta 4 PAUSE 100 aguarda 100ms LOW 4 pe nvel baixo na porta 4
LOW 5 pe nvel baixo na porta 5 HIGH 5 pe nvel alto na porta 5 PAUSE 100 aguarda 100ms LOW 5 pe nvel baixo na porta 5
GOTO REPITA retorna para o incio do programa
Existe um modo de programar o mesmo programa de forma mais enxuta, veja:
Software: *********************************** *PROGRAMA: Seqncial de 6 canais * *PROGRAMADOR: Derli L. Angnes * *DATA: 02/11/02 * *VERSO: 2.0 * ***********************************
dirs=%11111111 atribui todos os pinos como sada symbol a = b0 symbol declara varivel a como sendo um byte a =1 estamos atribuindo a varivel a o valor 1 inicio: label inicio
if a = 64 then muda se a for igual a 64 ento v para muda pause 100 espera 100ms pins=a atribui a porta (0a7) o valor da varivel a a=a*2 multiplica (a x 2) e atribui o resultado a goto inicio salta para o rtulo inicio
muda: label muda a= 1 muda o valor da varivel a para 1 goto inicio salta para o rtulo inicio e entra em ciclagem
Informaes sobre variveis Variveis so muito utilizadas em programao, elas podem assumir valores numricos e podem mudar seu valor ao longo do programa. Se houver necessidade de realizar clculos num programa, o resultado sempre deve ser dado uma varivel. Para declarar variveis devemos utilizar o comando symbol. Os nomes das variveis podem ser de trs tipos: 1bit, 1byte (8bits) ou 1word(16bits). Sempre devemos declarar as variveis no menor tamanho possvel para o dado que ela ir armazenar. O BAISIC Step tem um nmero limitado de variveis. Elas so organizadas em 7 variveis words (w0 at w6), 14 variveis bytes (b0 at b13) e 16 variveis bits (bit0 at bit15). - 1 byte pode guardar valores de 0 at 255 - 1 word pode guardar valores de 0 at 65.535 Exemplos de atribuio de nmeros nos sistemas: decimal, hexadecimal e binrio
a = 15 atribuio no sistema decimal (a = 15) a = $f atribuio no sistema hexadecimal - $ (a = 15) a = %11111111 atribuio no sistema binrio - % (a = 15)
Introduo a Microcontroladores com BASIC Step
Derli Lus Angnes
11 c) Contador dcada
Hardware:
Monte o circuito ao lado. Ser necessrio um display de 7 segmentos anodo comum e um decodificador BCD p/ cdigo 7 segmentos. No esquea de acrescentar 7 resistores entre a sada do decodificador e o display. O valor do resistor deve ser prximo de 470R.
dirs=$ff habilita todos pinos como sada SYMBOL conta = b0 declara varivel conta como sendo do tipo byte inicio: label inicio conta = 0 varivel conta igual a 0
incrementa: label incrementa
IF conta >= 10 THEN inicio impede que o contador passe do valor 9
pins=conta atribui a porta o valor atual da varivel conta PAUSE 1000 pausa por 1 segundo conta = conta+1 incrementa a varivel conta em uma unidade GOTO incrementa salta para label incrementa
d) Contador dcada sem decodificador e com display anodo comum
Uma das vantagens dos microcontroladores a possibilidade de trabalhar com tabelas. Para acionar um display de 7 segmentos se faz necessrio utilizar um decodificador que possua internamente uma tabela de converso BCD para 7 segmentos. Vamos criar essa tabela via software, eliminando dessa forma o decodificador externo. O programa a seguir utiliza uma tabela contendo o cdigo que ir imprimir no display uma contagem de 0 a 9. Poderamos alterar a tabela para acionar um motor-de-passo.
Introduo a Microcontroladores com BASIC Step
Derli Lus Angnes
12
Hardware:
Monte o circuito ao lado, no esquea de por os resistores (7 x 470R).
Software: *********************************** *PROGRAMA: Contador dcada * *PROGRAMADOR: Derli L. Angnes * *DATA: 02/11/02 * *VERSO: 1.0 * *********************************** dirs=$ff habilita todos pinos como sada rotate: rtulo FOR b2=0 TO 9 FOR faz b2 assumir valores de 0 a 9 PAUSE 1000 pra por 1 seg. LOOKUP b2,(64,121,36,48,25,18,2,120,0,16),b3 b2 pega um valor na tabela e repassa o dado para a porta, atravez da varivel b3. pins=b3 faz com que os dados de b3 passem para a porta Next retorna para o lao FOR para incrementar unidade caso b2>9, o programa continua aqui GOTO rotate salta para o rtulo rotate
e) Gerando tons musicais
O BASIC Step possui um comando prprio para gerar tons musicais e rudos. Todos comandos utilizados pelo BASIC Step podem ser consultados detalhadamente no help (ajuda) do compilador ou no anexo desse fascculo.
Hardware:
Monte o circuito ao lado, utilize a placa StepLab. Interligue o circuito ao pino 1 do BASIC Step. O falante pode ser de 8R/250mW.
Introduo a Microcontroladores com BASIC Step
Derli Lus Angnes
13 Software: *********************************** *PROGRAMA: Gera tons * *PROGRAMADOR: Derli L. Angnes * *DATA: 02/11/02 * *VERSO: 1.0 * ***********************************
repete: SOUND 1,(20,100,56,100,100,100,120,100) gera tons musicais SOUND 1, (250,140) gera um rudo por um tempo GOTO repete
f) Gerando tons musicais aleatoriamente
O BASIC Step possui um comando prprio para gerar notas musicais e rudo, SOUND.
Hardware:
Monte o circuito ao lado, utilize a placa StepLab. Interligue o circuito ao pino 1 do BASIC Step.
RANDOM W1 gera nmero aleatrio de 16BITs. B4=b2/2 pega-se somente os 8 bits LSB e divide por 2 SOUND 1,(b4,100) executa tons musicais aleatrios
GOTO loop repete o processo
Experimento 03 : Trabalhando com entradas
Para declarar um pino como entrada utiliza-se o comando input e sada como output, porm se no for declarado, todos os pinos esto configurados intrinsecamente para serem entradas.
a) Teclando tons musicais
Hardware: Monte o circuito ao lado, utilize a placa StepLab.
OUTPUT 2 pino 2 sada INPUT 0 pino 0 e 1 entrada INPUT 1
repete:
IF pin0=0 THEN agudo se o pino 0 for pressionado pula p/agudo IF pin1=0 THEN grave se o pino 1 for pressionado pula p/grave GOTO repete salta para repete
agudo: rotina para gerar um ton agudo SOUND 2,(120,150) GOTO repete
grave: rotina para gerar um ton grave SOUND 2,(1,150) GOTO repete
b) Escolhendo um led
Dentre 4 leds ser possvel selecionar um deles por intermdio de um nico interruptor.
Hardware: Monte o circuito ao lado, utilize a placa StepLab. Esse experimento utiliza o mesmo principio de alguns relgios digitais e outros equipamentos eletrnicos. Uma nica tecla permite selecionar vrias funes (leds). O comando button um pouco complexo, porm muito importante para quem pretende trabalhar com entradas sem sofrer problemas com repique de chaves.
dirs=%01111111 Pino 7 declarado entrada, demais sadas let b2 = 0 : b3 = 0 zeramento de variveis obseve dois comandos em uma nica linha Loop:
BUTTON 7,0,5,1,b2,1,proximo quando o boto acionado vai para rotina proximo debug b2 mostra o estado de b2 em uma tela do PC
Introduo a Microcontroladores com BASIC Step
Derli Lus Angnes
15
goto Loop salta para loop
proximo: rotina que ir incrementar os leds b3=b3+1 incrementa em uma unidade debug b3 mostra o esto de b3 na tela do PC if b3<4 then tabela se b3 for menor que 4 salta para tabela
b3=0 se b3 for maior que 4 b3 ser zerada
tabela: rotina que contm a tabela de sada lookup b3,(1,2,4,8),pins
goto loop salta para o incio do programa
c) Conhecendo o comando potencimetro
Hardware: Monte o circuito ao lado, utilize a placa StepLab.
POT 0,110,b2 'l potencimetro em pino 0 e carrega b2 POT 1,50, b3 l potencimetro em pino 1 e carrega b3
DEBUG b2,b3 mostra valor das variveis na tela do PC
goto abc repete o processo
d) Temporizador de tempo ajustvel
O comando potencimetro possibilita ao programador trabalhar com valores analgicos. Ao variar a resistncia eltrica de um potencimetro iremos modificar o tempo de carga do capacitor, o BASIC Step calcula o tempo de carga do capacitor e repassa um valor numrico a uma varivel. O programador pode realizar uma srie de sentenas para tomar uma deciso liga motor, liga lmpada... Com o comando POT poderamos desenvolver um termmetro, termostato de forma simples.
Veja no prximo experimento um exemplo de temporizador. As chaves J1 a J6 permitem a escolha de tempos diferenciados, R8 modifica o tempo.
Introduo a Microcontroladores com BASIC Step
Derli Lus Angnes
16 Hardware: Monte o circuito ao lado, utilize a placa StepLab.
Caso o experimento no funcione ser necessrio reajustar valores do comando POT ou at mesmo das condies (if then).
abc: rotina principal w4=0 atribui a w4 como sendo 0 low 2 faz pino 2 assumir valor 0 b2=0:b3=0 zera variveis b2 e b3 POT 0,110,b2 l potencimetro em pino 0 e carrega b2 POT 1,50,b3 l potencimetro em pino 1 e carrega b3
debug b2,b3 mostra na tela do PC os valores de b2 e b3
if b2<=0 then t0 se b2 satisfaz a situao salta para t0 if b2<=22 then t1 se b2 satisfaz a situao salta para t0 if b2<=36 then t2 se b2 satisfaz a situao salta para t0 if b2<=50 then t3 se b2 satisfaz a situao salta para t0 if b2<=63 then t4 se b2 satisfaz a situao salta para t0 if b2<=77 then t5 se b2 satisfaz a situao salta para t0 if b2<=90 then abc se b2 satisfaz a situao salta para t0
goto abc
t0: rotina do tempo 0 high 2 faz pino assumir nvel 1 w4=b3*10 aqui a varivel W4 o resultado de b3 x 10 pause w4 aguarda o tempo acumulado em w4 low 2 faz pino assumir nvel 0 goto abc retorna para abc
t1: rotina do tempo 2 high 2 w4=b3*20 pause w4 low 2 goto abc
t2: rotina do tempo 3 high 2 w4=b3*30 pause w4 low 2 goto abc
t3: rotina do tempo 4 high 2 w4=b3*40
Introduo a Microcontroladores com BASIC Step
Derli Lus Angnes
17 pause w4 low 2 goto abc
t4: rotina do tempo 5 high 2 w4=b3*50 pause w4 low 2 goto abc
t5: rotina do tempo 6 high 2 w4=b3*60 pause w4 low 2 goto abc
Experimento 04 : Trabalhando com display de cristal liquido
O display ao lado trabalha no formato serial em 2400bps, 8bits, sem paridade. Toda inicializao automtica e leva em torno de 400ms. Ele possui 16 colunas e 2 linhas totalizando 32 posies (16x2). alimentado com 5V com um consumo de 3mA. O mdulo de display LCD usado com o BASIC Step simples de ser usado, para realizar a comunicao serial utilizamos apenas um pino do BASIC Step. A instruo utilizada para o envio de informaes do Step para o display feita atravs do comando SEROUT. Especificaes: alimentao: 5v consumo: 3mA velocidade de comunicao: 2400bps Funcionamento: Os dados que sero enviados ao display s sero aceitos no formato serial (comando SEROUT do Basic Step), na velocidade de 2400bps, 8 bits, sem paridade, configuraes essas que no podem ser mudadas. O display aceita tanto nveis RS-232, quanto TTL invertido. Para serem enviados os comandos ao display, ser usado o comando SEROUT, o qual ser explicado abaixo: serout x,y,z O primeiro parmetro (x), informa por qual pino do BASIC Step se deseja enviar sinais seriais, no caso, enviar sinais ao display. O segundo parmetro (y), o modo como a porta serial do Step ir enviar os dados. Para uso com o display que necessita da velocidade de 2400bps, esse parmetro fica assim: serout x,N2400,z
Introduo a Microcontroladores com BASIC Step
Derli Lus Angnes
18 O terceiro parmetro (z), parte onde sero enviados os dados ao display. Comandos: Para que o display execute as suas funes devem ser enviados comandos que so reconhecidos por ele. Esses comandos so colocados na parte z da instruo serout, e devem vir entre parnteses. Sempre antes de enviar uma instruo ao display, deve-se enviar o cdigo 254, de acordo com o exemplo abaixo: serout 2,N2400,(254,1) limpa o display ligado ao pino 2 do Step. Veja a lista dos cdigos e um exemplo de comando: Comando Cdigo Limpar o display 1 Retornar cursor ao inicio 2 Apagar o display 8 Ligar o display 12 Desligar cursor 12 Ligar cursor piscante 13 Ligar cursor fixo 14 Mover o display p/ a esquerda 24 Mover o display p/ a direita 28 Mover cursor p/ a esquerda 16 Mover cursor p/ a direita 20 Posicionar cursor (vide tabela de posies) n em DECIMAL, que representa a posio Exemplo de comando: ... serout 0,N2400,(254,1,2) limpa o display, coloca o cursor no inicio; display ligado ao pino 0 serout 0,N2400,("BASIC Step") mostra a mensagem "BASIC Step" na tela do display ...
** Note que o comando 254, sempre vai antes de qualquer instruo a ser enviada ao display, com exceo das mensagens, que no devem vir com os 254.
Posies:
Usando os comandos apresentados na tabela abaixo, pode-se colocar o cursor em qualquer das 32 posies no display. Essas posies referem-se ao display 16X2.
Exemplo de uso das posies: ... serout 0,N2400,(254,1,192) posiciona cursor no incio da 2 linha serout 0,N2400,("basic step") mostra a mensagem "basic step" na posio indicada acima ...
Introduo a Microcontroladores com BASIC Step
Derli Lus Angnes
19
a) Inserindo mensagem no LCD
Esse programa conta de 0 a 255 e mostra cada valor no display.
Hardware: Monte o circuito ao lado, utilize a placa StepLab. Tome cuidado ao conectar o display a placa StepLab. Utilize a sada de 5V.
Software: *********************************** *PROGRAMA: Mensagem no LCD * *PROGRAMADOR: Derli L. Angnes * *DATA: 02/11/02 * *VERSO: 1.0 * ***********************************
symbol cmd=254 atribuio de valores symbol clear=1 symbol home=2
b0=0 serout 0,N2400,(cmd,clear) 'limpa display loop: serout 0,N2400,(cmd,home) 'cursor no inicio serout 0,N2400,("valor de b0=",#b0) mostra valor de b0 no display b0=b0+1 incrementa b0 pause 500 goto loop repete o processo
Exemplo de aplicao : Semforo
Iremos demonstrar uma aplicao prtica envolvendo o BASIC Step, um semforo de dois tempos. A idia inicial do software dos estudantes em eletrnica Jonas e Marcelo da turma de 2001/2002 de aprendizagem industrial.
Hardware: Monte o circuito ao lado, utilize a placa StepLab. Tome cuidado ao conectar o display a placa StepLab. Utilize a sada de 5V. Jonas e Marcelo no Laboratrio
Introduo a Microcontroladores com BASIC Step
Derli Lus Angnes
20 Software: *********************************** *PROGRAMA: Semforo de ponto nico* *PROGRAMADOR: Jonas & Marcelo * *DATA: 02/11/02 * *VERSO: 1.0 * ***********************************
O BASIC Step-I ideal para iniciao e aprendizado em microcontroladores, mas chegamos em um momento que suas limitaes, como 256 bytes de memria, so empecilho para projetos. O mercado apresenta outros membros da mesma famlia: BASIC Step-II e o Step-III.
B A S I C
S t e p - I
256 posies de memria (256bytes) 8 entradas/sadas Alimentao de 7,5V a 15V Tamanho: 3,5 x 3,0 cm B A S I C
S t e p - I I
2048 posies de memria (2k) Clock de 10 MHz 15 entradas/sadas Tamanho: 5cm x 2,7cm B A S I C
S t e p - I I I
4096 posies de memria (4k) Clock de 8 MHz 20 entradas/sadas Conversor AD de 6 canais e 10 bits Tamanho: 3,5cm x 2,5cm
Introduo a Microcontroladores com BASIC Step
Derli Lus Angnes
22 ANEXO Instrues de comando do BASIC Step
COMANDO ALTO pino LIGA pino HIGH pin
Muda o pino especificado para nvel alto (5V). Se o pino estiver programado como entrada, ele muda para sada.
Pin uma varivel/constante (0-7) que especifica o pino de entrada/sada.
A instruo High equivalente a:
output 3 ' Make pin 3 an output. let pin3 = 1 ' Set pin 3 high.
Note que o comando Output aceita o nmero do pino (3), enquanto que Let necessita o nome do pino pin3. Ento alm de economizar uma instruo, o comando High permite fazer um pino sada alta utilizando somente nmeros. Olhando o programa abaixo, imagine como seria difcil escreve-lo usando Output e Let.
Isto mostra um problema com o High. os programadores, as vezes, substituem os nomes dos pinos como pin3 pelo nmero do pino. Lembre-se que os nomes so variveis bit. Como bit, eles podem armazenar 0 ou 1. A linha "High pin3" uma linha vlida, mas significa, "Pegue o estado do pin3. Se pin3 0, faa o pino 0 como sada em nvel alto. Se pin3 1, faa o pino 1 sada em nvel alto".
Programa exemplo:
' One at a time, change each of the pins to output and set it high. for b2 = 0 to 7 ' Eight pins (0-7). HIGH b2 ' Set pin no. indicated by b2. pause 500 ' Wait 1/2 second between pins. next ' Do the next pin.
COMANDO ALEATRIO RANDOM wordvariable
Gera um nmero pseudo-aleatrio em wordvariable.
Wordvariable uma varivel/constante (0-65535) usada pela rotina e que guarda o valor gerado. A cada execuo do comando o nmero gerado colocado na varivel.
O Basic Step usa uma sequncia de 65535 nmeros aleatrios para executar esta instruo. Quando Random executa, o valor em wordvariable determina em que lugar da sequncia pegar o prximo nmero. Se o nmero inicial for sempre o mesmo, a mesma sequncia de nmeros ser gerada. Apesar deste mtodo no ser absolutamente aleatrio, ele bom o bastante para a maioria das aplicaes.
Para obter um resultado verdadeiramente aleatrio, voc precisa adicionar um elemento de incerza ao processo. Por exemplo, o programa pode executar Random continuamente at o usurio apertar um boto.
Introduo a Microcontroladores com BASIC Step
Derli Lus Angnes
23 Programa exemplo:
loop: RANDOM w1 ' Generate a 16-bit random number. sound 1,(b2,10) ' Generate a random tone on pin 1 using the low ' byte of the random number b2 as the note num goto loop ' Repeat the process
COMANDO BAIXO pino DESLIGA pino LOW pin
Muda o pino especificado para nvel 0. Se o pino estiver programado como entrada, ele muda para sada.
Pin uma varivel/constante (0-7) que especifica o pino a usar.
A instruo Low equivalente a:
output 3 ' Make pin 3 an output. let pin3 = 0 ' Set pin 3 low.
Note que o comando Output aceita o nmero do pino (3), enquanto que Let necessita o nome do pino pin3. Ento alm de economizar uma instruo, o comando Low permite fazer um pino sada baixa utilizando somente nmeros. Olhando o programa abaixo, imagine como seria difcil escreve-lo usando Output e Let.
Isto mostra um problema com o Low. os programadores, as vezes, substituem os nomes dos pinos como pin3 pelo nmero do pino. Lembre-se que os nomes so variveis bit. Como bit, eles podem armazenar 0 ou 1. A linha "Low pin3" uma linha vlida, mas significa, "Pegue o estado do pin3. Se pin3 0, faa o pino 0 como sada em nvel baixo. Se pin3 1, faa o pino 1 sada em nvel baixo".
Programa exemplo:
'One at a time, change each of the pins to output and set it high.
for b2 = 0 to 7 ' Eight pins (0-7). LOW b2 ' Reset pin no. indicated by b2. pause 500 ' Wait 1/2 second between pins. next ' Do the next pin.
Debounce button input, perform auto-repeat, and branch to address if button is in target state. Button circuits may be active-low or active-high (see the diagram on the next page).
Pin uma varivel/constante (0-7) que especifica o pino de I/O a ser usado.
Downstate uma varivel/constante que especifica qual estado lgico lido quando o boto pressionado.
Delay uma varivel/constante (0-255) que especifica quanto tempo o boto precisa ser pressionado antes que a repetio automtica comece. O tempo medido em ciclos da rotina Button. O Delay tem dois valores especiais; 0 e 255. Quando for 0, a rotina retorna o estado do boto sem debounce ou repetio automtica. Quando for 255, a rotina faz debounce, mas no repetio automtica.
Introduo a Microcontroladores com BASIC Step
Derli Lus Angnes
24
Rate uma varivel/constante (0-255) que especifica a taxa de repetio automtica. A taxa expressa em ciclos da rotina Button.
Bytevariable a rea de trabalho da rotina. Ela precisa ser apagada antes de ser usada pela rotina Button pela primeira vez.
Targetstate uma varivel/constante (0 ou 1) que especifica qual estado o boto tem que estar para ocorrer o desvio (0=no pressionada, 1=pressionada).
Address um label que especifica para onde desviar se o boto estiver no estado desejado.
Quando voc pressiona um boto ou muda uma chave, os contatos fecham ou abrem a coneco. Um pulso de rudo eltrico ocorre, j que os contatos repicam um contra o outro. A funo debounce previne estes rudos de serem interpretados como mais de uma ao do boto.
O comando Button permite ao Basic Step responder ao pressionamento de um boto do mesmo modo que o teclado do PC faz. Quando voc aperta uma tecla, o caracter aparece no monitor. Se voc mantm a tecla apertada por um curto per;iodo de tempo, uma rpida seqncia de caracteres aparece no monitor. A funo repetio automtica pode ser programada para funcionar do mesmo modo.
O comando Button foi criado para ser usada dentro de um loop. A cada interao do loop, o comando Button checa o estado do pino especificado. Quando ele encontra pela primeira vez o estado especificado em downstate, o comando elimina o rudo eltrico. Ele ento de acordo com o valor de targetstate, desvia para address (targetstate=1) ou no (targetstate=0).
Se o boto mantido em downstate, o comando Button conta o nmero de vezes que o loop executa. Quando esta contagem chega a delay, o comando executa novamente a ao especificada por downstate e address. A partir de ento, se o boto permanece em downstate, o comando espera rate nmero de ciclos entre as aes.
O mais importante a lembrar sobre o comando Button, que ele no interrompe a execuo do programa. De modo a funo delay repetio automtica funcionarem, o comando Button deve ser executado dentro de um loop.
Programa exemplo:
' This program toggles (inverts) the state of an LED on pin 0 when the ' active-low switch on pin 7 is pressed. When the switch is held down, Button ' waits, then rapidly autorepeats the Toggle instruction, making the LED ' flash rapidly. When the switch is not pressed, Button skips the Toggle ' instruction. Note that b2, the workspace variable for Button, is cleared ' before its first use. Don't clear it within the loop.
let b2 = 0 ' Button workspace cleared.
Introduo a Microcontroladores com BASIC Step
Derli Lus Angnes
25 Loop: BUTTON 7,0,200,100,b2,0,skip ' Go to skip unless pin7=0. Toggle 0 ' Invert LED. ... ' Other instructions. skip: goto Loop ' Skip toggle and go to Loop.
Mostra a varivel especificada (bit, byte ou word) numa janela na tela do PC connectado ao Basic Step. O comano Debug funciona somente aps o programa estar rodando.
COMANDO DESCANA perodo NAP period
Entra no modo sleep por um curto perodo de tempo. O consumo de energia reduzido para algo em torno de 20uA, assumindo que no h cargas nas sadas.
Period uma varivel/constante que determina a durao do modo sleep. A durao de (2 2 period) x18ms. Period pode variar de 0 a 7, resultando nas duraes mostradas abaixo.
Period Nap Length
0 18 ms 1 36 ms 2 72 ms 3 144 ms 4 288 ms 5 576 ms 6 1152 ms 7 2304 ms
Nap usa o mesmo mecanismo de desligamento/religamento de Sleep, com uma grande diferena. Durante Sleep o Basic step compena as variaes de velocidade do temporizador watchdog que serve como despertador. como resultado, intervalor longos de sleep tem preciso de 1%. O comando Nap controlado pelo temporizador watchdog sem correo. variaes em temperatura, tenso e fabricao do chip podem fazer a durao do nap variar em at -50 e +100% (por exemplo o comando NAP 0 pode variar de 9 a 36 ms).
Se a sua aplicao est alimentando cargas durante o comando nap, a energia vai ser interrompida por um perodo de 18ms quando a Basic Step acorda. A razo que o reset que acorda o chip tambm muda todos os pinos para entrada. Quando o PBASIC volta a ter controle do chip, ele restaura as direes corretas dos pinos.
Quando voc usa End, Nap ou Sleep, certifique-se que as cargas podem suportar estas faltas de energia. Um modo simples de contornar isto conectar resistores para o tera ou +5V conforme o necessrio, para assegurar o contnuo fornecimento de corrente durante o reset.
O programa exemplo abaixo pode ser usado para demonstrar o efeito do comando nap usando um led e resistor ou um osciloscpio como mostrado na figura.
Introduo a Microcontroladores com BASIC Step
Derli Lus Angnes
26 Programa exemplo:
' During the Nap period, the Stamp will continue to drive loads connected to
' pins that are configured as outputs. However, at the end of a Nap, all pins ' briefly change to input, interrupting the current. This program may be ' used to demonstrate the effect. low 7 ' Make pin 7 output-low. Again: NAP 4 ' Put the Stamp to sleep for 288 ms. goto Again ' Nap some more.
COMANDO BAIXO pino DESLIGA pino LOW pin
Muda o pino especificado para nvel 0. Se o pino estiver programado como entrada, ele muda para sada.
Pin uma varivel/constante (0-7) que especifica o pino a usar.
A instruo Low equivalente a:
output 3 ' Make pin 3 an output. let pin3 = 0 ' Set pin 3 low.
Note que o comando Output aceita o nmero do pino (3), enquanto que Let necessita o nome do pino pin3. Ento alm de economizar uma instruo, o comando Low permite fazer um pino sada baixa utilizando somente nmeros. Olhando o programa abaixo, imagine como seria difcil escreve-lo usando Output e Let.
Isto mostra um problema com o Low. os programadores, as vezes, substituem os nomes dos pinos como pin3 pelo nmero do pino. Lembre-se que os nomes so variveis bit. Como bit, eles podem armazenar 0 ou 1. A linha "Low pin3" uma linha vlida, mas significa, "Pegue o estado do pin3. Se pin3 0, faa o pino 0 como sada em nvel baixo. Se pin3 1, faa o pino 1 sada em nvel baixo".
Programa exemplo:
One at a time, change each of the pins to output and set it high.
for b2 = 0 to 7 ' Eight pins (0-7). LOW b2 ' Reset pin no. indicated by b2. pause 500 ' Wait 1/2 second between pins. next ' Do the next pin.
COMANDO DORME segundos SLEEP seconds
Entra no modo sleep pelo nmero especificado de segundos.
Introduo a Microcontroladores com BASIC Step
Derli Lus Angnes
27 Seconds uma varivel/constante (1-65535) que espacifica a durao do modo sleep em segundos. A durao do sleep pode variar de 2.3 segundos (veja a nota abaixo) at mais ou menos 18 horas. O consumo de energia reduzido a 20uA, assumindo que no h outras caargas ligadas.
Nota: A resoluo do Sleep de 2.304 segundos. Sleep arredonda o valor para o mltiplo de 2.304 mais prximo. Sleep 1 cause uma pausa de 2.304 segundos, enquanto Sleep 10 uma de 11.52 segundos (5 x 2.304).
O comando Sleep permite ao Basic Step desligar-se e aps um perodo de tempo especificado, religar-se. O despertador que acorda o Step chamado watchdog timer. O watchdog um oscilador interno ao chip. Durante a pausa, o Step pariodicamente acorda e ajusta um contador para determinar quanto tempo ele est no modo Sleep. Se ainda no tiver passado o tempo especificado, ele volta para o Sleep.
Para assegurar intervalos precisos, o Step periodicamente compara o perodo do watchdog com um oscilador mais preciso. Perodos longos de Sleep tem uma preciso de 1%. Se o Basic Step est ativando alguma carga durante o Sleep, a corrente ser interrompida por aproximadamente 18ms quando o Step acorda a cada 2.3 segundos. A razo que o reset que acorda o Step, tambm coloca todos os pinos como entrada e o Step leva 18ms para voltar os pinos para seus estados corretos.
Se voc planeja usar os comandos End, Nap ou Sleep em seus programas, certifique-se que suas cargas podem tolerar estas faltas de energia momentneas. O modo mais simples de contornar isto, conectar resistores para +5V ou terra conforme o necessrio para suprir energia para as cargas.
Programa exemplo:
SLEEP 3600 ' Sleep for about 1 hour. goto xyz ' Continue with program ' after sleeping.
COMANDO ENTRADA pino INPUT pin
Muda o pino especificado para entrada. Isto desliga o driver de sada do pino, permitindo o seu programa ler qualquer estado que estiver presente no pino.
Pin uma varivel/constante (0-7) que especifica qual pino usar.
Existem diversos modos de setar um pino como entrada. Quando o programa inicia, todos os pinos esto como entrada. As instrues de entrada (Pulsin, Serin) automaticamente mudam o pino especificado para entrada e o deixam neste estado. Escrevendo 0 no bit correspondente da varivel dirs muda o pino para entrada. E tambm a instruo Input.
Quando um pino setado como input, seu programa pode checar o seu estado lendo o seu valor. Por exemplo:
Hold: if pin4 = 0 then Hold ' Stay here until pin4 is 1.
O programa est lendo o estado do pino 4 que est sendo ativado por um circuito externo. Se nada estiver conectado ao pino 4, ele pode estar em qualquer estado (1 ou 0) e pode mudar de estado de modo aleatrio.
O que acontece se o seu programa escreve num pino setado como entrada? O dato escrito na porta de sada, mas como o driver de sada est desligado, no h mudana. Se o pino mudado para sada, o ltimo valor escrito na porta vai aparecer no pino. O programa seguinte explica como isto funciona:
Introduo a Microcontroladores com BASIC Step
Derli Lus Angnes
28
Programa Exemplo:
' To see this program in action, connect a 10k resistor from pin 7 to +5V. ' When the program runs, a debug window will show you the state at pin 7 ' (a 1, due to the +5 connection); the effect of writing to an input pin (none); ' and the result of changing an input pin to output (the latched state appears ' on the pin and may be read by your program). Finally, the program shows ' how changing pin 7 to output writes a 1 to the corresponding bit of dirs.
INPUT 7 ' Make pin 7 an input. debug "State present at pin 7: ",#pin7,cr,cr let pin7 = 0 ' Write 0 to output latch. debug "After 0 written to input: ",#pin7,cr,cr output 7 ' Make pin 7 an output. debug "After pin 7 changed to output: ",#pin7,cr debug "Dirs (binary): ",#%dirs ' Show contents of dirs.
COMANDO ESCREVE posio,dado WRITE location,data
Guarda dados na memria EEPROM.
Location uma varivel/constante (0-255) que determina em qual posio da memria armazenar o dado.
Data uma varivel/constante (0-255) que vai ser guardada na memria.
A memria EEPROm utilizada tanto para o armazenamento do programa (armazenado a partir do endereo 254, para baixo) e dos dados( a partir do 0 e para cima). Para garantir que seu programa no grava os dados em cima dele mesmo, leia a posio 255 da EEPROM antes de guardar qualquer dado. A posio 255 guarda o endereo da primeira instruo do seu programa. Ento, seu programa pode utilizar qualquer espeo abaixo do valor no endereo 255. Por exemplo, se a posio 255 tem o valor 100, ento o seu programa pode utilizar as posies 0-99 para os dados.
Programa exemplo:
read 255,b2 ' Get location of last ' program instruction.loop: b2 = b2 - 1 ' Decrement to next ' available EEPROM location serin 0,N300,b3 ' Receive serial byte in b3. WRITE b2,b3 ' Store received serial ' byte in next EEPROM location. if b2 > 0 then loop ' Get another byte if there's room.
Configura uma porta serial de sada e transmite dados.
Pin uma varivel/constante (0-7) que especifica qual pino usar.
Baudmode uma varivel/constante (0-15) que especifica o modo da porta serial. Baudmode pode ser o nmero indicado por # ou o smbolo mostrado na tabela. Os outros parmetros de comunicao so setados para os falores mais utilizados: sem paridade, 8 bits de dados e um stop bit, geralmente abreviado como 8N1. estas parmetros no podem ser alterados.
Introduo a Microcontroladores com BASIC Step
Derli Lus Angnes
29 Data so variveis byte/constantes (0-255) que sero transmitidas. Se forem precedidas pelo smbolo #, os dados so transmitidos como cadeias de caracteres de at 5 caracteres. Sem o #, os dados so transmitidos como um byte nico.
O comando Serout faz do pino especificado uma porta serial de sada com as caractersticas definidas por baudmode. Ele transmite o dado em uma entre dois modos:
- Um byte nico.
- Uma cadeia de caracteres de com 1 a 5 caracteres.
Aqui esto alguns exemplos:
SEROUT 0,N2400,(65)
Transmite um byte com valor 65 atravs do pino 0 a 2400 bauds, polaridade invertida. Se voc receber este byte em um PC rodando um programa de comunicao, o caracter "A' ir aparecer na tela, porque 65 o cdigo ASCII de "A".
SEROUT 0,N2400,(#65)
Transmite a cadeia de caracteres "65" atravs do pino 0 a 2400 bauds, polaridade invertida. Se voc receber este byte em um PC rodando um programa de comunicao, o texto "65" ir aparecer na tela. Quando o valor precedido pelo smbolo "#", Serout automaticamente converte o valor para uma cadeia de caracteres.
Quando voc deve usar o smbolo #? Se voc est enviando dados deo Basic Step para um PC onde as pessoas iro ler o resultado, use #. se voc est enviando dados para outro Basic Step ou para um computador para futuro processsamento, mais eficiente omitir o #.
Enviando dados para o PC: Para enviar dados serialmente do Basic Step para o PC, voc precisa alguns fios, um conector e um programa de comunicao. Ligue o conector conforme mostrado no esquema abaixo e utilize polaridade invertida. embora a sada do Basic Step possa variar entre 0 e 5 volts ( e no entre +10V e -10V conforme o recomendado para RS- 232), a maioria dos PCs recebem os dados sem problemas.
Introduo a Microcontroladores com BASIC Step
Derli Lus Angnes
30
Se voc no possui um programa de comunicao, pode digitar e rodar o seguinte programa em QBASIC para configurar a porta serial e receber os dados do Basic Step.
QBASIC Program to Receive Data:
' This program receives data transmitted by the Stamp through the PC's ' COM1: serial port and displays it on the screen. To end the program, ' press control-break. Note: in the line below, the "0" in "CD0,CS0..." is a zero.
OPEN "COM1:2400,N,8,1,CD0,CS0,DS0,OP0" FOR INPUT AS #1 CLS Again: theChar$ = INPUT$(1,#1) PRINT theChar$; GOTO Again
Opes open-drais/open-source. As oito ltimas opes de configurao do comando Serout comeam com "O" de open-drais ou open-source. O diagrama abaixo mostra como utilizar o modo open-drain para conectar dois ou mais Basic Step a um nico PC formando uma rede. voc poderia tambm usar o modo open-source mas o resistor deveria ser ligado terra e o invesor substituido por um buffer no inversor.
Para entender porque voc deve usar o modo "open" numa rede, considere o que aconteceria se voc no usasse. Quando nenhum dos Steps esto transmitindo, todos os pinos esto em estado alto. Como todos esto em 5V, nenhuma corrente flui entre os pinos. Ento um Basic step transmite e muda sua sada bara nvel baixo. Com a sua sada em nvel baixo, ha um curto entre o +5V E O TERRA. A corrente flui entre os pinos, possivelmente danificando-os.
Se todos os Basic Steps so configurados para open-drais, o caso diferente. Quando os Steps no esto transmitindo seus pinos esto como entrada, efetivamente desconectando-os da linha serial. O resistor para o +5V mantm a linha em nvel alto. Quando um Step transmite, ele faz a linha serial ir para nvel baixo. Quase nenhuma corrente flui pelos pinos dos outros
Introduo a Microcontroladores com BASIC Step
Derli Lus Angnes
31 Basic Steps, pois esto como entrada. Mesmo se dois Steps transmitem simultaneamente, eles no podem danificar um ao outro.
Programa Exemplo:
abc: pot 0,100,b2 ' Read potentiometer on pin 0. SEROUT 1,N300,(b2) ' Send potentiometer ' reading over serial output. goto abc ' Repeat the process.
COMANDO EXECUTE endereo GOSUB address
O comando Gosub armazena o endereo da instruo seguinte a ele, desvia para address, e continua a execuo l. O prximo comando Return faz o programa voltar para o endereo armazenado, continuando a execuo doprograma na instruo seguinte ao gosub.
Address um label que especifica para onde desviar. At 16 GOSUBS so permitidos por programa. At 4 GOSUBs podem ser aninhados. O PBASIC armazena os dados referente ao gosub na varivel w6. Certifique-se que seu programa no escreva em w6 a no ser que todos os Gosubs tenham terminado, e no espere que o valor em w6 esteja intacto aps um Gosub.
Se uma srie de instrues usada em mais de um ponto de seu programa, voc pode transformas estas instrues em uma sub-rotina. Ento, onde voc precisar inserir este cdigo, voc pode simplesmente escrever Gosub label (onde label o nome de sua sub-rotina).
Programa exemplo:
' In this program, the subroutine test takes a pot measurement, then performs ' a weighted average by adding 1/4 of the current measurement to 3/4 of a ' previous measurement. This has the effect of smoothing out noise.
for b0 = 1 to 10 GOSUB test ' Save this address & go to test. serout 1,N2400,(b2) ' Return here after test. next ' Again until b0 > 10. end ' Prevents program from running into test. test: pot 0,100,b2 ' Take a pot reading. let b2 = b2/4 + b4 ' Make b2 = (.25*b2)+b4. let b4 = b2 * 3 / 4 ' Make b4 = .75*b2. return ' Return to previous address+1 instruction.
A instruo Return no fim de test manda o programa para a instruo imediatamente seguinte ao Gosub, neste caso Serout.
Certifique-se que o seu programa no alcance uma sub-rotina a no ser com o use de um Gosub. No exemplo o que aconteceria se o end fosse removido? aps o loop, a execuo do programa continuaria em test. Quando ele encontrasse o Return, ele retornaria para o comando Serout porque este foi o ltimo endereo retornado. O loop For...Next executaria para sempre.
COMANDO FIM END
Entra no modo sleep. O Basic Step acorda quando desligado e ligado novamente ou o PC conecta. O consumo reduzido para aproximadamente 20uA, assumindo que no h cargas nas sadas.
Se voc deixa os pinos do Basic Step como sada em nvel alto ou en nvel baixo, duas coisas acontecem:
Introduo a Microcontroladores com BASIC Step
Derli Lus Angnes
32 - As cargas continuaro a consumir corrente da fonte do Basic Step.
- A cada 2.3 segundos, a corrente destas cargas sero interrompidas por um perodo de aproximadamente 18 milisegundos( ms).
A razo para esta pequena interrupo a cada 2.3 segundos tem a ver com o circuito do chip do interpretador PBASIC. Ele tem um oscilador chamado "watchdog timer" que pode resetar o processador periodicamente fazendo o Basic Step sair do modo sleep. Uma vez acordado, o Basic Step checa seu programa para verificar se ele deve continuar acordado ou voltar para o modo sleep. Aps uma instruo End, o Basic Step tem order de permanecer no modo sleep.
Infelizmente o watchdog timer no pode ser desligado, assim o Basic Step fica no modo sleep em intervalos de 2.3s. Aps este perodo, o watchdog reseta o chip. entre outras coisas o reset passa todos os pinos mara o modo de entrada. e firmaware PBASIC leva aproximadamente 18ms para voltar os pinos para seus estados anteriores e voltar ao modo sleep.
Se voc utiliza os comandos End, Nap ou Sleep em seus programas, tenha certeza que as suas cargas podem tolerar estas quedas de energia. A soluo mais fcil conectar resistores de pull-up ou pull-down conforme o necessrio para garantir o contnuo fornecimento de corrente durante o perodo de reset.
COMANDO GERAPULSO pino,tempo PULSOUT pin,time
Gera um pulso invertendo o estado do pino por um determinado perodo de tempo. Se o pino estiver como entrada quando Pulsout for executado, ele ser mudado para sada.
Pin uma varivel/constante (0-70 que especifica o pino a ser usado.
Time uma varivel/constante (0-65535) que especifica a durao do pulso em mltiplos de 10us.
Programa exemplo:
abc: PULSOUT 0,3 ' Invert pin 0 for 30 ' microseconds. pause 1 ' Pause for 1 ms. goto abc ' Branch to abc.
COMANDO INVERTE pino TOGGLE pin
Muda o pino especificado para sada e muda o seu estado.
Pin uma varivel/constante (0-70 que especifica qual pino usar.
Programa exemplo:
for b2 = 1 to 25 TOGGLE 5 'Toggle state of pin 5. Next
COMANDO INVERTEDIREO pino REVERSE pin
O comando Reverse inverte a direo de um determinado pino. Se o pino uma sada, ele passa a ser entrada e vice-vera.
Introduo a Microcontroladores com BASIC Step
Derli Lus Angnes
33
Pin uma varivel/constante (0-70 que especifica qual pino usar.
Veja os comandos Input e Output para mais informaes sobre a direo dos pinos.
Programa exemplo:
dir3 = 0 ' Make pin 3 an input. REVERSE 3 ' Make pin 3 an output. REVERSE 3 ' Make pin 3 an input.
COMANDO LE posio,varivel READ location,variable
Le o valor de um aposio da memria EEPROM e o guarda em uma varivel.
Location uma varivel/constante (0-255) que especifica qual posio de memria deve ser lida.
Variable a varivel na qual o valor lido vai ser guardado.
A memria EEPROM usada tanto para o armazenamento do programa quanto para o armazenamento dos dados. Para garantir que o seu programa no sobre-escreve a si mesmo, leia a posio 255 da memria antes de gravar qualquer dado. A posio 255 armazena o endereo da ltima posio de memria utilizada pelo programa. Tendo este endereo, o seu programa pode utilizar qualquer endereo abaixo dele. Por exemplo, se a posio 255 tem o valor 100, o seu programa pode utilizar as posies 0-99 para dados.
Programa exemplo:
READ 255,b2 ' Get location of last program instruction. loop: b2 = b2 - 1 ' Decrement to next available EEPROM location serin 0,N300,b3 ' Receive serial byte in b3 write b2,b3 ' Store received serial byte in next EEPROM location if b2 > 0 then loop ' Get another byte if there's room left to store it.
Configura uma porta serial de entrada e espera por qualificador opcional ou por variveis.
Pin uma varivel/constante (0-7) que especifica qual pino usar.
Baudmode uma varivel/constante (0-7) que especifica o modo da porta serial. Baudmode pode ser o nmero ou o smbolo mostrado na tabela abaixo. Os outroa parmetros so deixados nos seus valores mais comuns: sem paridade, 8 bits de dados, um stop bit, 8N1. Estes valores no podem ser mudados.
Qualifiers so variveis/constantes opcionais (0-255) que devem ser recebidos na order especificada para a execuo continuar.
Variables (opcional) so variveis utilizadas para guardar o dado recebido (0-255). Se qualquer qualifier for especificado, ele deve ser recebido antes do valor a ser guardado na varivel. Se o sinal # preceder o nome da varivel, ento o comando Serin ir converter
Introduo a Microcontroladores com BASIC Step
Derli Lus Angnes
34 nmeros em forma de texto (como os digitados no teclado) para um valor a ser armazenado na varivel.
O comando Serin faz o pino especificado uma entrada serial com as caractersticas dadas por baudmode. Ele recebe um caracter por vez e faz uma das duas coisas:
- Compara com um qualifier.
- Guarda numa varivel.
Em ambos os casos, o Basic Step no ir fazer nada at todos os qualifiers sejam recebidos na order correta e todas as variveis tenham sido preenchidas. Um nico comando Serin pode incluir tanto variveis para preencher quanto qualifiers.
para a execuo do programa at que um byte seja recebido serialmente (olaridade normal, 300 baud) pelo pino 0. Guarda o byte recebido na varivel b2 e continua. Por exemplo se o caracter "A" fosse recebido, Serin iria guardar o valor 65 ( o cdigo ASCII de "A") em b2.
SERIN 0, T1200,#w1
Para a execuo do programa at que uma cadeia numrica seja recebida serialmente (polaridade normal, 1200 baud) pelo pino 0. Guarda o valor da cadeia numrica em w1. Por exemplo, se o seguinte texto fosse recebido"XYZ: 576%" Serin iria ignorar "XYZ:" pois so caracteres no numricos. Ele iria receber os caracteres "5", "7" e "6" at o primeiro caracter no numrico "%". Serin ento converteria a cadeia de caracteres "576" no valor 576 e o guardaria em w1. Se o smbolo # antes de w1 fosse omitido, Serin iria receber apenas o primeiro caracter "X" e guardaria o seu cdigo ASCII, 88, em w1.
SERIN 0,N2400,("A")
Para a execuo do programa at que um byte seja recebido serialmente (polaridade invertida, 2400 baud) pelo pino 0. Compara o byte recebido com 65, o cdigo ASCII de "A". Se for igual, continua o programa. Se no for igual, recebe outro caracter e repete a comparao. O programa no ir continuar at que um "A" seja recebido. Por exemplo, se Serin recebesse "LIMIT 65A" a execuo do programa no continuaria at que o "A" final fosse recebido.
SERIN 0,N2400,("SESAME"),b2,#b4
Para a execuo do programa at que a cadeia de caracteres recebida serialmente (polaridade invertida, 2400 baud) seja igual a "SESAME". Uma vez que o qualifier tenha sido recebido, guarda os dois prximos bytes em b2. ento recebe uma cadeia numrica, converte em um valor e guarda em b4. Por exemplo se a cadeia recebida fosse "...SESESAME!*****19*" o "...SE" seria ignorado, o "SESAME" seria aceito, o valor 33 ( cdigo de "!") seria colocado em b2, o caracter "*" seria ignorado e guardaria os valores "1"e "9" em b4.
Introduo a Microcontroladores com BASIC Step
Derli Lus Angnes
35
Consideraes sobre velocidade: O comando Serin rpido o suficiente para receber mltiplos bytes de dados, no importando o qual rpido o computador manda os dados. Entretando se o programa recebe os dados, armazena e os pocessa, o tempo deste processamento pode fazer o prximo comando Seri perder dados ou receb-los de forma incorreta. Use um dos mtodos a seguir para contornar isto:
- Aumente o nmero de stop bits de 1 para 2 (ou mais, se possvel)
- Reduza o baud rate
- Se possvel adicione um tempo entre a transmisso de cada dado.
- Reduza a quantidade de processamento que o Step tem que executar
Recebendo dados do PC: Para mandar dados serialmente do PC para o Basic Step, tudo que voc precisa um resistor de 22K, alguns fios, um conector e um programa de comunicao. Ligue os fios conforme o diagrama abaixo. Os fios mostrados em cinza desabilitam o controle de fluxo da porta serial, o que normalmente necessitaria de coneces adicionais para operar. O controle de fluxo no necessrio aqui pois voc no ir transmitit um volume muito grande de dados.
Quando voc escreve programas para receber dados seriais usando este tipo de coneco, certifique-se de especificar inverted no comando Serin. Se voc no tem um programa de comunicao, voc pode digitar o seguinte programa em QBASIC para configurar a porta serial (2400,8N1) e transmitir os caracteres digitados no teclado. O QBASIC o compilador basic que vem com o MS-DOS verso 5 ou superior.
QBASIC Program to Transmit Data:
' This program transmits characters typed at the keyboard out the PC's ' COM1: serial port. To end the program, press control-break. ' Note: in the line below, the "0" in "CD0,CS0..." is a zero.
OPEN "COM1:2400,N,8,1,CD0,CS0,DS0,OP0" FOR OUTPUT AS #1 CLS Again: theChar$ = INKEY$ IF theChar$ = "" then Goto Again PRINT #1,theChar$; GOTO Again
Programa exemplo para o Basic Step:
' To use this program, download it to the Stamp. Connect ' your PC's com1: port output to Stamp pin 0 through a 22k resistor ' as shown in the diagram. Connect a speaker to Stamp pin 7 as ' shown in the Sound entry. Run your terminal software or the QBASIC ' program above. Configure your terminal software for 2400 baud, ' N81, and turn off hardware handshaking. The QBASIC ' program is already configured this way. Try typing random ' letters and numbers--nothing will happen until you enter ' "START" exactly as it appears in the Stamp program. ' Then you may type numbers representing notes and ' durations for the Sound command. Any non-numeric text
Introduo a Microcontroladores com BASIC Step
Derli Lus Angnes
36 ' you type will be ignored.
SERIN 0,N2400,("START") ' Wait for "START". sound 7,(100,10) ' Acknowledging beep. Again: SERIN 0,N2400,#b2,#b3 ' Receive numeric text and ' convert to bytes. sound 7,(b2,b3) ' Play corresponding sound. goto Again ' Repeat.
COMANDO Alto pino LIGA pino HIGH pin
Muda o pino especificado para nvel alto (5V). Se o pino estiver programado como entrada, ele muda para sada.
Pin uma varivel/constante (0-7) que especifica o pino de entrada/sada.
A instruo High equivalente a:
output 3 ' Make pin 3 an output. let pin3 = 1 ' Set pin 3 high.
Note que o comando Output aceita o nmero do pino (3), enquanto que Let necessita o nome do pino pin3. Ento alm de economizar uma instruo, o comando High permite fazer um pino sada alta utilizando somente nmeros. Olhando o programa abaixo, imagine como seria difcil escreve-lo usando Output e Let.
Isto mostra um problema com o High. os programadores, as vezes, substituem os nomes dos pinos como pin3 pelo nmero do pino. Lembre-se que os nomes so variveis bit. Como bit, eles podem armazenar 0 ou 1. A linha "High pin3" uma linha vlida, mas significa, "Pegue o estado do pin3. Se pin3 0, faa o pino 0 como sada em nvel alto. Se pin3 1, faa o pino 1 sada em nvel alto".
Programa exemplo:
' One at a time, change each of the pins to output and set it high. for b2 = 0 to 7 ' Eight pins (0-7). HIGH b2 ' Set pin no. indicated by b2. pause 500 ' Wait 1/2 second between pins. next ' Do the next pin.
Muda o pino especificado para entrada e mede a durao de pulsos em unidades de 10us.
Pin uma varivel/constante (0-7) que especifica o pino a usar.
State uma verivel/constante (0 ou 1) que espeficica qual flanco deve ocorrer para iniciar a medida.
Variable a varivel usada para guardar o resultado da medida. Variable deve ser uma varivel word numa faixa de 1 a 65535 ou varivel byte com faixa de 1 a 255.
Muitas propriedades analgicas (voltagem, resistncia, capacitncia, frequncia, ciclo de trabalho) podem ser medidas em termos de durao de pulsos. Isto faz o comando Pulsin uma boa forma de fazer a converso analgica-digital.
Voc pode imaginar o comando Pulsin como um cronometro que disparado por uma mudana de estado (0 ou 1) no pino especificado. Quando o estado no pino muda para o
Introduo a Microcontroladores com BASIC Step
Derli Lus Angnes
37 estado especificado em Pulsin, o cronometro comea a contar. Quando o estado do pino muda novamente, o cronometro para.
Se o estado do pino no muda ( mesmo se ele j estiver no estado especificado na instruo Pulsin) o cronometro no dispara. o comando Pulsin espera o mximo de 0.65535 segundos pelo disparo e ento retorna 0 em variable.
A varivel pode ser do tipo word ou byte. Se for word, o valor retornado por Pulsin pode variar de 1 a 65535 unidades de 10us. Se a varivel for do tipo byte, o valor retornado pode variar de 1 a 255 unidades de 10us. Internamente, Pulsin sempre utiliza o timer de 16 bits. Quando o seu programa especifica varivel byte, Pulsin guarda os 8 bits menos significativos do contador interno. Pulsos de durao maior que 2550us daro falsos valores quando usados com varivel byte. Por exemplo, um pulso de 2560us lido com varivel word returna 256, mas com varivel byte, retorna 0.
Programa exemplo:
PULSIN 4,0,w2 ' Measure an input pulse on pin 4. serout 1,n300,(b5) ' Send high byte of 16-bit pulse measurement . . . ' over serial output.
COMANDO PAUSA milisegundos PAUSE milliseconds
Para a execuo do programa por um determinado perodo especificado em milisegundos.
Milliseconds uma varivel/constante (0-65535) que especifica quantos milisegundos o programa vai parar.
A pausa causada pelo comando to precisa quando o ressonador cermico usado pelo Basic Step, +-1%. Quando utilizar o comando Pause em aplicaes que precisem de preciso de tempo, tenha em mente a relativa baixa velocidade do interpretador BASIC ( mais ou menos 2000 instrues por segundo). Este o tempo necessrio para o chip ler e interpretar as instrues armazenadas na EEPROM.
Visto que o PBASIC leva 0.5 milisegundos para ler a instruo PAUSE e 0.5 milisegundos para ler a instruo seguinte, os loops envolvendo o comando Pause levam, no mnimo, 1 milisegundo a mais do que o especificado pelo comando. Se voc est escrevendo loops de tempo longos, tenha em mente a preciso de 1% do oscillador.
Programa exemplo:
abc: low 2 ' Make pin 2 output low. PAUSE 100 ' Pause for 0.1 second. high 2 ' Make pin 2 output high. PAUSE 100 ' Pause for 0.1 second. goto abc
COMANDO POTENCIOMETRO pino,escala,varivel POT pin,scale,variable
O comando Pot l um potencimetro, termistor, foto-clula ou outro resistor varivel. O pino especificado no comando Pot deve ser ligado em um lado do resistor, o outro lado deve ser ligado atravs de um capacitor terra. A medida da resistncia feita contando-se o tempo que o capacitor leva para descarregar atravs do resistor. Se o pino especificado estiver como entrada, ele ser mudado para sada.
Pin uma varivel/constante (0-7) que especifica qual pino usar.
Introduo a Microcontroladores com BASIC Step
Derli Lus Angnes
38 Scale uma varivel/constante (0-255) usada para calibrar o resultado de 16 bits. A leitura de 16 bits multiplicada por scale/256, assim um valor de scale de 128 ir reduzir em 50% o valor do resultado, um valor de 64 ir reduzir a 25% e assim por diante. A opo Alt-P (explicada abaixo) permite achar o melhor valor para uma determinada combinao de resistor e capacitor.
Variable usado para guardar o resultado final da leitura. Internamente, a instruo Pot calcula o valor em 16 bits o qual reduzido a 8 bits. O quanto o valor interno deve ser reduzido varia com o valor do resistor usado.
Encontrando o melhor valor de scale:
- Para encontrar o melhor valor de scale conecte o resistor a ser usado e conecte o Step ao PC.
- Pressione Alt-P quando estiver rodando o software de edio do Basic Step. Uma janela especial de calibrao ir aparecer, permitindo achar o melhor valor.
- A janela pergunta em qual pino o resistor est conectado. Selecione o pino apropriado (0-7).
- O editor grava um pequeno programa no Basic Step ( este programa ir apagar qualquer programa existente).
- Outra janela aparecer, mostrando dois nmeros: escala e valor. Ajuste o resistor para o menor o menor nmero possvel seja mostrado em escala ( assumindo que voc pode facilmente ajustar o resistor, como num potencimetro).
Uma vez que voc tenha achao o menor valor, est pronto. este nmero deve ser usado para scale na instruo Pot.
Programa exemplo:
abc: POT 0,100,b2 ' Read potentiometer on pin 0. serout 1,N300,(b2) ' Send potentiometer reading ' over serial output. goto abc ' Repeat the process.
Procura entre value0,value1, etc um que seja igual a target. Se encontrar um igual, o valor armazenado em variable. Se no for encontrado, variable no alterado.
Target a varivel/constante procurada.
Value0, value1,... ;e uma lista de valores. O valor de target comparado com estes valores.
Variable armazena o resultado da procura.
A habilidade do comando Lookdown em converter uma sequencia arbitrria de valores em uma sequncia ordenada (0,1,2,...) faz dele um parceiro perfeito para o comando Branch. Usando Lookdown e Branch juntos, voc pode criar uma instruo SELECT...CASE
Introduo a Microcontroladores com BASIC Step
Derli Lus Angnes
39 Programa Exemplo:
' Program receives the following one-letter instructions over a serial ' linkand takes action: (G)o, (S)top, (L)ow, (M)edium, (H)igh.
Get_cmd: serin 0,N2400,b2 ' Put input value into b2. LOOKDOWN b2,("GSLMH"),b2 ' If b2="G" then b2=0 (see note)
' If b2="S" then b2=1 ' If b2="L" then b2=2 ' If b2="M" then b2=3 ' If b2="H" then b2=4
branch b2,(go,stop,low,med,hi) ' If b2=0 then go
' If b2=1 then stop ' If b2=2 then low ' If b2=3 then med ' If b2=3 then hi
goto Get_cmd ' Not in range; try again. go: ... ' Destinations of the stop: ... ' Branch instruction. low: ... med: ... hi: ...
' Note: In PBASIC instructions, including EEPROM, Serout, Lookup and ' Lookdown, strings may be formatted several ways. The Lookdown command ' above could also have been written: ' LOOKDOWN b2,(71,83,76,77,72),b2 ' ASCII codes for "G","S","L"... ' or ' LOOKDOWN b2,("G","S","L","M","H"),b2
COMANDO PULA desvio(endereo0, endereo1 ..) BRANCH offset,(address0,address1,...addressN)
Vai para o endereo especificado em offset (se estiver dentro da faixa)
Offset uma varivel/constante que especifica o endereo para desviar (0-N).
Addresses so labels que especificam para onde desviar.
O comando Branch funciona como o comando ON x GOTO encontrado em outros BASICs. til quando voc deseja alguma coisa como isto:
if b2 = 0 then case_0 ' b2=0: go to label "case_0" if b2 = 1 then case_1 ' b2=1: go to label "case_1" if b2 = 2 then case_2 ' b2=2: go to label "case_2"
Voc pode usar o BRANCH para organizar isto em um comando nico.
BRANCH b2,(case_0,case_1,case_2)
Isto funciona exatamente como o exemplo IF...THEN. Se o valor no estiver dentro da faixa (neste caso se b2 maior que 2), BRANCH no faz nada. O programa continua com a instruo seguinte ao BRANCH.
BRANCH pode ser combinado com a instruo LOOKDOWN para criar uma instruo SELECT CASE simples. Veja LOOKDOWN para um exemplo.
Programa Exemplo:
Get_code: serin 0,N2400,("code"),b2 ' Get serial input. ' Wait for the string "code", ' then put next value into b2. BRANCH b2,(case_0,case_1,case_2) ' If b2=0 then case_0 ' If b2=1 then case_1
Introduo a Microcontroladores com BASIC Step
Derli Lus Angnes
40 ' If b2=2 then case_2 goto Get_code ' If b2>2 then Get_code. case_0: ... ' Destinations of the case_1: ... ' Branch instruction. case_2: ...
COMANDO REPITA varivel = incio AT fim {PASSO {-} incremento}...CONTINUE {varivel}
FOR variable = start TO end {STEP {-} increment}...NEXT {variable}
Comea um loop For...Next. Variable setada com o valor de start. O cdigo entre For e Next ento executado. Variable ento incrementado/decrementado de increment (se o valor de increment no dado, a varivel incrementada de 1). Se variable no alcanou nem ultrapassou o valor de end, as instrues entre For e Next so executadas novamente. Se variable igual ou maior que end, ento o programa continua com a instruo seguinte ao Next. O loop executado pelo menos uma vez, no importando quais valores so dados para start e end.
Seu programa pode ter quantos For...Next forem necessrios, mas eles no podem estar aninhados em mais de 8 nveis ( em outras palavras, seu programa no pode ter mais de 8 loops dentro de outros loops)
variable uma varivel do tipo bit, byte ou word e usada como contadora interna. Start e end so limitadas pelo tamanho de variable (variveis bit podem contar de 0 a 1, variveis byte de 0 a 255 e variveis word de 0 a 65535).
Start uma varivel/constante que especifica o valor inicial de variable.
End uma varivel/constante que especifica o valor final de variable.
Increment uma varivel/constante opcional pelo qual o contador incrementado ou decrementado (se negativo). Se o valor de step no dado, variable incrementado de 1.
variable (aps o Next) opcional. Ele usado para identificar a qual de uma sria de for...Next um Next particular pertence.
Programa exemplo:
Programmers most often use For...Next loops to repeat an action a fixed number of times, like this: FOR b2 = 1 to 10 ' Repeat 10 times. debug b2 ' Show b2 in debug window. NEXT ' Again until b2>10.
no subestime o fato de que todos os parmetros de For...Next podem ser variveis. O seu programa pode no apenas estabelecer estes valores, mas tambm modific-los enquanto o loop est sendo executado. Aqui est um exemplo onde i velor de step aumenta a cada loop.
let b3 = 1 FOR b2 = 1 to 100 STEP b3 ' Each loop, add b3 to b2. debug b2 ' Show b2 in debug window. let b3 = b3+2 ' Increment b3. NEXT ' Again until b2>15.
Se voc rodar este programa, vai notar alguma coisa familiar com os nmeros na janela de debug (1,4,9,16,25,36,49 ...). eles so todos nmeros elevado ao quadrado (1 2 =1, 2 2 =4, 3 2 =9, 4 2 =16, etc.), mas o nosso programa utiliza somente adies, e no multiplicao, para calcul- los. Este mtodo de clculo creditado a Sir Isaac Newton.
Existe um srio problema na extrutura do For...Next. PBASIC utiliza matemtica de 16 bits para incrementar/decrementar a varivel contadora e comparar com o valor de end. O valor mximo
Introduo a Microcontroladores com BASIC Step
Derli Lus Angnes
41 de uma varivel de 16 bits 65535. Se voc adiciona 1 a 65535, obtm 0 ( o registrador de 16 bits estoura e retorna a 0, como o odmetro de um carro quando untrapassa o mximo que ele pode indicar).
Se voc escreve um loop For...Next no qual o valor de step maior que a diferena entre o valor de end e 65535, este estouro vai fazer com que o loop execute mais do que o esperado. tente o seguinte:
FOR w1 = 0 to 65500 STEP 3000 ' Each loop add 3000 to w1. debug w1 ' Show w1 in debug window. NEXT ' Again until w1>65500.
O valor de w1 aumente de 3000 a cada interao do loop. Quando ele se aproxima do valor final, uma coisa interessante acontece: 57000, 60000, 63000, 464, 3464... Eel ultrapassou o valor de end e continuou executando. Isto porque 63000+3000 excede a capacidade mxima de um registrador de 16 bits. Quando o valor estoura e vai para 464 ele passa no teste "w1>65500" usado pelo comando Next para determinar quando terminar o loop.
O mesmo problema pode acontecer quando o valor de step for negativo a maior (em valor absoluto) que a diferena entre end e 0.
COMANDO RETORNA RETURN
Retorna de uma subrotina. O comando return desvia a execuo do programa para o endereo seguinte ao comando Gosub mais recente, a execuo do programa continua daquele ponto.
O comando Return no eceita parmetros. Para mais informaes sobre como usaar subrotinas, veja o comando Gosub.
Programa exemplo:
for b4 = 0 to 10 gosub abc ' Save return address and then branch to abc. next abc: pulsout 0,b4 ' Output a pulse on pin 0. ' Pulse length is b4 x 10 microseconds. toggle 1 ' Toggle pin 1. RETURN ' Return to instruction following gosub.
COMANDO SAIDA pino OUTPUT pin
Faz o pino selecionado funcionar como sada.
Pin uma varivel/constante (0-7) que especifica qual pino utilizar.
Quando o programa comea, todos os pinos so entrada. Se voc deseja aticar uma carga, como um led ou um circuito lgico, voc precisa configurar o pino correspondente como sada.
As instrues de sada (High, Low, Pulsout, Serout, Sound e Toggle) mudam automaticamente o pino selecionado para sada e o deixam neste estado. Embora tecnicamente no seja uma instruo de sada, o comando Port tambm muda os pinos para sada. Escrevendo 1 em um bit particular da varivel Dirs faz o pino correspondente uma sada.
Quando um oino configurado como sada, voc pode mudar o seu estado escrevendo um valor nele uo na varivel Pins. Quando um pino muda para sada, ele pode estar no estado 0 ou 1, dependendo do valor previamente escrito no pino. Para garantir o estado de um pino use
Introduo a Microcontroladores com BASIC Step
Derli Lus Angnes
42 os comandos High ou Low para mud-lo para sada ou escreva o estado desejado antes de mud-lo para sada.
Programa exemplo:
' To see this program in action, connect a 10k resistor from pin 7 to the +5 ' power-supply rail. When the program runs, a debug window will show you the ' the state at pin 7 (a 1, due to the +5 connection); the effect of writing ' to an input pin (none); and the result of changing an input pin to output ' (the latched state appears on the pin and may be read by your program). ' Finally, the program will show how changing pin 7 to output wrote ' a 1 to the corresponding bit of the variable Dirs.
input 7 ' Make pin 7 an input. debug "State present at pin 7: ",#pin7,cr,cr let pin7 = 0 ' Write 0 to output latch. debug "After 0 written to input: ",#pin7,cr,cr OUTPUT 7 ' Make pin 7 an output. debug "After pin 7 changed to output: ",#pin7,cr debug "Dirs (binary): ",#%dirs
COMANDO SE varivel ?? valor {AND/OR varivel ?? valor} ENTO endereo
IF variable ?? value {AND/OR variable ?? value...} THEN address
Compara variable com value e desvia se o resultado for verdadeiro.
?? um dos seguintes operadores; =(igual), <> (diferente), > (maior), < (menor), >= (maior ou igual), <= (menor ou igual)
variable a varivel que ser comparada.
value uma varivel/constante para comparao.
Address um label que especifica para onde desviar se o resultado da comparao for verdadeiro.
Diferentemente de outros tipos de BASIC, este comando If...Then, somente pode ir para determinado endereo. Ele no suporta comandos do tipo "IF x>30 THEN x=0". para executar o mesmo comando em PBASIC faa:
IF x <= 30 THEN skip ' If x is less than or equal let x = 0 ' to 30, don't make x=0. skip: ... ' Program continues.
A menos que x > 30, o programa pula a instruo"let x = 0".
O If...Then do PBASIC pode efetuar duas ou mais comparaes ao mesmo tempo com o auxlio de And e Or. Ele trabalha da esquerda para a direita e no aceita parenteses para mudar a ordem da comparao. Pode ser difcil entender uma comparao composta. Sugerimos que faa um teste da lgica da comparao usando o comando Debug como mostrado no programa a seguir.
Programa exemplo:
' Evaluates the If...Then statement and displays the result in a debug window. let b2 = 7 ' Assign values. let b3 = 16 IF b3 < b2 OR b2 = 7 THEN True ' B3 is not less than b2, but ' b2 is 7: so statement is true. debug "statment is false" ' If statement is false, goto here. end True: debug "statement is true" ' If statement is true, goto here. End
Introduo a Microcontroladores com BASIC Step
Derli Lus Angnes
43 COMANDO SOM pino,(nota,durao,nota,durao,...) SOUND pin,(note,duration,note,duration,...)
Muda o pino especificado para sada, gera um trem de ondas quadradas com a durao dada. O pino de sada deve ser conectado como mostrado no diagrama. Voc pode substituir o capacitor por um resistor de 220 ohms, mas o auto-falante vai consumir mais energia.
Pin uma varivel/constante (0-7) que especifica o pino a usar.
Note(s) uma varivel/constante (0-255) que especifica a frequncia da nota. O valor 0 representa silncio pela durao especificada. Valores de 1 a 127 so sons crescentes. de 128 a 255 so rudo branco crescentes.
Duration(s) uma varivel/constante (1-255) que determina a durao da nota ( em passos de 12ms).
As notas produzidas podem variar de 94.8Hz (1) a 10.550Hz (127). se voc precisa determinar a frequncia correspondente a uma determinada nota, ou precisa achar o valor para uma determinada nota, use as equaes abaixo.
Exemplo de programa:
for b2 = 0 to 256 SOUND 1,(25,10,b2,10) ' Generate a constant tone (25) ' followed by an ascending tone ' (b2). Both tones have the next ' same duration(10).
Procura o dado especificado por offset e armazena em variable. Por exemplo se os valores fossem 2, 13, 15, 28, 8 e o offset fosse 1, ento variable receberia o valor "13", visto que "13" o segundo valor da lista ( o primeiro valor #0, o segundo #1, etc). Se offset for maior que o nmero de valores da lista, ento variable no modificado.
Offset o ndice do nmero a ser lido
Value0, value1, ... a tabela de valores, at 256 elementos.
Variable guarda o resultado do comando.
Muitas aplicaes requerem que o computador calcule um valor de sada paseado num valor de entrada. Quando a relao simples, como out = 2*in", no h problemas. Mas e quando a relao no to bvia? Em PBASIC voc6e pode usar o comando Lookup.
Por exemplo, motores de passo funcionam de um modo estranho. Eles requerem um padro de 1s e 0s para controle da corrente de 4 bobinas. a sequncia aparece na tabela abaixo:
Step# Binary Decimal
0 1010 10 1 1001 9
Introduo a Microcontroladores com BASIC Step
Derli Lus Angnes
44 2 0101 5 3 0110 6
Repetindo a sequncia, faz o motor girar. O programa abaixo mostra como usar Lookup para gerar a sequncia.
Programa exemplo:
' Output the four-step sequence to drive a stepper motor w/on-screen simula-tion.
let dirs = %00001111 ' Set lower 4 pins to output. Rotate: for b2 = 0 to 3 LOOKUP b2,(10,9,5,6),b3 ' Convert offset (0-3) ' to corresponding step. let pins = b3 ' Output the step pattern. LOOKUP b2,("|/-\"),b3 ' Convert offset (0-3) ' to "picture" for debug. debug cls,#%pins," ",#@b3 ' Display value on pins, next ' animated "motor." goto Rotate ' Do it again. ' Note: In the debug line above, there are two spaces between the quotes.
COMANDO VAIPARA endereo GOTO address
Desvia para address, e continua a execuo do programa naquele ponto.
Address um label que especifica para onde desviar.
Programa exemplo:
abc: pulsout 0,100 ' Generate a 1000-s pulse on pin 0. GOTO abc ' Repeat forever.
COMANDO {LET} variable = {-}value ?? value...
Determina o valor de uma varivel e/ou faz uma operao lgica com a varivel. toda a matemtica e lgica feita em nvel de word (16 bits).
A instruo "Let" opcional. Por exemplo, a instruo "A=10" idntica a "Let A=10".
?? um do sseguintes operadores:
+ soma - subtrao * multiplicao (produz a word baica do resultado) ** multiplicao (produz a word alta do resultado) / diviso (produz o quociente) // diviso (produz o resto) min mantm variable maior ou igual a value max mantm variable menor ou igual a value & AND lgico | OR lgico ^ XOR lgico &/ AND NOT lgico |/ OR NOT lgico ^/ XOR NOT lgico
Introduo a Microcontroladores com BASIC Step
Derli Lus Angnes
45 Variable a varivel que var ser atribuido o valor.
Value uma varivel/constante que afeta variable.
Quando voc escreve um programa que faz operaes matemticas, tenha em mente as limitaes das variveis do PBASIC; Todos os nmeros so inteiros e positivos, bit pode representar 0 ou 1; bytes, 0 a 255 a word 0 a 65535/ O PBASIC no tem nmeros de ponto flutuante (como 3.14), nmeros negativos (-73), ou nmeros maiores que 65535.
Na maioria das aplicaes, estas limitaes no so srias. Por exemplo, suponha que voc precise medit temperaturas de -50 a +200F. Assumindo o valor de 0 para -50 e 65535 para +200F voc6e teria uma resoluo de 0.0038!
A restrio de nmeros inteiros no significa que voc no possa fazer calculos complexos com o Basic Step. voc apenas precisa improvisar. Suponha que voc precise usar a constante pi (3.1415...0 no seu programa. Voc gostaria de escrever:
Let w0 = b2 * 3.14
No entanto "3.14" um nmero de ponto flutuante, que o Basic Step no entende. existe uma alternativa. Voc poder expressar tais quantidades como fraes. Por exemplo, o valor 1.5 equivalente a frao 3/2. com um pouco de esforo, voc pode achar fraes equivalentes para a maioria dos nmeros de ponto flutuante. No nosso exemplo, a frao 22/7 muito prxima do valor de pi. Para fazer a operao "Let w0 = b2* 3.14" ns podemos usar:
Let w0 = b2 * 22 / 7
PBASIC efetua as operaes da esquerda para a direita. voc no pode usar parentesis para alterar esta ordem, como em outros BASICs. E ainda, no h precedncia de operadores. Muitos BASICs calculam "2+3*4" como 14, pois eles calculam "3*4" primeiro e depois adicionam o 2. Como o PBASIC calcula da esquerda para a direita, ele obtm o resultado 20, visto que ele calcula "2+3" e depois multiplica por 4. Quando estiver em dvida, faa um exemplo e utilize o comando Debug para ver o resultado.
Programa Exemplo:
pot 0,100,b3 ' Read pot, store result in b3. LET b3=b3/2 ' Divide result by 2. b3=b3 max 100 ' Limit result to 0-100. ' Note that "LET" is not necessary.
NOTA:
Espero ter contribudo ou auxiliado no ensino deste pequeno notvel microcontrolador brasileiro. O BASIC Step representa para o Brasil uma tecnologia nacional, um microcontrolador com suas potencialidades e facilidades de utilizao. Iniciativas como a do fabricante do BASIC Step deveria se tornar tendncia em nosso mercado, uma nao deter poder financeiro quando investir em tecnologias, ou melhor, quando export-las. Hoje o Brasil exporta uma tonelada de soja para importar ao mesmo tempo uma CPU pelo mesmo preo. No vejo inteligncia alguma neste tipo de comercializao. Esperto so os japoneses...