[tutorial] simulando um AVR no VMLAB

postagem de conteudo sobre programação de microcontroladores avr e arduino
Post Reply
User avatar
Kodo no Kami
Admin
Admin
Posts: 740
Joined: Fri Jan 02, 2015 1:56 pm
Contact:

[tutorial] simulando um AVR no VMLAB

Post by Kodo no Kami » Fri Mar 29, 2019 2:07 am

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

Image

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"

Image

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

Code: Select all

.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

Code: Select all

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

Image

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)

Image

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

Image

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

Image

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)

Code: Select all

.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
Image

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

Code: Select all

.PLOT V(PD2)
Image

se a gente olhar na pasta do projeto vai ter o .hex então é possivel subir o nosso codigo em um microcontrolador real

Image

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

by kodo no kami
Image

que desagradavel ~ mirai kuriyama

Post Reply

Return to “AVR”