simulando um AVR no VMLAB

Discussão em 'Dicas e tutoriais' iniciado por kodo no kami, 29 Março 2019.

  1. kodo no kami
    Offline

    kodo no kami Membro Conhecido

    Afiliado:
    16 Dezembro 2015
    Mensagens:
    237
    Sexo:
    Masculino
    Avaliações:
    +321 / -0
    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:

    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

    [​IMG]

    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"

    [​IMG]

    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

    Código (Forge Crash):
    .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

    Código (Forge Crash):
    .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")

    [​IMG]

    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)

    [​IMG]

    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

    [​IMG]

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

    [​IMG]

    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)

    Código (Forge Crash):
    .MICRO "ATmega168"
    .PROGRAM "kodo.asm"
    .TARGET "meuprojeto.hex"
    .TRACE              ; Activate micro trace
    .POWER verdade=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 verdade e o catado ta no Nó 1
    D1  verdade 1
    [​IMG]

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

    Código (Forge Crash):
    .PLOT V(PD2)
    [​IMG]

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

    [​IMG]

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

    by kodo no kami
     
    • Top Top x 2
    • Informativo Informativo x 1
    • Útil Útil x 1

Compartilhe esta Página