Kaikki alkoi siitä, että kirjailija osti mielenkiintoisen laitteen jälkimarkkinoilta - Smart Response XE (
Näiden laitteiden valmistus lopetettiin useita vuosia sitten, ja koulut, jotka kukin ostivat 100–200 dollarilla, ilmestyvät eBaysta 10 dollarilla tai vähemmän. Siellä oleva laitteisto soveltuu erittäin hyvin nörttikokeiluun:
- 60 näppäimistön näppäimistö
- näyttö, jonka resoluutio on 384 × 136, 2 bittiä pikseliä kohden - samanlainen kuin BC, CGA, mutta 4 ei väriä, vaan kirkkausasteikko
- mikro-ohjain ATmega128RFA1 (128 kt flash-muisti, 4 kt ROM, 16 kt RAM, 802.15.4 lähetin-vastaanotin)
- ulkoinen (suhteessa mikro-ohjaimeen, ei koko laitteeseen) 1 megabitin (128 kilotavua) flash-muisti SPI-liitännällä
- lokero 4 AAA-elementille.
Mikro-ohjaimen nimestä selviää, että se kuuluu AVR-perheeseen, mikä tarkoittaa, että laitteen tekeminen Arduino-yhteensopivaksi on enemmän kuin triviaali tehtävä...
Uutisista eteenpäin
Mutta kirjoittaja on enemmän kiinnostunut mahdollisuudesta olla pelaamatta laitteella, vaan opiskella:
- Flash-muisti, jossa on SPI-sarjaliitäntä
- käynnistyslataimet AVR:lle
- standardi 802.15.4
Kirjoittaja aloitti kirjoittamalla
Tämä riittää lataamaan Arduino-käynnistyslataimen, mutta ei luonnosta - sarjaporttia ei ole kytketty sinne, joten et silti voi tehdä ilman kotelon avaamista. Myös ensimmäisen sarjaportin TX0- ja RX0-rivit on yhdistetty näppäimistömatriisin pollauslinjoihin, nimittäin niihin, jotka pollaavat näytön sivuilla olevia toimintonäppäimiä. Mutta mitä voit tehdä - kirjoittaja rakensi tämän:
Hän toi JTAG-linjat sinne, eikä paristolokeroa enää tarvitse avata. Ja jotta sketsit saisi ladattua, liitin molemmat sarjaportit samaan liittimeen lisäten myös kytkimen, koska akkujen ollessa asennettuina laitetta ei ole fyysisesti mahdollista sammuttaa millään muulla tavalla.
Juotosraudalla, apuveitsellä ja liimapistoolilla työskentely kesti melko kauan. Yleensä luonnosten lataaminen "ylhäältä" on paljon kätevämpää; meidän on kiireesti keksittävä jotain tätä varten.
Arduino IDE käyttää ohjelmaa luonnosten lataamiseen
Yritettyään eri tapoja ratkaista tämä ongelma, kirjoittaja päätyi seuraavaan. Laitteessa on 128 KB flash-muisti SPI-liitännällä - vastaanotamme dataa johtoja pitkin (muista, että tekijällä on jo yksi laite, jossa on liitin sivulla), käytämme tätä muistia puskurina ja lähetämme tiedot radion kautta. kanava toiseen laitteeseen. Terveisiä Cybikosta.
Kirjoitettuaan koodin radiokanavan kanssa toimimaan sekä fontin kanssa, latausohjelmasta tuli yli 4 kilotavua. Siksi HFUSE-arvo oli muutettava arvosta 0xDA arvoon 0xD8. Nyt käynnistyslatain voi olla jopa 8 kilotavua pitkä, ja aloitusosoite on nyt 0x1E000. Tämä näkyy Makefilessä, mutta se tulee ottaa huomioon myös täytettäessä
ATmega802.15.4RFA128:n 1-lähetin-vastaanotin on alun perin suunniteltu toimimaan protokollan avulla
Kävi ilmi, että kanavat 15 ja 26 ovat vähiten herkkiä WiFin häiriöille. Kirjoittaja valitsi niistä toisen. Vastuuvapauslauseke: kääntäjä ei tiedä, saako ZigBeetä yksinkertaistaa tällä tavalla. Ehkä meidän pitäisi tehdä hieman enemmän ohjelmointia ja toteuttaa se kokonaan?
Ensimmäisessä laitteessa on tarpeen toteuttaa äärellinen tilakone, joka välittää tietoja STK500-protokollan kautta. Lähetetyt ja vastaanotetut viestit ovat pääosin omavaraisia, mutta osa niistä on sidottu aiemmin kanavan kautta kulkeneisiin viesteihin. Dialogin kuvaus on annettu
Tämän dialogin tärkeä komponentti on kohdelaitteen flash-muistiin kirjoitettaviksi tarkoitettujen pakettien lähettäminen. Yksinkertaisilla AVR-perheen mikro-ohjaimilla sivukoko on 128 tavua, mutta ATmega128RFA1:llä se on 256. Ja SPI-protokollalla kytketyllä flash-muistilla se on sama. Ensimmäisessä laitteessa oleva ohjelma, kun lataa luonnosta, ei siirrä sitä välittömästi toiseen, vaan kirjoittaa sen tähän muistiin. Kun Arduino IDE tarkistaa merkinnän oikeellisuuden, sille lähetetään mitä siellä kirjoitettiin. Nyt meidän on lähetettävä vastaanotetut tiedot radiokanavan kautta toiseen laitteeseen. Samaan aikaan vaihto vastaanottamisesta lähetykseen ja takaisin tapahtuu melko usein. STK500-protokolla on välinpitämätön viiveille, mutta ei siedä tietojen häviämistä (outoa, mutta yllä sanottiin, että viiveet vaikuttavat myös tiedonsiirtoon). Ja häviöt langattoman tiedonsiirron aikana ovat väistämättömiä. ATmega128RFA1:ssä on sisäänrakennettu laitteistototeutus toistuviin pyyntöihin, kun siirron oikeellisuudesta on epäilyksiä, mutta kirjoittaja päätti toteuttaa saman ohjelmistossa itse. Hän kehitti protokollan, jossa paljon enemmän dataa virtaa yhteen suuntaan kuin toiseen.
Se ei ole täydellinen, mutta se toimii. 256-tavuinen sivu on jaettu neljään segmenttiin, joista jokainen lähetetään pakettina. Paketti voi sisältää enintään 125 tavua dataa sekä yhden tavun pituuden ja kaksi tavua CRC:tä varten. Joten 64 tavun pituiset fragmentit sivu- ja segmenttinumeroineen (0-3) sijoitetaan sinne. Vastaanottavassa laitteessa on muuttuja, jonka avulla se voi seurata kuinka monta segmenttiä on vastaanotettu, ja kun kaikki neljä saapuvat, lähettävä laite vastaanottaa vahvistuksen, että koko sivu on vastaanotettu. Ei vahvistusta (CRC ei täsmää) - lähetä koko sivu uudelleen. Nopeus on jopa suurempi kuin kaapelin kautta lähetettäessä. Katso:
Mutta yleisesti ottaen olisi tarpeen tarjota kätevä tapa liittää kaapeli laitteisiin luonnosten lataamista varten ja sen kautta. Aseta esimerkiksi tällainen liitäntämuunnin CP2102:n sisään, kuten kuvassa, ja liimaa se levyyn niin, että se kestää voiman kytkettäessä ja irrotettaessa Micro USB -kaapelia.
Siinä on myös 3,3 voltin stabilisaattori (ja kuinka sitä käytetään laitteessa, jossa on 6 voltin virtalähde - jos vain siinä on sama stabilointi, ja voit lisätä kaksi diodia valitaksesi automaattisesti, kumpi niistä antaa virtaa laitteeseen) . Kaikki kolme LEDiä on juotettava irti liitäntämuunninkortista, muuten ne kuormittavat lisäksi paristoja käytettäessä niitä ja häiritsevät myös näppäimistön pollausa ja toimivat flash-muistin kanssa SPI-liitännällä.
Tavoitteen tavoittelu osoittautui vielä mielenkiintoisemmaksi kuin sen saavuttaminen (eikä tarvitse sitä vitsiä bussista). Kirjoittaja oppi paljon AVR-käynnistyslataimista, SPI-flash-muistista, STK500-protokollasta ja 802.15.4-standardista.
Kaikki muut koodit edellä kuvatun kirjaston lisäksi ovat −
Lähde: will.com