Di seguito alcune prove che ho effettuato salvando solo i due file:
e scrivendo di volta in volta il pezzetto di codice d'esempio in un file chiamato prova.py. Per lanciarlo:
sudo python prova.py
Invia dieci impulsi da un secondo usando la libreria rpgpio. Qui il realtime non c'entra ancora nulla.
from rpgpio import GPIO
import time
pin = 21
g= GPIO()
for i in range(10):
g.init(pin, GPIO.MODE_OUTPUT)
g.set(pin)
print("set " + str(g.read(pin)))
time.sleep(1)
g.clear(pin)
print("clear " + str(g.read(pin)))
time.sleep(1)
Il sorgente della classe GPIO() è qui:
Alloca memoria, ci scrive sopra e controlla e rilegge cosa ha scritto. Anche qui il realtime non c'entra ancora nulla :-).
from rpgpio_private import *
cma = CMAPhysicalMemory(1*1024*1024)
print(str(cma.get_size() / 1024 / 1024) + "MB of memory allocated at "
+ hex(cma.get_phys_address()))
a = cma.read_int(0)
print("was " + hex(a))
cma.write_int(0, 0x12345678)
a = cma.read_int(0)
assert a == 0x12345678, "Memory isn't written or read correctly"
print("now " + hex(a))
del cma
Il sorgente della funzione CMAPhysicalMemory() è qui:
Primo esempio per generare impulsi. Genera impulsi da 2 uS sul pin GPIO21.
Sembra che la risoluzione minima sia 2 uS, se provo a mettere 1uS non scende al di sotto dei 2 uS.
from rpgpio import DMAGPIO,GPIO
import sys
pin = 21
g=GPIO()
g.init(pin, GPIO.MODE_OUTPUT)
dg = DMAGPIO()
dg.add_pulse(1 << pin, 2)
dg.add_delay(2)
dg.run(True)
print("dmagpio is started")
try:
print("press enter to stop...")
sys.stdin.readline()
except KeyboardInterrupt:
pass
dg.stop()
g.clear(pin)
print("dma stopped")
Il sorgente della classe DMAGPIO() è qui:
Soluzioni basate su Arduino
Host vari per GRBL esempio bCNC
2018 Ⓒ TanzoLab