kodo no kami Posted March 29, 2019 Posted March 29, 2019 Galera nessa postagem vou mostrar o vmlab (Visual Micro Lab) que é um simulador para arquitetura AVR e ST6. Os microcontroladores aceito nesse simulador são: ATtiny: 11, 12, 15 e 22 AT90S: 1200, 2313, 2323, 2343, 4414, 4432, 4434, 4433, 8515 e 8535 ATmega: 8, 16, 32, 48, 64, 88, 128, 161, 162, 168, 8515 e 8535 ST6: 200, 201, 203, 208, 209, 210, 215, 220 e 225 esse simulador alem de permitir escrever o nosso codigo em assembly é possivel instalar o winavr e integrar a ele a linguagem C, tambem tem alguns outros recursos como descrever um circuitinho em spice, um painel onde tem alguns componentes (botões, leds, potenciômetro e etc). Para baixar ele podemos ir direto no site oficial site oficial depois de baixar, instalar e executar vamos nos deparar com janela inicial https://i.imgur.com/1EZoxIY.png para começar basta a gente criar um projeto apertando no menu "Project" e depois "New project". Na proxima aba no "Step 1" escolhemos onde vamos salvar o nosso projeto, no "Step 2" vamos escolher o processador (no meu caso vou brincar com o atmega168), no "Step 3" podemos deixar o compilador padrao, no "Step 4" podemos adicionar uma codigo fonte digitando o nome e apertando em "Add this", por fim apertamos no botão "OK" https://i.imgur.com/kuUmKZI.png com o projeto criado basta digitar o nosso codigo assembly na aba do codigo e o nosso circuito na aba do projeto (podemos usar apenas o codigo e debugar ele, não é necessario criar o circuito). Nesse tutorial não vou abordar a linguagem assembly (talvez em um futuro tutorial quem sabe). Para esse exemplo vou fazer um simples codigo que coloca um dos pinos do microcontrolador como saida e fica alternando ele em um loop infinito, para isso setamos em um registrador a pinagem que vamos ter como saida ou como entrada (diferente dos PICs onde o numero 0 indica a saida e o numero 1 a entrada, os AVRs o numero 0 indica a entrada e 1 seria a saida '-' ), agora enviamos o conteudo daquele registrador para o DDRx indicando quem vai ser a saida ou entrada daquele Port .include "C:\VMLAB\include\m168def.inc" reset: rjmp inicio inicio: ;reg r20 recebe 00000100 ldi r20,4 ;especificamos as entradas/saidas do PORTD out DDRD,r20 agora em um loop infinito vou ficar alternando (tem formas mais eficientes como manipular cada bit XD), nesse caso tambem não vamos enviar para o DDRx e sim para o proprio PORT .include "C:\VMLAB\include\m168def.inc" reset: rjmp inicio inicio: ;reg r20 recebe 00000100b ldi r20,4 ;especificamos as entradas/saidas do PORTD out DDRD,r20 repetir: ;seta no reg20 00000000b ldi r20,0 out PORTD,r20 ;seta no reg20 00000100b ldi r20,4 out PORTD,r20 ;pulo incodicional para o repetir rjmp repetir depois de escrever o nosso codigo basta compilar e debugar o codigo, para isso apertamos no menu "Project" e por fim "Build" (tambem podemos apertar a tecla F9), se tudo ocorrer bem vai aparecer uns quadradinhos verde no lado do codigo alem de uma mensagem na aba message ("Success! All ready to run") https://i.imgur.com/vpGbcLd.png podemos rodar nosso codigo indo no menu "Run", apertando em "Go / Continue" (F5) ele vai rodar o codigo direto ou podemos rodar passo a passo apertando no menu "Step over" (F6) ou "Step into" (F7) https://i.imgur.com/ByWJHBp.png no lado do codigo tem uns quadrado verde sendo um breakpoint, podemos apertar nele e parar a execução do codigo sempre que passar naquela determinada instrução que tiver o breakpoint, assim podemos da um run direto e analisar apenas aquele trecho em especifico https://i.imgur.com/3W26hS1.png podemos abrir algumas abas no menu "View" que mostra algumas informações dos registradores, pinos, memorias. https://i.imgur.com/NZste4u.png no menu "View" tambem tem o "Control Panel" com alguns componentes como botões e leds. Para interligar um dos pinos do microcontrolador a um dos led usamos a aba project e descrevemos o circuito em spice (tem um pequeno probleminha, não da para usar o pino como source para o led, então vai ter que acender o led em nivel logico baixo e apagar ele em nivel logico alto kkk) .MICRO "ATmega168" .PROGRAM "kodo.asm" .TARGET "meuprojeto.hex" .TRACE ; Activate micro trace .POWER VDD=5 VSS=0 ; Power nodes .CLOCK 1meg ; Micro clock .STORE 250m ; Trace (micro+signals) storage time ;tem um resistor de 280 ohms ta conectado ao PortD pino 2 e ao Nó 1 R1 PD2 1 280 ;o anodo do led ta no VDD e o catado ta no Nó 1 D1 VDD 1 https://i.imgur.com/F87E3kn.png tambem existe um osciloscópio no simulador, para usar ele declaramos .PLOT o pino no project .PLOT V(PD2) https://i.imgur.com/gUirnff.png se a gente olhar na pasta do projeto vai ter o .hex então é possivel subir o nosso codigo em um microcontrolador real https://i.imgur.com/ByhCHDJ.png bom galera esse simulador é bem legal para aprender programar em assembly para microcontroladores AVR ^^ by kodo no kami
Recommended Posts
Archived
This topic is now archived and is closed to further replies.