Timer

Timer on tehty vaimolle keittiön ajastimeksi 15.9.2016.

Timer.jpg

Siinä on

  1. 2*8 merkin LCD
  2. Potentiometri 100k, jolla määritellään minuutit 0-30
  3. Oikea painonappi, jolla laite saadaan käyntiin.
  4. Vasen painonappi, jolla voidaan päivittää aika nupin kääntämisen jälkeen ja samalla

lisätä sekunteja tai vähentää sekunteja minuuttien lisäksi.

Miten se onnistuu vain yhdellä napilla?

Kun painetaan nappia ja pidetään se pohjassa sekunnit lisääntyvät 59 s saakka
Kun irroitetaan nappi ja painetaan sitä jatkuvasti sekunnit vähenevät 5 sekuntia yhdessä sekunnissa.

Koko ajan aika laskee alaspäin, esim. 5:59s, aika näkyy LCD.ssä.

Kun aika on 0:00, kuuluu laitteesta kolme piippausta ja laite sammuu.

Siis se toimii kuin vaimon vanhakin muna-ajastin.
No muna-ajastimesta olivat menneet muoviset hampaat rikki.

Laitetta käytetään mikrouunin ajastimena, koska mikron oma ajastin on myös rikki, mutta uuni toimii.

Laite käyttää 4 AA*1.5V= 6V paristoja, virrankulutus on 15mA.
Saa nähdä kuinka kauan paristot kestävät.

Jos AA-pariston kapasiteetti on 600-1000mAh ja käyttö on 1-2 kertaa päivässä, niin paristot kestävät noin puoli vuotta.

Laite toimii 4.5V saakka ja myös senkin alle, mutta LCD ei tahdo enää näkyä.
No saisi senkin näkymään kun laittaisi PWM:n toimimaan käyttöjännitteen mukaan.
LCD on kytketty portin B nastoihin RB.0 - RB.5. LCD:ssä on myös taustavalon ohjaus, mutta sitä ei ole tässä sovelluksessa käytetty.

Tietysti laitteessa on paristomittari, joka toimii aina käynnistyksessä.
Kun jännite on alle 4.5V ajastin sanoo "LOW Volt" (LCD:ssä on vain 8 merkkiä rivillä)

330px-AA_matchstick-1.jpg

Mikrokontrollerina on Micrchip PIC18F2331.
http://www.microchip.com/wwwproducts/en/PIC18F2331

Siinä on sisäinen RAM, sisäinen EEPROM. kolme laskuria, kaksi PWM-piiriä, sarjaliikenneliitäntä ja joukko IO-nastoja. Se on SOIC-kotelossa, 28-nastaa.
Niistä B-portin nastat on käytetty LCD:n ohjaukseen (RB.0- RB.5)
Piirilevynä oli vanha vuonna 2007 tehty mittalaitteen kortti, jossa oli komponentit kiinni.

Prosessorin päässä on Microchipin ohjelmointilaitetta PICKIT2:sta varten viiden nastan liitäntä.
PICKIT2.jpg

Sarjaliikennettä on käytetty debuggaukseen.
Liittämällä RC.6 transistorilla 9600 baudin sarjaliikenneohjelmaan PC:llä.
Tätä liitäntää kaytän aina ohjelmaa testatessa.

Painonappien luku tehdään RB.6:lla ja RB.6:lla.
Laite laitetaan päälle SW1:llä ja transistorilla Q4.

Laitteen paristojännite mitataan epäsuorasti mittaamalla 2.5V referenssijännite. Se nousee kun jännite laskee.
Tähän täytyy tehdä taulukko mitä referenssijännite antaa 4.5- 6.0V jännitteillä.

Tässä on paristojännitteen mittauskoodi :

// calibration table from 6.0V to 4.5V 16 pieces
unsigned int8 cal []={39,40,41,42,43,44,44,45,45,45,47,48,49,49,49,50,51} ; 

// ADC-value  is divided  /10

void DisplyBatteryVoltage ( void) {
unsigned int8 hi,lo,i; 
unsigned int8 val ; 
set_adc_channel( 1 ); delay_ms(1); 
  Battery= read_adc();
  batFilter = batFilter*9 + Battery;
  batFilter /=10;
 val=batFilter/10; 
 printf("\r batt=%u", val); 
 for(i=0; i<16;i++) { 

    if(val< cal[i] ) { 

       break; 
    }
 } 

Battery =60 - i ; 
 printf("\ri=%u BAT %ld ", i, Battery); 
 hi=(unsigned int8)( Battery/10 ) ;  // kalibroint
 lo =(unsigned int8) ( Battery - (unsigned int16)hi*10)  ;
 lcdrow1 ();  printf(lcd_putc,"BAT=" );
 printf(lcd_putc,"%u.%uV    ", hi,lo  );
 printf( " \rBAT=%u.%uV    ", hi,lo  );

}

Laitteessa on kolme keskeytystä.

Timer0 laskee sekunteja ja vähentää minuutteja ja sekunteja, pitää yllä sekuntilaskuria, jotta laite osaa näyttää kerran sekunnissa ajastimen arvot

Timer1 pitää yllä vahtikoiraa, jotta laite pysyisi päällä.

RB-portin muunnoksista tulee myös keskeytys, jonka avulla valitaan molempien painonappien toiminnat.

Aluksi asetellaan prosessorin kaikki asetukset ja yleiset muuttajat.
Sitten on looppi joka näyttää kerran sekunnissa jäljellä olevan ajan LCD:llä.
Kun aika loppuu Timer0 keskeytyksessä on muuttuja joka saa äänen tulemaan kaiuttimesta ja lopuksi kaitkaisemaan laitteen virran.

Laitteen kotelo on www.boxenclosures.com tekemä malli 101-42-4A-R-BL
http://www.boxenclosures.com/category/product_details.html?product__id=259125
Tekniset tiedot löytyvät täältä http://www.boxenclosures.com/technical_drawings/MBM.pdf

Ohjelmakoodi on käännetty c-kielellä CCS/PCM 5.04 kääntäjällä ja ladattu PICKIT2 USB-ohjelmointiohjelmalla.
http://www.ccsinfo.com/

Toimiiko?

Toimii, mutta aluksi oli kaiutin ja sen kanssa sarjassa oli 100R vastus, jota transistori ohjasi.
Ääni oli liian pieni. Muutin vastuksen 47R. Nyt ääni oli jo kohtuullisesti kuultava, mutta edelleen liian pieni.

Laitoin Flims-merkkisestä taskuradiosta kaiutinmuuntajan (muuntosuhde 600:8 ohm) ja otin 100 ohmin vastuksen pois. Ääni oli jo kohtuullinen. Sitä saisi vielä voimakkaammaksi, jos tekisi kaiuttimen kohdalle muutaman reiän.

Tässä on timerin lohkokaavio

timer.jpg

Tässä on timerin kytkentäkaavio

timer1.jpg

Tässä on ohjelmakoodit

Tässä on LCD.c ohjelma
http://remotesmart.wikidot.com/local--files/timer/LCD.C
ja tässä on pääohjelma

http://remotesmart.wikidot.com/local--files/timer/timeri1.C

Tässä on HEX-koodi

http://remotesmart.wikidot.com/local--files/timer/timeri1.hex

Tässä on laite toiselta puolelta
Johdot oikealle menevat sarjaliikententeelle

Timeri2.JPG

Tässä on piirilevyn kuva

timer3.jpg

29.11.2016 tein uuden timerin pojalleni

Timeri2a.JPG

Siinä oli äänilähteenä LM386 mikropiiri, koska ei enään löytynyt audiomuuntajaa pääteasteelle.
Ei ääni kovin paljon isompi ollut, mutta riittävä.

Tässä oli prosessorina PIC18F252 + 10MHz resonaattori, koska tälläinen piirikortti + LCD löytyi valmiina.
Tässä on myös LM386 sähkön laitto päälle transistorilla (PNP), jotta pariston kesto riittäisi kauemmin.
Kotelokin on hieman erilainen.

Neljä 1.5V paristoa tarvittiin tähänkin.

Käynnistysnapin yli laitoin 0.1uF kondensaattori, jotta LCD ei menisi yksiriviseen modeen.
Tämä johtuu painonapin värähtelystä.

Tein myöhemmin ohjelmaan pienen parannuksen eli laitoin 100ms viiveen alkuun enenkuin LCD lähtee päälle.

Pekka OH3GDO

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License