Jump to content
Sign in to follow this  
kodo no kami

[tutorial] simulando um AVR no VMLAB

Recommended Posts

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

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"

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")

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)

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

3W26hS1.png

podemos abrir algumas abas no menu "View" que mostra algumas informações dos registradores, pinos, memorias. 

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

F87E3kn.png

tambem existe um osciloscópio no simulador, para usar ele declaramos .PLOT o pino no project

.PLOT V(PD2)

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

ByhCHDJ.png

bom galera esse simulador é bem legal para aprender programar em assembly para microcontroladores AVR ^^

by kodo no kami

  • Like 1

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.