PICAXE a Raspberry PI

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