Package: pysimavr
pysimavr is a python wrapper forsimavrwhich isAVRandarduinosimulatorLinks:home:https://github.com/ponty/pysimavrdocumentation:http://pysimavr.readthedocs.orgPYPI:https://pypi.python.org/pypi/pysimavrFeatures:python wrapper usingswigsimavrsource code andavr-libcheaders are included for easier installationobject oriented interface on top of the generated interfacemaximum speed can be real-timeserial communicationchecksimavrdocumentationBasic 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!InstallationchecksimavrdocumentationGeneralinstallpythoninstallpipinstallswig(for source build only)install header files and a static library for Python  (for source build only)install a compiler  (for source build only)install elf libraryinstall the program:# as root
pip install pysimavrUbuntu 14.04sudo 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 swigUninstall# as root
pip uninstall pysimavrUsagepysimavr.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 examplepysimavr.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()
#-#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 testsHow to update external sourcescopyavr-libcheaders   (Ubuntu folder: /usr/lib/avr/include/avr/) into pysimavr/swig/include/avrsimavris a git submodule. Run ‘make’ inside simavr directory,
then copy generated sim_core_config.h and sim_core_decl.h into pysimavr/swig/include