Raspberry Pi je čím dál, tím víc, populární minipočítač i mezi robotiky, i když má pro robotiku řadu omezení. Jedná se zejména o chybějící AD převodník a jen jeden PWM kanál, který je navíc sdružený s audio výstupem. Oba tyto problémy můžeme velmi snadno vyřešit rozšiřujícím modulem, který se typicky připojuje na I2C sběrnici, kde Raspberry Pi funguje jako Master. Pokud si chceme takovýto modul vytvořit sami, tak se jako nejjednodušší řešení jeví využití PICAXE.
PICAXE jako I2C Slave
Mikrokontroléry PICAXE ve verzích X2 podporují také I2C Slave. Tento režim není dostupný na nižších verzích. V režimu I2C Slave se PICAXE chová jako paměť o velikosti 128 (20X2) nebo 256 byte. Takto je zpřístupněna tzv. scratchpad memory. Z této části paměti může Master číst nebo do něj zapisovat.
Následující kód zapisuje na adresu 0x01 hodnotu z analogového senzoru:
#no_data
#no_table
init:
; nastaveni vyssi frekvence kvuli rychlosti I2C
setfreq m16
; Nastaveni adresy, pozor, do adresy se pocita jen 7 bitu
hi2csetup i2cslave, %01110000
main:
readadc 1, b1
; zde zapisujeme do pameti pristupne pres I2C
put 1, b1
pause 1000
goto main
Přerušení
Pokud potřebujeme ihned reagovat na zapsání hodnoty z I2C Master, tak můžeme využít přerušení.
#no_data
#no_table
init:
; nastaveni vyssi frekvence kvůli rychlosti I2C
setfreq m16
; Nastaveni adresy, pozor, do adresy se pocita jen 7 bitu
hi2csetup i2cslave, %01110000
; preruseni na I2C
; http://www.picaxe.com/BASIC-Commands/Interrupts-and-Multi-Tasking/setintflags/
setintflags %01000000, %01000000
main:
; Tady neco delam
goto main
interrupt: ; preruseni pri prichozi I2C komunikaci
; nacteni hodnoty na adrese 0x00 scratchpad memory do registru b0
get 0, b0
debug
; reset preruseni
let hi2cflag = 0
setintflags %01000000,%01000000
return