Projekty

DigiAVR

[OBRAZEK]

DigiAVR jest emulatorem mikroprocesora ATmega328p... ale po kolei. Czym jest emulator? Czym jest mikroprocesor?


Emulator jest programem, który pozwala jednemu urządzeniu zachować się jak zupełnie inne urządzenie lub system. Słysząc “emulator” prawdopodobnie pierwsze, co przychodzi na myśl, są emulatory konsol do gier (np. emulator Playstation 2). Taki program powinien, poprzez naśladowanie budowy i zachowania innego urządzenia/systemu, umożliwić nam uruchamianie programów, które są na nie przeznaczone.


Mikroprocesor, w dużym skrócie, jest procesorem ogólnego przeznaczenia, który posiada zazwyczaj własną pamięć RAM i ROM oraz możliwość podłączenia peryferii I/O. Językiem zrozumiałym dla mikroprocesora są instrukcje asemblera. Mikroprocesory nie posiadają swojego systemu operacyjnego i nie działają samodzielnie – są częścią większych urządzeń, takich jak mikrokontroler, samochód, konsola do gier itp.


ATmega328p jest 8-mio bitowym mikroprocesorem firmy Atmel z rodziny AVR. Posiada swój własny zestaw instrukcji, 32KB pamięci flash, 2KB pamięci RAM oraz zegar o taktowaniu 16MHz. Jest on najczęściej spotykany w mikrokontrolerach rodziny Arduino.


Emulator DigiAVR pozwala na wykonywanie kodu binarnego przeznaczonego na wyżej wymieniony mikrokontroler. Oznacza to, że możemy uruchomić dowolną aplikację przeznaczoną na ATmega328p na naszym komputerze. Ze względu na podobieństwo mikroprocesorów rodziny AVR, DigiAVR jest w stanie uruchomić programy przeznaczone na większość mikroprocesorów opartych na zestawie instrukcji AVR.


[OBRAZEK]

Emulator został zbudowany tak, aby można było dowolnie go rozszerzać o kolejne funkcjonalności lub zaimplementować jako część innej, większej aplikacji. Przykładem tego jest aplikacja webowa, która pozwala pracować z ATmega328p.


[OBRAZEK]

Aplikacja umożliwia pisanie kodu w języku C lub asembler oraz obserwację zachowania mikrokontrolera podczas jego wykonywania. Widoczne są: stan rejestrów, stos, aktualnie wykonywana instrukcja wraz z jej adresem. Dodatkowo mamy możliwość: zatrzymania lub zresetowania programu i mikrokontrolera w dowolnym momencie, przejścia przez program krok po kroku, kontrolowania prędkości zegara oraz wysyłania przerwań do mikrokontrolera.

Emulator został napisany w języku C z użyciem kompilatora GCC. Aplikacja webowa jest oparta na HTML, CSS, JavaScript. Serwer websocket, łączący aplikację webową z emulatorem, został napisany w Pythonie.

Kod programu można podejrzeć na naszym githubie.

Data zakończenia: 29.6.2020

Autorzy

Wiktor Kania

Ewa Kłapcińska