ponty / pysimavr

python wrapper for simavr which is AVR and arduino simulator
GNU General Public License v3.0
49 stars 14 forks source link

pysimavr is a python wrapper for simavr which is AVR and arduino_ simulator

Links:

|Travis| |Coveralls| |Latest Version| |Supported Python versions| |License| |Code Health| |Documentation|

Features:

Basic usage

>>> from pysimavr.avr import Avr
>>> avr=Avr(mcu='atmega48',f_cpu=8000000)
>>> firmware = Firmware('lcd.elf')
>>> avr.load_firmware(firmware)

>>> from pysimavr.sim import ArduinoSim
>>> print ArduinoSim(snippet='Serial.print("hello!");').get_serial()
hello!

Installation

check simavr_ documentation

General

Ubuntu 14.04

::

sudo apt-get install python-pip
sudo apt-get install python-dev gcc libelf-dev arduino
sudo pip install pysimavr
# optional for some tests:
sudo apt-get install freeglut3-dev scons
# optional for generating code:
sudo apt-get install swig

Uninstall

::

# as root
pip uninstall pysimavr

Fedora 25

::

$ sudo dnf install swig python3-devel libevent-devel elfutils-libelf-devel
$ sudo pip install pysimavr

Usage

pysimavr.examples.simple::

-- include('examples/simple.py')--

from pysimavr.avr import Avr

if name == "main": avr = Avr(mcu='atmega48', f_cpu=8000000) print( avr.pc ) avr.step(1) print( avr.pc ) avr.step(1) print( avr.pc )

  avr.terminate()

-

Output::

-- sh('python -m pysimavr.examples.simple ')--

0 2 4

-

pysimavr.examples.hello::

-- include('examples/hello.py')--

from pysimavr.sim import ArduinoSim

if name == "main": s= ArduinoSim(snippet='Serial.println("hello!");').get_serial() print(s)

-

Output::

-- sh('python -m pysimavr.examples.hello ')--

hello!

-

pysimavr.examples.delay::

-- include('examples/delay.py')--

from pysimavr.sim import ArduinoSim import time

snippet = ''' int i=0; while (1) { Serial.println(i++); _delay_ms(1000); } ''' t0 = None

def logger(x): global t0 t = time.time() if not t0: t0 = t print t - t0, x

f_cpu=16000000 fps=20 speed=1 timespan=5

if name == "main": ArduinoSim(snippet=snippet, timespan=timespan, serial_line_logger=logger, f_cpu=f_cpu, fps=fps, speed=speed, ).run()

-

Output::

-- sh('python -m pysimavr.examples.delay ')--

0.0 0

1.00977802277 1

2.01976013184 2

3.02968215942 3

4.03792500496 4

-

vcd export example

pysimavr.examples.vcd::

-- include('examples/vcd.py')--

from pysimavr.sim import ArduinoSim

vcdfile='delay.vcd' snippet = ''' Serial.println("start"); pinMode(0, OUTPUT); digitalWrite(0, HIGH); delay(100); digitalWrite(0, LOW); delay(100); digitalWrite(0, HIGH); delay(100); digitalWrite(0, LOW); delay(100); Serial.println("end"); '''

if name == "main": sim = ArduinoSim(snippet=snippet, vcd=vcdfile, timespan=0.5) sim.run()

-

.. image:: gtkwave_id0.png

File hierarchy

::

|-docs sphinx documentation |---.build generated documentation |-pysimavr main python package, high level classes |---examples examples |---swig all swig files (simavr and parts) |-----include copy of simavr generated *.h files |-------avr copy from avr-libc |-----parts some electronic parts in c |-----simavr simavr as git submodule |-tests unit tests

How to update external sources

  1. copy avr-libc_ headers (Ubuntu folder: /usr/lib/avr/include/avr/) into pysimavr/swig/include/avr
  2. simavr_ is a git submodule. Run 'make' inside simavr directory, then copy generated sim_core_config.h and sim_core_decl.h into pysimavr/swig/include

.. _setuptools: http://peak.telecommunity.com/DevCenter/EasyInstall .. _pip: https://pypi.python.org/pypi/pip .. _arduino: http://arduino.cc/ .. _python: http://www.python.org/ .. _simavr: https://github.com/buserror/simavr .. _swig: http://www.swig.org/ .. _avr: http://en.wikipedia.org/wiki/Atmel_AVR .. _avr-libc: http://www.nongnu.org/avr-libc/

.. |Travis| image:: https://travis-ci.org/ponty/pysimavr.svg?branch=master :target: https://travis-ci.org/ponty/pysimavr/ .. |Coveralls| image:: http://img.shields.io/coveralls/ponty/pysimavr/master.svg :target: https://coveralls.io/r/ponty/pysimavr/ .. |Latest Version| image:: https://img.shields.io/pypi/v/pysimavr.svg :target: https://pypi.python.org/pypi/pysimavr/ .. |Supported Python versions| image:: https://img.shields.io/pypi/pyversions/pysimavr.svg :target: https://pypi.python.org/pypi/pysimavr/ .. |License| image:: https://img.shields.io/pypi/l/pysimavr.svg :target: https://pypi.python.org/pypi/pysimavr/ .. |Code Health| image:: https://landscape.io/github/ponty/pysimavr/master/landscape.svg?style=flat :target: https://landscape.io/github/ponty/pysimavr/master .. |Documentation| image:: https://readthedocs.org/projects/pysimavr/badge/?version=latest :target: http://pysimavr.readthedocs.org