soodan sivut

arkisto

239 kirjotelmaa.

avainsanat

Tilasin joskus heinäkuun lopulla ebaystä muutaman nRF24L01+-moduulin eli pienitehoisen radiopiirin oheisjuttuineen (kide, antenni yms). Postikuluineen kappalehinnaksi tuli noin viisi euroa, eli aika lailla vähemmän kuin mitä sparkfunin vastaavalle jota alunperin harkitsin. Tulivat elokuun puolivälissä postilaatikkoon, jolloin koodailin parit ohjauskoodirimpsun alut. Kiireellisempien hommien (tms?) alta nuo kuitenkin unohtuivat pöytälaatikkoon, mutta nyt joululomalla pitäisi rakennella pari jännää hommaa joissa noita oikeasti tarvitsisi -- mm. pari kauko-ohjattavaa robottivempainta ja kattovalojen kytkimet. Siispä koodi käteen ja radioille virrat...

Nopein tapa tutustua uuteen jännään piiriin on koodailla sille adapteri mikrokontrollerista jonka kautta juttelee sille pc:llä. Nopein tapa värkätä väliaikaisadapteri raa'asta avr:stä on tietysti kasata se leipikselle. Nopein tapa kytkeä tuo radiolutikka leipikselle on kyhätä sille adapteri vanhasta lattapiuhanpätkästä koska kaksirivinen piikkirima ei toimi yhteistyössä leipiksen kanssa. Ei kun protoilemaan.

Itse adapteripiirit siis tarvitaan, koska nrf-lutikat juttelevat SPI:llä, yhdellä erillisellä enable-linjalla sekä keskeytyslinjalla -- näitä ei pc:hen saa suoraan kiinni. Avr-piirit puhuvat niille SPI:tä ja vetkuttavat tuota enablea silloin kun isäntä niin käskee. Avr-adapterille ohjausjuttelu tapahtuu pc:n puolelta usb-väylässä olevan sarjaväyläadapterin kautta; adapterille sanotaan mitä bittejä radiolle pitäisi siirtää ja siltä kysytään että mitä samalla siirrossa tuli radiolta takaisin. Samalla se kertoo jos radio nykäisi keskeytysnastaa vinkiksi siitä, että jotain tärkeää tapahtui.

Toiselle avr:lle tulee sarjaväylä pc:ltä dealextremen teurastetulta halpis-usb-RS232-adapterista -- revin rs232-jännitetasomuuntimen pois niin että saadaan jännitteet suoraan avr:n kelpuuttamana. Toiselle taas samanlaisen mutta koskemattoman usb/rs232-muuntimen ja rs232/ttl-muuntimen lävitse, koska sellainen sattui leipiksellä olemaan.

Raivoisan datasheet-pläräämisen ja esimerkkikoodien lueskelun jälkeen alkoivat omat koodit näyttää toimivalta, ja parin pikkuisen bugin metsästämisen jälkeen nuo kaksi keskustelevatkin oikein kivasti. Pc-puolen koodit ovat Pythonia ja avr-puoli muutama rivi C:tä. Protoilumielessä kasattuja koodeja en tässä kuitenkaan julkaise; katsotaan sitten uudestaan kun noilla tekee muutakin kun alustaa vain ne tarpeelliset konffirekisterit, siirtää moi-tekstiä ja tulostaa debuggausmössöä:

sooda@puuhastelu ~/koodit/python $ python nrfradio.py /dev/ttyUSB0 recv
dummy read
flush: --><--
*** init
adapternop
ok
nop
>>> ['0xff']
<<< ['0x0e']
clear irq all
writereg 0x07: 127 (0x7f)
>>> ['0x27', '0x7f']
<<< ['0x0e', '0x00']
nop
>>> ['0xff']
<<< ['0x0e']
*** start
cfg autoretries 0
readreg 0x04 (1 bytes)
>>> ['0x04', '0x00']
<<< ['0x0e', '0x00']
writereg 0x04: 0 (0x00)
>>> ['0x24', '0x00']
<<< ['0x0e', '0x00']
cfg autoack 0
writereg 0x01: 0 (0x00)
>>> ['0x21', '0x00']
<<< ['0x0e', '0x00']
cfg rx payload size 0:3
writereg 0x11: 3 (0x03)
>>> ['0x31', '0x03']
<<< ['0x0e', '0x00']
writereg 0x05: 2 (0x02)
>>> ['0x25', '0x02']
<<< ['0x0e', '0x00']
writereg 0x03: 3 (0x03)
>>> ['0x23', '0x03']
<<< ['0x0e', '0x00']
powerup 1
maskon 0x00:2
readreg 0x00 (1 bytes)
>>> ['0x00', '0x00']
<<< ['0x0e', '0x0b']
writereg 0x00: 11 (0x0b)
>>> ['0x20', '0x0b']
<<< ['0x0e', '0x00']
set prx
maskon 0x00:1
readreg 0x00 (1 bytes)
>>> ['0x00', '0x00']
<<< ['0x0e', '0x0b']
writereg 0x00: 11 (0x0b)
>>> ['0x20', '0x0b']
<<< ['0x0e', '0x00']
flush rx
>>> ['0xe2']
<<< ['0x0e']
set ce True
*** receiving
nop
>>> ['0xff']
<<< ['0x0e']
stat [14]
nop
>>> ['0xff']
<<< ['0x0e']
stat [14]
nop
>>> ['0xff']
<<< ['0x0e']
stat [14]
nop
>>> ['0xff']
<<< ['0x0e']
stat [14]
nop
>>> ['0xff']
<<< ['0x0e']
stat [14]
nop
>>> ['0xff']
<<< ['0x0e']
stat [14]
nop
>>> ['0xff']
<<< ['0x0e']
stat [14]
nop
>>> ['0xff']
stat WOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOP IRQ
***********************************************
 !!! IRQ
<<< ['0x40']
[64]
set ce False
clear irq all
writereg 0x07: 127 (0x7f)
>>> ['0x27', '0x7f']
<<< ['0x40', '0x00']
HEH data
r rx pld size=3
>>> ['0x61', '0x00', '0x00', '0x00']
<<< ['0x00', '0x4d', '0x6f', '0x69']
[77, 111, 105] ['M', 'o', 'i']

Iteratiivinen kötöstäminen on jees. Tästä sitten voi jatkaa kivasti laajentamalla pythonpuolen radiokirjaston robokauko-ohjaimeksi, naputtelemalla C:llä avr:lle radiojuttelut (tai etsimällä valmiin kirjaston siihen -- niitä näytti löytyvän) sekä suunnittelemalla jonkun piirilevyn pikkuiselle robotille.

0 kommenttia

Oma kommenttisi

Mielipide tämän sivun asiasta? Kirjoita toki. Älä raapusta kuitenkaan ihan asiattomia juttuja.

Jos on yksityisempää asiaa, tarkkaa kysyttävää tai aihetta pidemmälle keskustelulle, käytä yhteydenottolomaketta kommentoinnin sijaan.

Hölmöt kommentit saatetaan moderoida pois jälkikäteen.

Nimimerkki:

Spammibottiesto: Mikä on yhden ja yhdeksän erotus? (vastaus numeroina)