7.9. Oheisrauta Sms

10
1 7.10. Oheisrautaa. sms Kooste vanhoista, kaipaa vielä fixsaamista,se tulee seuraavaan painokseen. ”I’m not lucky. I just persevere longer than other people.” - Benny van Mable Yleistä Tässä rakennetaan pieni mikro-ohjain projekti. Laitteisto hankitaan valmiina, mutta ohjelma kehitetään aivan puhtaalta pöydältä. Tämä on eräänlainen yhteenveto ja samalla myös opitun tarkistus. Bonuksena syntyy mielenkiintoinen sovellus, josta voit itse kehittää myöhemmin vaikka mitä. Pienenkin sulautetun järjestelmän tekeminen alusta loppuun on suuri haaste. Mutta samalla se on erittäin opettavainen. Idea tähän projektiin tuli elävän elämän tarpeista, piti ohjata taukotilassa oleva kahvinkeitin ’päälle’ kauko-ohjatusti. Jatkokehittelymahdollisuuksia on. Lisäominaisuuksia varten pitää vain olla sellainen mikro-ohjain, jossa on hieman suurempi ohjelma- ja datamuisti. kuva 7.10.1. Nokian Communicator ja PK-2313i-mikro-ohjainkortti.

Transcript of 7.9. Oheisrauta Sms

1

7.10. Oheisrautaa. sms Kooste vanhoista, kaipaa vielä fixsaamista,se tulee seuraavaan painokseen. ”I’m not lucky. I just persevere longer than other people.” - Benny van Mable Yleistä Tässä rakennetaan pieni mikro-ohjain projekti. Laitteisto hankitaan valmiina, mutta ohjelma kehitetään aivan puhtaalta pöydältä. Tämä on eräänlainen yhteenveto ja samalla myös opitun tarkistus. Bonuksena syntyy mielenkiintoinen sovellus, josta voit itse kehittää myöhemmin vaikka mitä. Pienenkin sulautetun järjestelmän tekeminen alusta loppuun on suuri haaste. Mutta samalla se on erittäin opettavainen. Idea tähän projektiin tuli elävän elämän tarpeista, piti ohjata taukotilassa oleva kahvinkeitin ’päälle’ kauko-ohjatusti. Jatkokehittelymahdollisuuksia on. Lisäominaisuuksia varten pitää vain olla sellainen mikro-ohjain, jossa on hieman suurempi ohjelma- ja datamuisti.

kuva 7.10.1. Nokian Communicator ja PK-2313i-mikro-ohjainkortti.

2

Suunnitteluprosessi Palautetaanpa mieleen, miten sulautetun järjestelmän laitteen suunnitteluprosessi etenee.

piirroskuva projektista - määrittely - suunnittelu, ’speksit’ (ominaisuudet) - proton teko - ohjelman koodaus - testaus, virheiden korjaus, raudasta ja

ohjelmasta - dokumentointi

Projektin kuvaus Tehdään laitteisto- ja ohjelmakokonaisuus, jossa matkapuhelimen tekstiviestillä ohjataan PV-EMO-kortille liitettyä summeria, relettä, moottoria, tms. Aluksi on viisainta määritellä spesifikaatiot, ominaisuudet, jotka valmiilta laitteistolta vaaditaan, kuten

- mikä on käyttötarkoitus - välttämättömät ominaisuudet - toivottavat lisäominaisuudet - ympäristön vaatimukset - sähköturvallisuus - hinta

A. Laitteisto Perusperiaate on se, että käytämme (tässä tapauksessa) mahdollisimman valmiita, toimivia laitekokonaisuuksia. Ohjelma tehdään itse. Tarvitaan: A.1. Matkapuhelin Puhelimelle on pari vaatimusta. Sen on tunnettava modeemeissa käytettävät

- ns.Hayesin AT-komennot - ja siinä on oltava RS-232-sarjaliitäntä (tai mahdollisuus sen tekemiseen)

Valitaan puhelimeksi vanha Nokian Communicator. Kahdesta syystä. Niitä saa halvalla ja niissä on valmiina RS-232-liitäntä ja sarjakaapeli siihen tulee mukana. Jos puhelimen akku on ’loppu’, ei se haittaa. Käytetään puhelinta laturin kanssa. Mikro-ohjainkortilla on RS-232-sarjaportti, joten laitteiden yhteen liittäminen on helppoa. Myöhemmin, taitojen ja vaatimusten kasvaessa, voidaan liittää joku muu kännykkä ja tehdä siihen itse liitäntäkaapeli. (netti on täynnä ohjeita).

3

A.2. Mikro-ohjainkortti. Tehdäänkö itse uusi kortti, vai käytetäänkö valmista? Aika ja raha ratkaisee tässäkin. Jos löytyy valmis edullisesti, niin miksi tehdä uutta korttia? Valitaan PV-EMO ja PV-M32, koska se on jo meillä käytössä. Muistia on vähän, mutta taitava koodaaja tekee siihen mahtuvan koodin. Esimerkkilaitteistossa ohjattavaa relettä simuloi, matkii, pietsosummeri. Sen tilalle voit, omiin voimiin luottaen, rakentaa vaikka moottorin ohjaussysteemin, tai jonkun muun tarpeellisen It’s up to you. Summerin on oltava +5 Voltin käyttöjännitteellä toimiva. A.3. Kaapelit Puhelimen mukana tulee RS-232-kaapeli. Se liitetään suoraan PV-EMOn RS-232-liitäntään. Jos liitetään uudempi Communicator, tyyppi 9110, tai väri Communicator, ne vaativat sarjakaapelin D-liittimen pinniin 8 +5 V kättelyjännitteen. Se kytketään kortilta, selvitys edempänä.. B. Ohjelma Tehdään ohjelma, joka hoitaa puhelimen asetukset ja kerää tekstiviestin talteen ja sms:n tultua, laittaa summerin soimaan. C. Budjetti Koska ohjelman tekeminen vie vain aikaa, se ei maksa harrastajalle mitään. Vanha Communicator maksaa noin 100 euroa, tosivanhan saa muutamalla kympillä. Mikro-ohjainkortti meillä jo on. Siihen pitää hankkia pietsosummeri, kustantaa muutaman euron, tai tarvittaessa sen tilalle voi laittaa vaikka LED-diodin + etuvastuksen, niin pääset kaikkein edullisemmin tutustumaan ohjelmaan. Sarjakaapelin tekemiseen menee muuta euro, ellei sopivia liittimiä ja kaapelinpätkää löydy ’miljoonalaatikosta’. D. Aikataulu Jos tekisimme kaupallisen tuotteen, sen hinta ja aikataulu olisi määriteltävä tarkkaan ja pyrittävä pysymään siinä. Mutta nyt kun tarkoitus on vain oppia, niin aikataulu riippuu pelkästään omasta halusta. sms-ohjelman alustava suunnittelu Puhelimen manuaalista tässä yhteydessä ei ole paljoa hyötyä. Tarvitaan nimittäin tietoa modeeminvalmistaja Hayesin AT-komennoista, AT niin kuin Attension. Noilla AT-komennoilla, jotka alun perin on tarkoitettu modeemien ohjaukseen, ohjataan matkapuhelinta. AT-komentoja ymmärtävä puhelin asetetaan tilaan, jossa tuleva tekstiviesti ei jää itse puhelimeen, vaan se siirretään saman tien sarjajohtoa pitkin mikro-kortille.

4

Nokian puhelimien käyttöohjekirjoista löytyy teksti, joka kertoo, osaako puhelin käyttää Hayesin AT-komentoja. Etsi vanhat modeemikirjat esiin ja netistä google-hakukoneella hakemaan lisäinfoa. Sitä löytyy todella runsaasti. Seuraavat sivut ovat tämän tekstin (ja koodin) tekemisessä olleet hyödyllisimpiä: www.cellular.co.za/at_etsi.htm www.option.com/support/hayesat.htm Olen tehnyt tärkeimmistä ohjauskomennoista pienen yhteenvedon, helpottamaan ensiaskeleita. Puhelimen asennus ja asetukset Tietokoneen tehtävähän on korvata ihmistyötä, sillä se tekee työn nopeammin, väsymättä ja virheettömästi. Ohjelma on ohje tietokoneelle siitä, mitä sen tulee tehdä. Jotta tiedämme, miten tietokoneohjelman pitäisi tässä yhteydessä toimia, tehdään kaikki tarvittava ensin manuaalisesti käsipelillä ja sen perusteella kirjoitetaan algoritmi, joka edelleen käännetään C-kieliseksi lähdekoodiksi. Tavoite Konfiguroidaan Communicator siten, että sen vastaanottama tekstiviesti siirtyy automaattisesti sarjaporttiin ja edelleen tietokoneeseen. Toimi näin Liitä puhelimen mukana tullut sarjakaapeli PC:n sarjaporttiin. Se on turvallisinta tehdä virrattomana. Käynnistä koneet ja käyttämämme Tera Term Pro terminaaliohjelma. Aseta se sarjaportti-toimintatilaan. Valitse oikea COM-portti ja seuraavat asetukset: 9600, 8 data, 1 stop, ei vuonohjausta.

Tera Term Pro terminaaliohjelman sarjaporttiasetukset.

5

Puhelimien asetukset: 1. Nokia Communicator 9110 Datakaapeli: DLR-2 Aseta Communicator FAX-mode-tilaan painamalla System -> Faksimoodeemi -> Valitse -> Asetukset, tarkista, että ne ovat: kaapeli, 9600, vuonohjaus ei, databitit 8, stop-bitit 1. Aktivoi toiminto ->Käynnistä. 2. Nokia Communicator 9000 (Nokian ensimmäinen Communicator-malli) Datakaapeli: DAU-9P Valitse: System, -> Fax modem, -> Select Settings, -> Cable, -> baud rate 9600, -> flow control off, -> data bits 8, -> stop bits 1. -> Close, -> Activate 3. Nokia 6210 Datakaapeli: DLR-3 Kun kytket datakaapelin puhelimen ja tietokoneen välille, yhteys on valmis automaattisesti, ja puhelimen ruudulle tulee siitä ilmoitus. AVR ja sms-ohjaus, alkutoimet 1. Käynnistä PC-kone ja (Tera Term Pro) terminaaliohjelma. Aseta se sarjaportti-toimintatilaan. Valitse oikea COM-portti ja seuraavat asetukset: 9600, 8 data, 1 stop, ei vuonohjausta. Nokia 6210 + Datakaapeli: DLR-3 Kytke datakaapeli puhelimeen ja toinen pää tietokoneen RS-232-liitäntään (COM1). 2. Asetusten testaus 2.1. Puhelimen sarjanumeron kysely. Kirjoita PC:n näppäimistöllä: ati1 teksti pitää näkyä PC:n ruudulla terminaali-ohjelmassa ja sitten paina enter. Puhelin palauttaa sarjanumeronsa ruutuun, minulla se oli 490543704878137 OK Jos puhelin palautti sarjanumeronsa, niin kaikki on hyvin. Ellei, sitten seuraa vikojen etsintä. 2.2. Puhelin asetetaan tekstimode-toimintatilaan Se tapahtuu näin, kirjoita: at+cmgf=1 ja taas enter Puhelin vastaa: OK 2.3. Tekstiviestikeskuksen kysely Edellisen kaavan mukaan: at+csca? ja sitten enter, puhelin vastaa; +CSCA: "+358508771010",145 OK . Numero riippuu operaattorista.

6

2.4. Tekstiviesti, sms, sarjaporttiin Puhelin tulee asettaa toimintatilaan, jossa tekstiviesti ei jää puhelimeen, vaan se ohjautuu suoraan sarjaportin kautta terminaaliohjelmaan (tai kortille). Kirjoita at+cnmi=1,2,0,0,0 Enterin painalluksen jälkeen tulee vastaus, OK 2.5. Sitten asetetaan tekstiparametrit (Set text parametres) at+csmp=17,167,0,0 Vastaus: OK 2.6. Lähetä tekstiviesti PC:n terminaaliohjelmasta numeroon 0400745xxx Tarvitaan toinen puhelin, johon sms lähetetään. Komento on: at+cmgs="0400745xxx" Lainausmerkkien väliin kirjoitetaan sen puhelimen numero, johon sms lähetetään. Enterin jälkeen ruutuun tulee kulmamerkki (nuoli oikealle). Kirjoita sen jälkeen viesti, esim; > sms-testi Jos painat uudelleen enter, tulee uusi kulma. Lopetuskomento on ctrl ja z, paina niitä yht’aikaa. Sitten viesti lähtee. +CMGS: 21 OK 2.7. Tekstiviestin vastaanotto Siihen tarvitaan toinen puhelin, jolla lähetetään PC:n kytkettyyn puhelimeen tekstiviesti. Lähetä vaikka viesti: Onnittelut! Terminaaliohjelmaan ilmestyy hetken kuluttua, tekstiviestin ehdittyä perille. +CMT: "+358400745xxx",,"02/10/28,22:54:52+08" Onnittelut! Ohjelman suunnittelu ja tekeminen Kaksi lähtökohtaa. 1. Tehdään ohjelma koostuvaksi useasta funktioista. * Aina kun funktiota kutsutaan, ohjelma tuhoaa työmuistista (SRAM) edellisen pinomuistin ja rakentaa uuden uutta funktiota, sen muuttujia yms. varten. Varo pitkiä sisäkkäisten funktiokutsujen jonoja, jolloin taas pinomuistin tarve kasvaa! 2. Käytetään mahdollisimman vähän globaaleja muuttujia. * Ne varaavat muistia koko ohjelman ajan.

7

Lähdekoodin kirjoittaminen Ohjelmakoodin kirjoittaminen on perusidealtaan algoritmin kääntämistä, manuaalisesti, ohjelmointikielelle. Tässä valmis malli /************************************************** ******** Project : sms_simple_m32_uusi.c, Hardware: PV-mega32 + PV-RS232 + Nokia 6210 + DLR-3P-kaapeli Muista myös +5V kättelypiuha_7. Kättelyt COM1:n pinnit 8-6-1-4 yhteen ja pin 7 +5 V . - nuo rivit turhia, jos käytössä on PV-RS232-moduul i=OK Software: WinAVR 20070122 Date : 15.5.2007 Author : pva Comments: initialisoi ensin Nokia 6210 tilaan, jossa tuleva s ms siirtyy sarjaporttiin ja edelleen PV-mega32:n muist iin. Odottaa SMS-viestiä vilkuttelemalla PORTB:n ledejä. Kun sms tulee, PORTB = 0x Tätä koodia saa käyttää vapaasti, omalla vastuulla. Jos käytät koodia, tarjonnet tuopillisen tavatessam me. Jos parantelet sitä, niin kerro minullekin. Tarjoan takaisin. [email protected] *************************************************** *******/ #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #define XTAL 4000000 // MCU:n kellotaajuus #define BAUD 9600 // nopeus oltava 9600 bps #define viive_rs 4 // apuviive volatile uint16_t i = 0; // taulukon indeksi volatile uint8_t loota[60]; // tänne kerätään sms -merkit // uint8_t (ANSI-C) on unsigned char // uint16_t (ANSI-C) on unsigned int // volatile estää c-kääntimen optimoinnin vaikutuks en // ** funktioiden prototyypit ******************** ******** void USART_Transmit(uint8_t data); void Sms_init(void); void Text_modeen(void); void Rx_termis(void); void Rx_ready(void); void wait(uint16_t time); // sarja_vastaanotto_keskeytys_funktio ************ ******** ISR(USART_RXC_vect) { uint8_t merkki; merkki = UDR; // USARTiin tullut merkki muuttujaa n

8

// tällä ohitetaan sms-alun "turhat" merkit if(i > 39) // ryhdytään keräämään talteen 39. merkin jälkeen loota[i-40] = merkki; // siirrä merkki taulukkoo n i++; // taulukon indeksin päivi tys if(i >= 60) sei(); // kielletään keskeytykset, eli uudet mer kit } void USART_Transmit(uint8_t data) { // Wait for empty transmit buffer while (!( UCSRA & (1<<UDRE))); // odota kunnes UD RE == 1 // UDRE on 1, jos puskuri on tyhjä, // eli ed. merkki on lähetetty UDR = data; // lähtevä merkki USARTin datarekiste riin } // *** USART asetukset, 8 data, 1 stop bit, 8N1 ** ******** void USART_Init(void) { // Set baud rate, lasketaan bittien siirtonopeus UBRRH = 0x00; // write high register first UBRRL = ((XTAL/16)/BAUD)-1; UCSRB |= (1<<RXEN)|(1<<TXEN); // 0001 1000 // Bit 4 – RXEN: Receiver Enable // Bit 3 – TXEN: Transmitter Enable UCSRB |= 1<<RXCIE; // rx interrupt enable, 1xx1 1 xxx // sarjavastaanottokeskeytys sallittu // 8 Data, 1 Stop, No Parity 1xxx x11x UCSRC |= (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); } // ** kännykkä tekstimodeen *********************** ******** void Text_modeen(void) { uint8_t p; // uint8_t text_mode[10] = {'a', 't', '+', 'c', ' m', 'g', 'f', '=', '1', 'enter }; uint8_t text_mode[10] = {0x61, 0x74, 0x2B, 0x63, 0x6D, 0x67, 0x66, 0x3D, 0x31, 0x0D }; // komentosana sarjaportin kautta kännykkään for(p = 0; p <= 9; p++) { USART_Transmit(text_mode[p]); wait(viive_rs); } } // ** sms ei jää kännykkään, vaan COM kautta PV-kor tille * void Rx_termis(void)

9

{ uint8_t p; // uint8_t termis[14] = {'a', 't', '+', 'c', 'n', 'm', 'i', '=', '1', pilkku, '2', pilkku, '0', pilkku, '0', pilkku, '0', enter } ; uint8_t termis[18] = {0x61, 0x74, 0x2B, 0x63, 0x6 E, 0x6D, 0x69, 0x3D, 0x31, 0x2c, 0x32, 0x2c, 0x30, 0x2c, 0x30, 0x2c, 0x30, 0x0D }; wait(100); for(p = 0; p <= 17; p++) { USART_Transmit(termis[p]); wait(viive_rs); } } // ** kännykkä valmiina sms-siirtoihin ************ ******** void Rx_ready(void) { uint8_t p; // uint8_t rx_ready[13] = {'a', 't', '+', 'c', 's ', 'm', 'p', '=', 17, pilkku, 167, pilkku, '0', pilkku, '0', enter }; uint8_t rx_ready[19] = {'a', 't', 0x2B, 'c', 's', 'm', 'p', 0x3D, 0x31, 0x37, 0x2c, 0x31,0x36,0x37, 0x2c, 0x30, 0x2c, 0x30, 0x0D }; wait(100); // komentosana kännyyn for(p = 0; p <= 18; p++) { USART_Transmit(rx_ready[p]); wait(viive_rs); } } // *** Primitive wait() *************************** ******** void wait(uint16_t time) { volatile uint16_t i; for(i=0;i<2000;i++) _delay_loop_2(time); } int main(void) { DDRB = 0xFF; PORTB = 0x01; // näytetään startti wait(100); USART_Init(); wait(100); PORTB = 0x03; Text_modeen(); // känny textmodeen wait(100); PORTB = 0x07; Rx_termis(); // känny terminaalimodeen wait(100); PORTB = 0x0F;

10

Rx_ready(); // kännystä sms sarjajohtoon wait(100); UCSRB |= 1<<RXEN; // Receiver Enable, vastaanotto sallittu UCSRB |= 1<<RXCIE; // rx interrupt enable, 1xx1 1 xxx // sarjavastaanottokeskeytys sallittu sei(); // globaali keskeytys sallittu while(1) { // vilkutellaan odotellessa sms:ää PORTB = 0x18; wait(100); PORTB = 0x81; wait(100); if(i >= 49) // kun sms-merkit luettu { cli(); // estetään uudet keskeytykset PORTB = 0xE7; // Summeri soimaan, tai // tähän voit kytkeä transistorin ja releen.. . i = 0; while(1) // loppu {;} } } }

HUOM! Et missään tapauksessa saa kytkeä yli 24 V jännitettä käyttäviä laitteita kortille. Ne ovat hengenvaarallisia!!! HUOM! Et missään tapauksessa saa kytkeä yli 24 V jännitettä käyttäviä laitteita kortille. Ne ovat hengenvaarallisia!!! Irtisanoutuminen Kaikki kytkennät ja kokeilut teet täysin omalla vastuulla.