Ir para conteúdo

Simulando um AVR no VMLAB


kodo no kami

Posts Recomendados

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

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...