'------------------------------------------------------------------------------- ' ' Regulator pro lampicku ' ---------------------- ' ' Po zapnuti napajeni se rozsviti zarovka z nuly na jas urceny potenciometrem a ' zustane svitit. Sviti do vypnuti napajeni nebo do stisknuti tlacitka POH. ' Behem sviceni lze potenciometrem menit jas zarovky od minima do maxima. ' Po stisknuti POH zarovka postupne zhasne a zacne blikat LEDka. ' Ta blika "mekce" pomoci PWM a v tomto stavu lampicka zustane do stisknuti ' tlacitka ZAP. Kdy se zarovka opet postupne rozsviti. Stisknuti tlacitka POH v ' pohotovostnim rezimu nema zadny vyznam. Zrovna tak stisknuti tlacitka ZAP v ' rezimu sviceni. ' ' ------------------------------------------------------------------------------ ' Zapojeni: ' -------- ' ' Zarovka je pripojena na portu B.1 coz je zaroven PWM kanal B (pin 6) ' LEDka je pripojena na portu B.0 coz je zaroven PWM kanal A (pin 5) ' Tlacitko ZAP je pripojene na pinu B.2 proti GND (port ma Pul-Up) (pin 7) ' Tlacitko POH je pripojene na pinu B.4 proti GND (port ma Pul-Up) (pin 3) ' Potenciometr je pripojeny mezi Ucc a GND, jeho vystup je na pinu B.3 (pin 2) ' Reset je zapojeny proti Ucc pres odpor (kvuli programovani je povolen) (pin 1) ' Napajeni je 5V stabilizovanych (pin 8) ' Spolecna zem (pin 4) ' ' ------------------------------------------------------------------------------ ' ' Licence: ' ------- ' ' Copyright(c) 2008 Sasa Svobodova ' ' Tento program je svobodný software; můžete jej šířit a modifikovat podle ' ustanovení GNU General Public License, vydávané Free Software Foundation. ' ' Tento program je rozšiřován v naději, že bude užitečný, avšak ' BEZ JAKÉKOLI ZÁRUKY; neposkytují se ani odvozené záruky PRODEJNOSTI anebo ' VHODNOSTI PRO URČITÝ ÚČEL. Další podrobnosti hledejte ve ' GNU General Public License. ' ' Kopii GNU General Public License jste měl/a obdržet spolu s tímto ' programem. Pokud se tak nestalo, napište si o ni Free Software Foundation, ' Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ' ' ------------------------------------------------------------------------------ ' ' Nastaveni programatoru: ' ---------------------- ' ' LOCK BITS - nerozhoduje, lze cokoli. Jen pozor na pripadne aktualizace! ' EESAVE - pri programovani musi byt "NOT PRESERVED" ! ' WDTON - nerozhoduje, program jej stejne zapne. ' CLKDIV8 - DISABLE ' SUT - 14CLK + 64ms. Vlastne je to jedno, ale pri pomalejsim nabehu ' napeti je to lepsi, procesor se rozbehne korektne. ' CKSEL - Interni RC 9.6 MHz (lze i jine, ale pak je potreba zmenit ' direktivu $CRYSTAL podle toho, co chci. ' SELFPRGEN - nerozhoduje, lepsi je dat DISABLE kvuli ochrane pameti programu. ' DWEN - DISABLE ' BODLEVEL - 4.3V, kdyz se da mensi, muze pak zlobit regulace. ' procesor jeste pobezi, ale lampa nebude svitit, protoze se ' uz neotevre ridici FET. ' RSTDISB - nastavit na "RESET", jinak nelze dale programovat pres ISP! ' Pokud se zapne "I/O" je pri aktualizaci FirmWaru nutne pouzit ' vysokonapetovy programator. ' ' ------------------------------------------------------------------------------ ' Zmeny ve verzich: ' ---------------- ' ' v 1.0 - prvni verze programu ' v 1.01 - doplnena komunikace s EEPROM (parametry, jen se cte) ' v 1.02 - snizena frekvence PWM z 18kHz na 280Hz ' v 1.03 - doplneno hlidani maxima jasu a moznost rozdilnych ' rychlosti nabehu a dobehu jasu zarovky ' ' ------------------------------------------------------------------------------ ' ' ------------------------------------------------------------------------------ ' ------------------------- Nastaveni prekladace ------------------------------- ' ------------------------------------------------------------------------------ $regfile = "ATtiny13.dat" ' pouzity procesor '$crystal = 128000 ' frekvence oscilatoru 128kHz '$crystal = 4800000 ' frekvence oscilatoru 4.8MHz $crystal = 9600000 ' frekvence oscilatoru 9.6MHz $hwstack = 32 $swstack = 8 $framesize = 40 ' ------------------------------------------------------------------------------ ' --- Konfigurace procesoru a periferii ---------------------------------------- ' ------------------------------------------------------------------------------ Config Portb.0 = Output ' Pin B.0 jako vystup (LEDka) Config Portb.1 = Output ' Pin B.1 jako vystup (zarovka) Config Portb.2 = Input ' Pin B.2 jako vstup (tlacitko ZAP) Config Portb.4 = Input ' Pin B.4 jako vstup (tlacitko STB) Set Portb.4 ' zapnuti Pul-Up odporu Set Portb.2 ' zapnuti Pul-Up odporu Config Adc = Single , Prescaler = 2 , Reference = Avcc ' nastaveni ADC Config Watchdog = 8192 ' nastaveni WD na asi 64ms ' ------------------------------------------------------------------------------ ' --- Dimenzovani promennych, konstanty a aliasy ------------------------------- ' ------------------------------------------------------------------------------ Dim Jas As Integer ' Hodnota JASu Dim X As Byte ' pomocna promenna Dim Rychlost_n As Byte ' rychlost nabehu zarovky Dim Rychlost_d As Byte ' rychlost dobehu zarovky Dim Rychlost_l As Byte ' rychlost nabehu a dobehu LEDky Dim Maximum As Byte ' maximalni jas zarovky Dim Minimum As Byte ' minimalni jas zarovky Dim Min_led As Byte ' minimalni jas LEDky Dim Max_led As Byte ' maximalni jas LEDky Readeeprom Rychlost_n , 0 ' precteni dat z EEPROM Readeeprom Rychlost_d , 1 ' precteni dat z EEPROM Readeeprom Rychlost_l , 2 Readeeprom Minimum , 3 Readeeprom Maximum , 4 ' precteni dat z EEPROM Readeeprom Min_led , 5 Readeeprom Max_led , 6 ' hotovo Tlacitko_poh Alias Pinb.4 Tlacitko_zap Alias Pinb.2 ' ------------------------------------------------------------------------------ ' ---------------------------- Hlavni program ---------------------------------- ' ------------------------------------------------------------------------------ ' ------------------------------------------------------------------------------ ' --- Rozsviceni zarovky ------------------------------------------------------- ' ------------------------------------------------------------------------------ Start Adc Start Watchdog ' spusteni prevodu ADC ' spusteni casovace Watchdog Sviceni: Config Timer0 = Pwm , Prescale = 64 , Compare B Pwm = Clear Down ' nastaveni casovace pro PWM "B" Jas = Getadc(3) ' precteni hodnoty ADC Shift Jas , Right , 2 ' uprava hodnoty ADC (posuv do prava o 2 bity coz je deleni 4) If Jas < Minimum Then Jas = Minimum For X = 0 To Jas ' postupny nabeh jasu Pwm0b = X Waitms Rychlost_n ' rychlost nabehu Reset Watchdog ' vymazani watchdogu Next X ' hotovo ' ------------------------------------------------------------------------------ ' --- Regulace jasu ------------------------------------------------------------ ' ------------------------------------------------------------------------------ While Tlacitko_poh = 1 ' dokud neni stisknute tlacitko POH, bezi smycka Jas = Getadc(3) ' precteni hodnoty z ADC Shift Jas , Right , 2 ' uprava hodnoty If Jas < Minimum Then Jas = Minimum ' omezeni rozsahu regulace If Jas > Maximum Then Jas = Maximum Pwm0b = Jas ' vlastni regulace jasu Reset Watchdog ' vymazani watchdogu Wend ' konec smycky ' ------------------------------------------------------------------------------ ' --- Zhasnuti a prechod do pohotovosti ---------------------------------------- ' ------------------------------------------------------------------------------ For X = Jas To 0 Step -1 ' zhasnuti zarovky Pwm0b = X Waitms Rychlost_d ' rychlost dobehu Reset Watchdog ' vymazani watchdogu Next X ' hotovo Config Timer0 = Pwm , Prescale = 64 , Compare A Pwm = Clear Down ' nastaveni casovace pro PWM "A" ' ------------------------------------------------------------------------------ ' --- Pohotovostni stav -------------------------------------------------------- ' ------------------------------------------------------------------------------ For X = 0 To Min_led ' Prvni rozsviceni LEDky je od 0 Pwm0a = X ' aby se rozsvitila postupne Waitms Rychlost_l Reset Watchdog ' vymazani watchdogu Next X ' hotovo Do If Tlacitko_zap = 1 Then ' pokud neni stisknute tlacitko, postupe rozsvitim LEDku For X = Min_led To Max_led ' blikani je od minima do maxima Pwm0a = X Waitms Rychlost_l ' rychlost nabehu If Tlacitko_zap = 0 Then Exit For ' pokud stisknu tlacitko, ukoncim beh Reset Watchdog ' vymazani watchdogu Next X ' hotovo End If If Tlacitko_zap = 1 Then ' pokud neni stisknut tlacitko, postupne zhasnu LEDku For X = Max_led To Min_led Step -1 Pwm0a = X Waitms Rychlost_l ' rychlost dobehu If Tlacitko_zap = 0 Then Exit For ' pokud jej stisknu, ukoncim beh Reset Watchdog ' vymazani watchdogu Next X End If If Tlacitko_zap = 0 Then Exit Do ' pokud je tlacitko stale stisknute, ukoncim smycku Loop Goto Sviceni ' prechod do sviceni ' ------------------------------------------------------------------------------ ' ------------------------------ Konec programu -------------------------------- ' ------------------------------------------------------------------------------ End ' ------------------------------------------------------------------------------ ' ---------------------------- Obsah pameti EEPROM ----------------------------- ' ------------------------------------------------------------------------------ ' ' Soubor REGULATOR.EPP je ve formatu IntelHex. ' Soubor je nutne vypalit do EEPROM ATtinnky, jinak regulator nefunguje. ' Pokud programator chce jiny format, tak zrusit direktivu $EEPROMHEX, soubor ' pak bude v binarnim formatu. $eepromhex ' volba IntelHex $eeprom ' data jsou pro EEPROM Data 009 , 003 , 005 , 020 , 240 , 050 , 150 ' | | | | | | | ' | | | | | | \------------------ Maximum LEDky ' | | | | | \------------------------ Minimum LEky ' | | | | \----------------------------- Maximum ZAROVKY ' | | | \----------------------------------- Minimum ZAROVKY ' | | \----------------------------------------- Rychlost LEDky ' | \----------------------------------------------- Doba dobehu ZAROVKY ' \----------------------------------------------------- Doba nabehu ZAROVKY