//Designs/Tools/reflow01A/SW/clock.c |
---|
0,0 → 1,35 |
/* mija 2009 |
SW pro ATmega8 mereni + regulace teploty |
Fosc = 8192000Hz externi krystal |
ver.: 0.0 - start |
*/ |
#include <avr/io.h> |
#include "clock.h" |
void ClockInit(uint8_t hour,uint8_t min,uint8_t sec,Clockt_t *clock) |
{ |
clock->hour = hour; |
clock->min = min; |
clock->sec = sec; |
} |
void ProcesClock(uint8_t *tik,Clockt_t *clock) |
{ |
if (!*tik) |
{ |
*tik = TIKSOFSEC; //125 |
if (++clock->sec == 60) |
{ |
clock->sec = 0; |
if (++clock->min == 60) |
{ |
clock->min = 0; |
clock->hour++; |
} |
} |
} |
} |
//Designs/Tools/reflow01A/SW/clock.h |
---|
0,0 → 1,25 |
/* mija 2009 clock |
usage: |
1. declare Clock_t clock |
2. define TIKOFSEC - tiks per sec in any timers interrupts proderude |
3. periodicaly polling ProsecClock(), for precisions 1 of TIKOFSEC |
ver.: 0.0 - start |
*/ |
#ifndef __clock_h_included__ |
#define __clock_h_included__ |
#define TIKSOFSEC 125 |
typedef struct Clockt{ |
uint8_t hour; |
uint8_t min; |
uint8_t sec; |
}Clockt_t; |
void ProcesClock(uint8_t *tik,Clockt_t *clock); |
void ClockInit(uint8_t hour,uint8_t min,uint8_t sec,Clockt_t *clock); |
#endif /* __clock_h_included__ */ |
//Designs/Tools/reflow01A/SW/default/reflow.hex |
---|
0,0 → 1,484 |
:1000000014C02EC02DC02CC02BC02AC029C028C0AF |
:1000100027C031C025C024C023C022C021C020C0B9 |
:100020001FC01EC01DC0280C010611241FBECFE535 |
:10003000D4E0DEBFCDBF11E0A0E6B0E0EAE9FCE12C |
:1000400002C005900D92A23EB107D9F711E0A2EED1 |
:10005000B1E001C01D92A93FB107E1F740D01BCE2E |
:10006000CFCF20E038E004C0F9013197F1F70197D4 |
:100070000097D1F708951F920F920FB60F92112497 |
:100080008F9380916000882329F0809160008150D7 |
:10009000809360008F910F900FBE0F901F90189566 |
:1000A00084E083BF89B7816089BF82E087B986EC2D |
:1000B00086B9089520E030E040E03498369A349BC9 |
:1000C000FECF84B195B1280F391F4F5F4032A9F799 |
:1000D00085E0359527958A95E1F7C90108958F92B6 |
:1000E0009F92AF92BF92CF92DF92EF92FF921F93B7 |
:1000F000DF93CF93CDB7DEB76A970FB6F894DEBF24 |
:100100000FBECDBF84E083BF89B7816089BF82E025 |
:1001100087B986EC86B98F9A979824E630E040E05C |
:1001200058E003C0CA010197F1F7215030408FEF2A |
:100130002F3F3807B9F719821B821A8292D049D40F |
:1001400080E060E040E09E012C5F3F4FA5D47894B2 |
:1001500010E057E0E52EF12CEC0EFD1E44E0C42E1D |
:10016000D12CCC0EDD1E4E010894811C911C32E076 |
:10017000A32EB12CAC0EBD1E113071F0113030F039 |
:10018000123089F01330B1F010E01BC04A815B815E |
:10019000C701698175D214C04A815B81C701698139 |
:1001A000960104D30DC04A815B81C7016981960124 |
:1001B000FCD106C04A815B81C701698196018AD161 |
:1001C000182F8F81882311F0C70145D1C40106D4AF |
:1001D00080E690E0B60165D420E030E040E034985D |
:1001E000369A349BFECF84B195B1280F391F4F5FEB |
:1001F0004032A9F7C90125E0959587952A95E1F741 |
:10020000B501ECD0B9CF899A8A9A889AA59A8C9A26 |
:100210008B9A0895919892989098AD9880FD919AB4 |
:1002200081FD929A82FD909A83FDAD9A949A82E024 |
:100230008A95F1F7949808951F93182F82958F70DF |
:10024000E9DF812FE7DF8DE68A95F1F71F910895A9 |
:10025000939AF2DF0895FCDF08959398EDDF939A67 |
:1002600008950F931F93CF93DF93899A8A9A889A60 |
:10027000A59A8C9A8B9A80E090EA0197F1F794986E |
:10028000939800E010E1C8010197F1F783E0C2DF25 |
:10029000C8010197F1F783E0BDDFC8010197F1F7CD |
:1002A00083E0B8DF1DE6812F8A95F1F782E0B2DFA7 |
:1002B0001A95F1F706E210E0C0E0D0E1F801849170 |
:1002C000CCDFCE010197F1F70F5F1F4FF0E009324D |
:1002D0001F07A1F7DF91CF911F910F91089581E042 |
:1002E000BCDF80E090E10197F1F708958150623022 |
:1002F00009F4805C8068B1DF08959C018091D6008C |
:1003000081508093D600882379F484E68093D600C8 |
:100310008091E4018F5F8093E401803128F0109296 |
:10032000E40181E08093E201C9010F976817790722 |
:1003300058F48FE08093E3017093E6016093E50148 |
:1003400081E08093D5003BC08091D500882329F0BF |
:100350001092E3011092D50032C08091E20188230F |
:1003600071F11092E2016217730758F06217730778 |
:1003700011F18091E5019091E60186179707D8F475 |
:1003800013C08091E5019091E6018617970730F040 |
:100390008091E3018F3078F48F5F0BC0AB01481B75 |
:1003A000590B4630510538F08091E301882319F04C |
:1003B00081508093E3017093E6016093E501621739 |
:1003C000730750F49091E3019F3021F08091E40194 |
:1003D000891710F4979A0895979808950F931F938B |
:1003E0008B01A0E0B0E0BC01CD01FBD620E030EEF7 |
:1003F00042E155E409D520E030E040E85AE304D575 |
:1004000020E030E04AE754ECF4D520E030E040E86A |
:100410005FE3D3D42AE03FEB4BE156E3F5D424EB82 |
:100420003DE140E857E3C9D4BEDB29ED3EE040E8BA |
:100430005BE398D420E030E040E05FE3E5D42AE0DD |
:100440003FEB4BE155EBD5D57BD6F801718360834B |
:100450001F910F910895EF92FF921F93CF93DF9317 |
:100460007C01C0E0D0E0F701EC0FFD1F80818A30F5 |
:1004700051F08B301CF4882329F11FC08C3051F0CF |
:100480008D30D9F403C081E062E002C081E061E018 |
:100490002DDF14C081E061E029DF10E080E2DBDEC7 |
:1004A0001F5F1830D9F781E062E020DF10E080E2C2 |
:1004B000D2DE1F5F1830D9F7E9CFCDDE2196C431E7 |
:1004C000D10589F6F7011082DF91CF911F91FF903E |
:1004D000EF900895CF92DF92FF920F931F93CF93E7 |
:1004E000DF936C01F62E8A01E9018091E8018823EF |
:1004F00051F489E78093E80180E060E040E0CCD2ED |
:1005000081E08093E70180E590E0B801F6DE81E0CC |
:10051000F81631F48091E8018B5F8093E80106C002 |
:1005200092E0F91619F41092E80136C02A81809100 |
:10053000E701821749F02093E701222329F48091F3 |
:10054000E80181508093E801ADB7BEB718970FB6A8 |
:10055000F894BEBF0FBEADBFEDB7FEB73196129691 |
:10056000DC92CE92119781E690E09383828315838B |
:1005700004838091E801868317824BD88DB79EB79C |
:1005800008960FB6F8949EBF0FBE8DBF8091E8010C |
:10059000882311F083E001C080E0DF91CF911F91AB |
:1005A0000F91FF90DF90CF900895CF92DF92FF924E |
:1005B0000F931F93CF93DF936C01F62E8A01E9010D |
:1005C0008091EA01882351F480E18093EA0180E080 |
:1005D00060E040E061D281E08093E90186E490E050 |
:1005E000B8018BDE81E0F81631F48091EA018B5F6F |
:1005F0008093EA0106C092E0F91619F41092EA011C |
:1006000036C02A818091E901821749F02093E901DF |
:10061000222329F48091EA0181508093EA01ADB749 |
:10062000BEB718970FB6F894BEBF0FBEADBFEDB7FB |
:10063000FEB731961296DC92CE92119781E690E049 |
:1006400093838283158304838091EA0186831782D2 |
:10065000E0D78DB79EB708960FB6F8949EBF0FBE31 |
:100660008DBF8091EA01882311F082E001C080E013 |
:10067000DF91CF911F910F91FF90DF90CF90089560 |
:10068000CF93DF939C01EA019798613029F460933E |
:10069000D8008091D90087C0623091F48091D90050 |
:1006A000823019F0833039F402C083E001C081E068 |
:1006B0008093D90002C06093D90081E08093D80074 |
:1006C0008091D800882309F444C08091D9008230F9 |
:1006D00019F08330F9F40FC000D000D000D0EDB78E |
:1006E000FEB73196ADB7BEB712963C932E931197D5 |
:1006F0008CE690E01DC000D000D000D0EDB7FEB772 |
:100700003196ADB7BEB712963C932E9311978DE7F5 |
:1007100090E00EC000D000D000D0EDB7FEB731960B |
:10072000ADB7BEB712963C932E9311978AE890E02E |
:1007300093838283D583C4836CD72DB73EB72A5F5A |
:100740003F4F0FB6F8943EBF0FBE2DBF1092D8009A |
:1007500007C08091F3019091F401C817D90711F4F3 |
:1007600080E021C000D000D000D0EDB7FEB73196B8 |
:10077000ADB7BEB712963C932E9311978AE990E0DD |
:1007800093838283D583C48344D7D093F401C093E9 |
:10079000F30180E02DB73EB72A5F3F4F0FB6F894C4 |
:1007A0003EBF0FBE2DBFDF91CF9108950F931F93D2 |
:1007B000CF93DF93EC018901662309F0E5C08091B6 |
:1007C000F201813021F1813038F0823009F46FC0BC |
:1007D000833009F0D8C0B0C01092D7001092EF015A |
:1007E0001092F1011092F00181E08093F20180E01B |
:1007F00060E040E051D18FEF8093ED011092EC0169 |
:100800001092EB01CE016FE970E0FCD6C1C0443616 |
:100810005105D0F08093EF014E375105A8F0809339 |
:10082000F0014639510580F082E08093F201109288 |
:10083000EF011092EE011092F0018091D7008093A9 |
:10084000F1011092D700A4C08091F0018823B1F08B |
:100850008091F101823390F48091EB019091EC0151 |
:100860004817590758F09798D80112968C9182FF33 |
:1008700006C05093EC014093EB0101C0979AEDB78D |
:10088000FEB738970FB6F894FEBF0FBEEDBF319696 |
:10089000ADB7BEB71296DC93CE93119781EA90E084 |
:1008A00093838283558344838091D7003EC0473B26 |
:1008B000510540F081E08093EF014E3C510510F06E |
:1008C0008093EE018091EE01882369F09798483B70 |
:1008D000510550F483E08093F20181E08093D700CA |
:1008E0001092EF0155C0979A8091EF01882321F073 |
:1008F0008091D7008093F1018DB79EB708970FB60E |
:10090000F8949EBF0FBE8DBFEDB7FEB73196ADB761 |
:10091000BEB71296DC93CE93119784EB90E093834D |
:100920008283558344838091F1018683178271D637 |
:10093000EDB7FEB7389621C0979881E08093EF011C |
:100940008091D700882319F41092F2013DC000D0A5 |
:1009500000D000D0EDB7FEB73196ADB7BEB7129656 |
:10096000DC93CE93119787EC90E093838283558339 |
:1009700044834FD6EDB7FEB736960FB6F894FEBF58 |
:100980000FBEEDBF05C097981092F20180E01CC029 |
:10099000D80112962C918091ED018217A1F020933D |
:1009A000ED018091EF01882329F08091D7008F5FBE |
:1009B0008093D7008091F001882329F08091F10184 |
:1009C0008F5F8093F10181E0DF91CF911F910F91B3 |
:1009D0000895A098A89AA198A99A0895FC0183B3B4 |
:1009E000999902C022E003C0282F20952170989980 |
:1009F00002C0999B23E08091F8018130A9F08130F9 |
:100A000020F0823009F044C029C0222309F442C0FA |
:100A10002093F70185E090E09093F6018093F50133 |
:100A200081E08093F80136C08091F5019091F60144 |
:100A300001979093F6018093F501892B59F58091E8 |
:100A4000F701281729F5208388EC90E09093F601B0 |
:100A50008093F50182E08093F80108958091F5017B |
:100A60009091F60101979093F6018093F5013091F2 |
:100A7000F701892B19F0231759F40CC0231741F4FF |
:100A8000208384E690E09093F6018093F501089529 |
:100A90001092F80110820895F901808361834283E6 |
:100AA0000895DC01FB018C91882389F48DE78C93F8 |
:100AB00082818F5F82838C3351F4128281818F5FB8 |
:100AC00081838C3321F4118280818F5F808308952C |
:100AD000A0E0B0E0EDE6F5E02BC8DC012B01FA0167 |
:100AE0009C91923008F439C1EB018881823008F47E |
:100AF00033C1943069F4843009F02FC111969C9170 |
:100B000011978981981709F428C1AAEDB0E025C191 |
:100B1000843009F421C18230A9F4923009F01DC15A |
:100B20009A01AD0188E0EA010990AE01E90109925C |
:100B30009E018150C1F7E201898111969C91892320 |
:100B4000818308C1923009F407C112962D903C9020 |
:100B50001397EB018A819B811496AD90BD90CD9047 |
:100B6000DC901797EC80FD800E811F819101281B7E |
:100B7000390BB90137FF04C066277727621B730B57 |
:100B8000603271050CF061C0121613066CF5370166 |
:100B90004801062E04C096948794779467940A942B |
:100BA000D2F721E030E040E050E004C0220F331FD4 |
:100BB000441F551F6A95D2F72150304040405040A5 |
:100BC0002E213F2140235123211531054105510597 |
:100BD00021F021E030E040E050E079018A01E62890 |
:100BE000F728082919293CC0232BD1F1260E371EDE |
:100BF00035014601062E04C0969487947794679435 |
:100C00000A94D2F721E030E040E050E004C0220F27 |
:100C1000331F441F551F6A95D2F721503040404082 |
:100C200050402A213B214C215D21211531054105F0 |
:100C3000510521F021E030E040E050E059016A0127 |
:100C4000A628B728C828D9280BC0821593052CF0F0 |
:100C50001C01AA24BB24650103C0EE24FF248701E4 |
:100C600011969C91D20111968C91981709F445C068 |
:100C7000992339F0A80197012A193B094C095D090C |
:100C800006C0A60195012E193F09400B510B57FDD7 |
:100C900008C011823382228224833583468357839E |
:100CA0001DC081E081833382228288279927DC015D |
:100CB000821B930BA40BB50B84839583A683B78308 |
:100CC0000DC0220F331F441F551F248335834683D5 |
:100CD0005783828193810197938382832481358115 |
:100CE00046815781DA01C9010197A109B1098F5FD6 |
:100CF0009F4FAF4FBF4328F30BC0918333822282B3 |
:100D0000EA0CFB1C0C1D1D1DE482F5820683178373 |
:100D100083E08083248135814681578157FF1AC043 |
:100D2000C901AA2797FDA095BA2F81709070A07075 |
:100D3000B0705695479537952795822B932BA42B0A |
:100D4000B52B84839583A683B78382819381019693 |
:100D500093838283DF0101C0D201CD01CDB7DEB71D |
:100D6000E2E102C7A0E2B0E0E7EBF6E0EDC669839E |
:100D70007A838B839C832D833E834F835887E9E05E |
:100D8000EE2EF12CEC0EFD1ECE010196B701C2D362 |
:100D90008E010F5E1F4FCE010596B801BBD38A8925 |
:100DA00091E089278A8BC701B801AE01475E5F4F8A |
:100DB0008FDEDBD2A096E6E0E3C6A0E2B0E0E2EE92 |
:100DC000F6E0C2C669837A838B839C832D833E833E |
:100DD0004F835887F9E0EF2EF12CEC0EFD1ECE016B |
:100DE0000196B70197D38E010F5E1F4FCE01059676 |
:100DF000B80190D3C701B801AE01475E5F4F68DE0E |
:100E0000B4D2A096E6E0BCC6A0E2B0E0E9E0F7E02C |
:100E10008FC669837A838B839C832D833E834F8324 |
:100E20005887CE010196BE01675F7F4F73D3CE0115 |
:100E30000596BE016F5E7F4F6DD39985923088F025 |
:100E400089898230C8F0943019F4823051F404C09A |
:100E5000843029F4923081F48AED90E0C6C092305B |
:100E600049F420E09A858A89981321E02A87CE01E7 |
:100E70000996BBC0823049F420E09A858A8998138C |
:100E800021E02A8BCE014196B0C02D843E844F8450 |
:100E900058886D887E888F88988CEE24FF2487017F |
:100EA000AA24BB24650140E050E060E070E0E0E08F |
:100EB000F0E0C10181709070892BE9F0E60CF71C1D |
:100EC000081D191D9A01AB012A0D3B1D4C1D5D1D0E |
:100ED00080E090E0A0E0B0E0E614F7040805190512 |
:100EE00020F481E090E0A0E0B0E0BA01A901480F51 |
:100EF000591F6A1F7B1FAA0CBB1CCC1CDD1C97FE54 |
:100F000008C081E090E0A0E0B0E0A82AB92ACA2A8F |
:100F1000DB2A3196E032F10549F0660C771C881C1B |
:100F2000991C5694479437942794C3CFFA85EA893D |
:100F30002B893C898B859C85280F391F2E5F3F4F5D |
:100F400017C0CA0181709070892B61F016950795C2 |
:100F5000F794E79480E090E0A0E0B0E8E82AF92A6E |
:100F60000A2B1B2B76956795579547952F5F3F4F1B |
:100F700077FDE7CF0CC0440F551F661F771F17FD85 |
:100F80004160EE0CFF1C001F111F2150304040300B |
:100F900090E0590790E0690790E4790760F32B8FA0 |
:100FA0003C8FDB01CA018F779070A070B0708034E5 |
:100FB0009105A105B10561F447FD0AC0E114F104F2 |
:100FC0000105110529F0405C5F4F6F4F7F4F40785E |
:100FD0001A8EFE1711F081E08A8F4D8F5E8F6F8F12 |
:100FE00078A383E0898FCE014996BFD1A096E2E134 |
:100FF000BBC5A8E1B0E0EEEFF7E0A2C569837A8354 |
:101000008B839C832D833E834F835887B9E0EB2EDF |
:10101000F12CEC0EFD1ECE010196B7017BD28E01A4 |
:101020000F5E1F4FCE010596B80174D2298522307C |
:1010300008F47EC03989323010F4B8017CC08A854A |
:101040009A8989278A87243011F0223031F42317B6 |
:1010500009F06EC06AED70E06EC0343039F41D8660 |
:101060001E861F86188A1C861B8604C0323021F417 |
:1010700084E08987B7015FC02B853C858B899C897B |
:10108000281B390B3C872B87ED84FE840F8518893C |
:10109000AD88BE88CF88D88CEA14FB040C051D05EA |
:1010A00040F4EE0CFF1C001F111F215030403C8704 |
:1010B0002B8720E030E040E050E080E090E0A0E0CE |
:1010C000B0E460E070E0EA14FB040C051D0540F09C |
:1010D000282B392B4A2B5B2BEA18FB080C091D091E |
:1010E000B695A79597958795EE0CFF1C001F111FCD |
:1010F0006F5F7F4F6F31710531F7DA01C9018F776B |
:101100009070A070B07080349105A105B10561F4B4 |
:1011100027FD0AC0E114F1040105110529F0205C46 |
:101120003F4F4F4F5F4F20782D873E874F87588B1B |
:10113000BE01675F7F4FCB0118D16896EAE01CC5FE |
:10114000ACE0B0E0E5EAF8E003C569837A838B831D |
:101150009C83CE010196BE016B5F7F4FDBD18D81F9 |
:10116000823061F1823050F1843021F48E81882305 |
:1011700051F12EC02F81388537FD20C06E812F316F |
:1011800031051CF06623F9F023C08EE190E0821B4C |
:10119000930B29853A854B855C8504C05695479508 |
:1011A000379527958A95D2F76623B1F050954095EB |
:1011B000309521953F4F4F4F5F4F0EC020E030E0FC |
:1011C00040E050E009C02FEF3FEF4FEF5FE704C072 |
:1011D00020E030E040E050E8B901CA012C96E2E09E |
:1011E000D3C4A8E0B0E0E6EFF8E0AAC47B018C012C |
:1011F000611571058105910519F482E089835FC04D |
:1012000083E089838EE1C82ED12CDC82CB82ED82F3 |
:10121000FE820F831887C801B70158D0FC013197AF |
:10122000F7FF3BC0222733272E1B3F0B57016801D6 |
:10123000022E04C0D694C794B794A7940A94D2F708 |
:1012400040E050E060E070E081E090E0A0E0B0E0DD |
:1012500004C0880F991FAA1FBB1F2A95D2F70197B8 |
:10126000A109B1098E219F21A023B1230097A105D7 |
:10127000B10521F041E050E060E070E04A295B29CF |
:101280006C297D294D835E836F8378878EE190E0A2 |
:101290008E1B9F0B9C838B8312C0309781F00E2E88 |
:1012A00004C0EE0CFF1C001F111F0A94D2F7ED8240 |
:1012B000FE820F831887CE1ADF0ADC82CB821A8265 |
:1012C000CE01019652D02896EAE056C4EF92FF92E2 |
:1012D0000F931F937B018C0180E0E81680E0F806F5 |
:1012E00081E0080780E0180788F48FEFE816F10422 |
:1012F0000105110531F028F088E090E0A0E0B0E0B1 |
:1013000017C080E090E0A0E0B0E012C080E0E816F6 |
:1013100080E0F80680E0080781E0180728F088E1FF |
:1013200090E0A0E0B0E004C080E190E0A0E0B0E098 |
:1013300020E230E040E050E0281B390B4A0B5B0B09 |
:1013400004C016950795F794E7948A95D2F7F701AC |
:10135000EE51FF4F8081281B310941095109C90114 |
:101360001F910F91FF90EF900895DF92EF92FF92FF |
:101370000F931F93FC01E480F58006811781D180D3 |
:101380008081823048F480E090E0A0E1B0E0E82A7B |
:10139000F92A0A2B1B2BA5C0843009F49FC0823088 |
:1013A00021F4EE24FF24870105C0E114F1040105B6 |
:1013B000110519F4E0E0F0E096C0628173819FEFBF |
:1013C000623879070CF05BC022E83FEF261B370B31 |
:1013D0002A3131052CF020E030E040E050E02AC016 |
:1013E000B801A701022E04C07695679557954795D9 |
:1013F0000A94D2F781E090E0A0E0B0E004C0880F4A |
:10140000991FAA1FBB1F2A95D2F70197A109B109FD |
:101410008E219F21A023B1230097A105B10521F0C2 |
:1014200081E090E0A0E0B0E09A01AB01282B392BDD |
:101430004A2B5B2BDA01C9018F779070A070B070D6 |
:1014400080349105A105B10539F427FF09C0205C5E |
:101450003F4F4F4F5F4F04C0215C3F4F4F4F5F4F97 |
:10146000E0E0F0E02030A0E03A07A0E04A07A0E486 |
:101470005A0710F0E1E0F0E079018A0127C06038F6 |
:10148000710564F5FB01E158FF4FD801C7018F7763 |
:101490009070A070B07080349105A105B10539F449 |
:1014A000E7FE0DC080E490E0A0E0B0E004C08FE370 |
:1014B00090E0A0E0B0E0E80EF91E0A1F1B1F17FF26 |
:1014C00005C016950795F794E794319687E0169531 |
:1014D0000795F794E7948A95D1F705C0EE24FF2489 |
:1014E0008701EFEFF0E06E2F679566276795902FE5 |
:1014F0009F77D794DD24D7948E2F8695492F462B3E |
:10150000582F5D29B701CA011F910F91FF90EF90ED |
:10151000DF900895FC01DB01408151812281622F1F |
:101520006F7770E0221F2227221F9381892F880F57 |
:10153000822B282F30E0991F9927991F11969C9391 |
:10154000119721153105A9F5411551056105710561 |
:1015500011F482E037C082E89FEF13969C938E933C |
:1015600012979A01AB0167E0220F331F441F551FEA |
:101570006A95D1F783E08C930DC0220F331F441F6F |
:10158000551F12968D919C911397019713969C93DA |
:101590008E931297203080E0380780E0480780E47F |
:1015A000580758F314962D933D934D935C931797DA |
:1015B00008952F3F310579F44115510561057105F5 |
:1015C00019F484E08C93089564FF03C081E08C9348 |
:1015D00012C01C9210C02F57304013963C932E938C |
:1015E000129783E08C9387E0440F551F661F771F87 |
:1015F0008A95D1F7706414964D935D936D937C93A7 |
:1016000017970895FB01DC0101900D920020E1F78E |
:101610000895AEE0B0E0EEE0FBE098C20D891E89CF |
:1016200086E08C831A8309838FEF9FE79E838D83E7 |
:101630009E01275E3F4FCE0101966F89788DA901EB |
:1016400009D02F813885020F131FF80110822E96C2 |
:10165000E4E098C2ABE0B0E0EFE2FBE069C23C013D |
:101660002B015A01FC0117821682838181FD03C080 |
:101670006FEF7FEFB9C19AE0892E1E010894211CFB |
:10168000311CF3012381F20123FD859123FF819118 |
:101690002F01882309F4A5C1853239F423FD8591F2 |
:1016A00023FF81912F01853221F490E0B301B6D15F |
:1016B000E8CF982FFF24EE249924FFE1FF15D0F006 |
:1016C0009B3269F09C3228F4903259F0933291F4B5 |
:1016D0000EC09D3249F0903369F441E024C052E0DD |
:1016E000F52A84E0F82A28C098E0F92A25C0E0E12C |
:1016F000FE2A22C0F7FC29C0892F80538A3070F45B |
:10170000F6FE05C0989C902C1124980E15C0E89CFC |
:10171000E02C1124E80EF0E2FF2A0EC09E3229F4DC |
:10172000F6FC5FC140E4F42A07C09C3619F450E887 |
:10173000F52A02C0983649F4F20123FD959123FF62 |
:1017400091912F01992309F0B8CF892F85548330C7 |
:1017500018F08052833038F444E050E0A40EB51EF7 |
:101760005FE359830FC0933631F0933779F09335A7 |
:1017700009F052C01FC0F5018081898342E050E02A |
:10178000A40EB51E610101E010E011C0F501C0809A |
:10179000D180F6FC03C06FEF7FEF02C0692D70E0CF |
:1017A00042E050E0A40EB51EC6012DD18C015FE7CA |
:1017B000F52213C0F501C080D180F6FC03C06FEFA5 |
:1017C0007FEF02C0692D70E042E050E0A40EB51E2C |
:1017D000C6010ED18C0150E8F52AF3FE06C018C0F0 |
:1017E00080E290E0B3011AD1EA948E2D90E00817C0 |
:1017F0001907B0F30DC0F601F7FC8591F7FE819152 |
:101800006F0190E0B3010AD1E110EA940150104059 |
:101810000115110581F7E2C0943611F0993661F592 |
:10182000F7FE08C0F501208131814281538184E0B7 |
:1018300090E00AC0F501808191819C01442737FD29 |
:101840004095542F82E090E0A80EB91E9FE6F92241 |
:1018500057FF09C050954095309521953F4F4F4F08 |
:101860005F4FE0E8FE2ACA01B901A1012AE030E099 |
:1018700001D1D82ED2183FC0953729F41F2D1F7ED5 |
:101880002AE030E01DC01F2D197F9F3661F0903790 |
:1018900020F4983509F0A5C00FC0903739F098377B |
:1018A00009F09FC004C028E030E00AC0106114FDB8 |
:1018B000146020E130E004C014FD166020E132E045 |
:1018C00017FF08C0F501608171818281938144E036 |
:1018D00050E008C0F50180819181BC0180E090E07A |
:1018E00042E050E0A40EB51EA101C4D0D82ED218FB |
:1018F0008FE7F82EF122F6FE0BC05EEFF522D91429 |
:1019000038F4F4FE07C0F2FC05C08FEEF82202C0E6 |
:101910001D2D01C0192DF4FE0DC0FE01ED0DF11DB0 |
:101920008081803319F499EEF92208C01F5FF2FE1E |
:1019300005C003C08F2D867809F01F5F0F2DF3FCC3 |
:1019400013C0F0FE0EC01E1510F09D2C0AC09D2C79 |
:101950009E0C911A1E2D05C080E290E0B3015ED06E |
:101960001F5F1E15C8F304C01E1510F4E11A01C054 |
:10197000EE2404FF0EC080E390E0B3014FD002FFDD |
:101980001BC001FD03C088E790E00EC088E590E031 |
:101990000BC0802F867881F001FF02C08BE201C06E |
:1019A00080E2F7FC8DE290E0B30138D005C080E31F |
:1019B00090E0B30133D09A94D914C8F3DA94F101CA |
:1019C000ED0DF11D808190E0B30128D0DD20B1F74D |
:1019D00005C080E290E0B30121D0EA94EE20C9F77F |
:1019E00050CEF30166817781CB012B96E2E1BCC03A |
:1019F000FC010590615070400110D8F780959095DA |
:101A00008E0F9F1F0895FC016150704001900110DE |
:101A1000D8F7809590958E0F9F1F08950F931F9371 |
:101A2000CF93DF938C01EB018B8181FF1BC082FF81 |
:101A30000DC02E813F818C819D812817390764F468 |
:101A4000E881F9810193F983E88306C0E885F98587 |
:101A5000802F0995892B31F48E819F8101969F8378 |
:101A60008E8302C00FEF1FEFC801DF91CF911F914E |
:101A70000F910895FA01AA27283051F1203181F100 |
:101A8000E8946F936E7F6E5F7F4F8F4F9F4FAF4F86 |
:101A9000B1E03ED0B4E03CD0670F781F891F9A1F99 |
:101AA000A11D680F791F8A1F911DA11D6A0F711D4D |
:101AB000811D911DA11D20D009F468943F912AE059 |
:101AC000269F11243019305D3193DEF6CF01089541 |
:101AD000462F4770405D4193B3E00FD0C9F7F6CF72 |
:101AE000462F4F70405D4A3318F0495D31FD40523A |
:101AF000419302D0A9F7EACFB4E0A69597958795D0 |
:101B000077956795BA95C9F70097610571050895AE |
:101B10009B01AC010A2E069457954795379527955A |
:101B2000BA95C9F7620F731F841F951FA01D0895F2 |
:101B30002F923F924F925F926F927F928F929F92DD |
:101B4000AF92BF92CF92DF92EF92FF920F931F93CB |
:101B5000CF93DF93CDB7DEB7CA1BDB0B0FB6F8947C |
:101B6000DEBF0FBECDBF09942A88398848885F84BC |
:101B70006E847D848C849B84AA84B984C884DF802D |
:101B8000EE80FD800C811B81AA81B981CE0FD11D11 |
:101B90000FB6F894DEBF0FBECDBFED01089511F46E |
:101BA0000EF44DC03EC05DD0D0F39923D9F3CEF3EF |
:101BB0009F57550B87FF46D00024A0E640EA9001CE |
:101BC00080585695979528F4805C660F771F881F7C |
:101BD00020F026173707480730F4621B730B840B7D |
:101BE000202931294A2BA6951794079420253125C1 |
:101BF0004A2758F7660F771F881F20F026173707E8 |
:101C0000480730F4620B730B840B200D311D411D0E |
:101C1000A09581F7B901842F9158880F96958795E3 |
:101C200008959F3F31F0915020F4879577956795FF |
:101C3000B795880F911D9695879597F908959FEF11 |
:101C400080EC089591505040660F771F881FD2F79F |
:101C5000089557FD9058440F551F59F05F3F71F09C |
:101C60004795880F97FB991F61F09F3F79F0879503 |
:101C70000895121613061406551FF2CF4695F1DF8C |
:101C800008C0161617061806991FF1CF869571051C |
:0A1C9000610508940895F894FFCF51 |
:101C9A007D0A25336443202533646D000C504F536D |
:101CAA00495449560A25336443206368000C445258 |
:101CBA00590A25336443206368000C534F4C44454A |
:101CCA00520A25336443206368000A253364000CF2 |
:101CDA00000D707265686561740A253364432025B6 |
:101CEA00336473000D736F6C646572200A25336464 |
:101CFA00432025336473000D636F6F6C2020200A24 |
:101D0A0025336443000164780101000000000000EB |
:101D1A000000000102020303030304040404040490 |
:101D2A00040405050505050505050505050505055B |
:101D3A00050506060606060606060606060606063B |
:101D4A000606060606060606060606060606060629 |
:101D5A00060607070707070707070707070707070B |
:101D6A0007070707070707070707070707070707F9 |
:101D7A0007070707070707070707070707070707E9 |
:101D8A0007070707070707070707070707070707D9 |
:101D9A0007070808080808080808080808080808BB |
:101DAA0008080808080808080808080808080808A9 |
:101DBA000808080808080808080808080808080899 |
:101DCA000808080808080808080808080808080889 |
:101DDA000808080808080808080808080808080879 |
:101DEA000808080808080808080808080808080869 |
:101DFA000808080808080808080808080808080859 |
:101E0A000808080808080808080808080808080848 |
:021E1A000808B6 |
:00000001FF |
//Designs/Tools/reflow01A/SW/key.c |
---|
0,0 → 1,87 |
/* mija 2009 key |
source file for process keyboard |
!!! must be set PINs,PORTs,DDR in lcd.h |
ver.: 0.0 TESTED |
*/ |
#include <avr/io.h> |
#include "key.h" |
void KeyInit() |
{ |
KEY1Init(); |
KEY1Pullup(); |
KEY2Init(); |
KEY2Pullup(); |
} |
void ProcesKey(uint8_t *key) |
{ |
//stav |
enum{STABLE_NO_KEY,NO_STABLE,REPEAT}; |
static uint8_t stav = STABLE_NO_KEY; |
static uint8_t KeyPrev = NOKEY; |
static uint16_t KeyTimer; |
uint8_t Key; |
Key = NOKEY; |
if (KEY1Input()) Key = TL1; |
if (KEY2Input()) Key = TL2; |
if (KEY1Input() && KEY2Input()) Key = TL1TL2; |
switch (stav) |
{ |
case STABLE_NO_KEY: if (Key){ |
KeyPrev = Key; |
KeyTimer = KEYSTABLETIME; |
stav = NO_STABLE; |
} |
*key = NOKEY; |
break; |
case NO_STABLE: if (--KeyTimer){ |
*key = NOKEY; |
break; |
} |
if (Key == KeyPrev){ |
*key = Key; |
KeyTimer = KEYFIRSTREPEATTIME; |
stav = REPEAT; |
break; |
} |
stav = STABLE_NO_KEY; |
*key = NOKEY; |
break; |
/* case FIRST_REPEAT: if (--KeyTimer){ |
if (Key == NOKEY) stav = STABLE_NO_KEY; |
*key = NOKEY; |
break; |
} |
if (Key == KeyPrev){ |
*key = Key; |
KeyTimer = KEYREPEATTIME; |
stav = REPEAT; |
break; |
} |
stav = STABLE_NO_KEY; |
*key = NOKEY; |
break;*/ |
case REPEAT: if (--KeyTimer){ |
if (Key != KeyPrev) stav = STABLE_NO_KEY; |
*key = NOKEY; |
break; |
} |
if (Key == KeyPrev){ |
*key = Key; |
KeyTimer = KEYREPEATTIME; |
//stav = REPEAT; |
break; |
} |
default: stav = STABLE_NO_KEY; |
*key = NOKEY; |
} |
} |
//Designs/Tools/reflow01A/SW/key.h |
---|
0,0 → 1,51 |
/* mija 2008 |
*.h file for defines key.c |
key KEY1 |
KEY2 |
KEY3 |
KEY4 |
!!!!NOTE must be set PIN with PORT and DDR |
*/ |
#ifndef __key_h_included__ |
#define __key_h_included__ |
#define KEYSTABLETIME 5 //umerne rychlosti main smycky cca |
//pocet opakovani fce procesKey() za cca 30ms |
#define KEYFIRSTREPEATTIME 200 |
#define KEYREPEATTIME 100 |
#define KEY1 PC0 |
#define PORT_KEY1 PORTC |
#define DDR_KEY1 DDRC |
#define PIN_KEY1 PINC |
#define KEY2 PC1 |
#define PORT_KEY2 PORTC |
#define DDR_KEY2 DDRC |
#define PIN_KEY2 PINC |
void ProcesKey(uint8_t *key); |
void KeyInit(); |
//******************************************************************* |
//internal |
#define KEY1Input() (!(PIN_KEY1 & (_BV(KEY1)))) |
#define KEY1Init() DDR_KEY1 &= (~(_BV(KEY1))) |
#define KEY1Pullup() PORT_KEY1 |= _BV(KEY1) |
#define KEY2Input() (!(PIN_KEY2 & (_BV(KEY2)))) |
#define KEY2Init() DDR_KEY2 &= (~(_BV(KEY2))) |
#define KEY2Pullup() PORT_KEY2 |= _BV(KEY2) |
#define NOKEY 0 |
#define TL1 1 |
#define TL2 2 |
#define TL1TL2 3 |
//enum{NOKEY=0,TL1,TL2,TL3,TL4,TL1TL2}; |
#endif /* __key_h_included__ */ |
//Designs/Tools/reflow01A/SW/lcd.c |
---|
0,0 → 1,147 |
/* mija 2008 |
source file for lcd HITACHI 16x2,8x2,... |
!!! must be set PINs,PORTs,DDR in lcd.h |
ver.: 0.0 TESTED |
*/ |
#include <avr/io.h> |
#include <util/delay.h> |
#include <avr/pgmspace.h> |
#include "lcd.h" |
//#include <stdio.h> |
//************************************************************* |
#define H_D0 PORT_D0 |=_BV(PIN_D0) |
#define L_D0 PORT_D0 &= ~(_BV(PIN_D0)) |
#define H_D1 PORT_D1 |=_BV(PIN_D1) |
#define L_D1 PORT_D1 &= ~(_BV(PIN_D1)) |
#define H_D2 PORT_D2 |=_BV(PIN_D2) |
#define L_D2 PORT_D2 &= ~(_BV(PIN_D2)) |
#define H_D3 PORT_D3 |=_BV(PIN_D3) |
#define L_D3 PORT_D3 &= ~(_BV(PIN_D3)) |
#define H_E PORT_E |=_BV(PIN_E) |
#define L_E PORT_E &= ~(_BV(PIN_E)) |
#define H_RS PORT_RS |=_BV(PIN_RS) |
#define L_RS PORT_RS &= ~(_BV(PIN_RS)) |
//************************************************************* |
// Definice konstant pro LCD display |
// |
#define LCD_CURSOR_ON_ 0x0E // kurzor jako blikajici radka pod znakem |
#define LCD_CURSOR_OFF_ 0x0C // zadny kurzor |
#define LCD_LINE_2 0x40 // adresa 1. znaku 2. radky |
// Definice rezimu LCD displeje |
// |
uint8_t PROGMEM LCD_INIT_STRING[4] = |
{ |
0x28, // intrfejs 4 bity, 2 radky, font 5x7 |
LCD_CURSOR_OFF_, // display on, kurzor off, |
0x01, // clear displeje |
0x06 // inkrement pozice kurzoru (posun kurzoru doprava) |
}; |
void LCD_init_IO_PIN(void) |
{ |
DDR_D0 |= _BV(PIN_D0); |
DDR_D1 |= _BV(PIN_D1); |
DDR_D2 |= _BV(PIN_D2); |
DDR_D3 |= _BV(PIN_D3); |
DDR_E |= _BV(PIN_E); |
DDR_RS |= _BV(PIN_RS); |
} |
void LCD_init(void) |
{ |
uint8_t a; |
LCD_init_IO_PIN(); |
_delay_ms(20); |
L_E; |
L_RS; |
for (a=0;a<3;a++) |
{ |
_delay_ms(2); |
LCD_send_nibble(0x3); |
} |
_delay_us(40); |
LCD_send_nibble(0x2); |
_delay_us(40); |
for (a=0;a<3;a++) |
{ |
LCD_send_command(pgm_read_byte(&(LCD_INIT_STRING[a]))); |
_delay_ms(2); |
} |
} |
void LCD_putc(uint8_t data) |
{ |
LCD_send_data(data); |
} |
void LCD_send_command(uint8_t data) |
{ |
L_RS; |
LCD_send(data); |
H_RS; |
} |
void LCD_send_data(uint8_t data) |
{ |
H_RS; |
LCD_send(data); |
} |
void LCD_send(uint8_t data) |
{ |
LCD_send_nibble(data >> 4); |
LCD_send_nibble(data); |
_delay_us(40); |
} |
void LCD_send_nibble(uint8_t data) |
{ |
L_D0;L_D1;L_D2;L_D3; |
if (data & 0x1) H_D0; |
if (data & 0x2) H_D1; |
if (data & 0x4) H_D2; |
if (data & 0x8) H_D3; |
H_E; |
_delay_us(1); |
L_E; |
} |
void LCD_clear(void) |
{ |
LCD_send_command(1); |
_delay_ms(2); |
} |
void LCD_gotoxy( uint8_t x, uint8_t y) |
{ |
uint8_t Adr; |
Adr=x-1; |
if(y==2) |
Adr+=LCD_LINE_2; |
LCD_send_command(0x80|Adr); |
} |
//Designs/Tools/reflow01A/SW/lcd.h |
---|
0,0 → 1,75 |
/* mija 2008 |
*.h file for defines lcd.c |
data PIN_D0 |
PIN_D1 |
PIN_D2 |
PIN_D3 |
write PIN_E |
commamnd/data PIN_RS |
!!!!NOTE must be set PIN with PORT and DDR |
*/ |
//************************************************************* |
#define PIN_D0 PD1 |
#define PORT_D0 PORTD |
#define DDR_D0 DDRD |
#define PIN_D1 PD2 |
#define PORT_D1 PORTD |
#define DDR_D1 DDRD |
#define PIN_D2 PD0 |
#define PORT_D2 PORTD |
#define DDR_D2 DDRD |
#define PIN_D3 PC5 |
#define PORT_D3 PORTC |
#define DDR_D3 DDRC |
#define PIN_E PD4 |
#define PORT_E PORTD |
#define DDR_E DDRD |
#define PIN_RS PD3 |
#define PORT_RS PORTD |
#define DDR_RS DDRD |
//************************************************************* |
void LCD_init(void); |
void LCD_putc(uint8_t data); |
void LCD_gotoxy( uint8_t x, uint8_t y); |
void LCD_clear(void); |
void LCD_send_data(uint8_t data); |
void LCD_send_command(uint8_t data); |
void LCD_send(uint8_t data); |
void LCD_send_nibble(uint8_t data); |
void LCD_init_IO_PIN(void); |
//************************************************************* |
//********************** example printf *********************** |
/* |
#inlcude <stdio.h> |
static int put_lcd(char c, FILE *stream); |
static FILE mystdout = FDEV_SETUP_STREAM(put_lcd, NULL,_FDEV_SETUP_WRITE); |
static int put_lcd(char c, FILE *stream) |
{ |
switch (c) |
{ |
case '\n': LCD_gotoxy(1,2);break; |
case '\r': LCD_gotoxy(1,1);break; |
default : LCD_putc(c); |
} |
return 0; |
}*/ |
//************************************************************* |
//Designs/Tools/reflow01A/SW/process.c |
---|
0,0 → 1,545 |
/* mija 2009 - process |
SW pro ATmega8 mereni + regulace teploty |
Fosc = 8192000Hz externi krystal |
ver.: 0.0 - start |
*/ |
#include <avr/io.h> |
#include <stdio.h> |
#include <math.h> |
#include "process.h" |
#include "key.h" |
#include "lcd.h" |
#include "clock.h" |
uint8_t ProcesStart(char *buffer,uint8_t key,uint16_t temp) |
{ |
static uint8_t proces = SOLDER; |
static uint8_t displ = 1; |
static uint16_t LastTemp; |
HeatOff(); |
if (key == TL1){ |
displ = 1; |
return proces; |
} |
if ((key == TL2)){ |
switch (proces) |
{ |
case POSITIV: proces = DRY; |
break; |
case DRY: proces = SOLDER; |
break; |
case SOLDER: |
default: proces = POSITIV; |
break; |
} |
displ = 1; |
} |
if (displ){ |
switch(proces) |
{ |
case POSITIV:sprintf(buffer,"\fPOSITIV\n%3dC ch",temp); |
break; |
case DRY: sprintf(buffer,"\fDRY\n%3dC ch",temp); |
break; |
case SOLDER: |
default: sprintf(buffer,"\fSOLDER\n%3dC ch",temp); |
} |
displ = 0; |
} |
else{ |
if (temp !=LastTemp){ |
sprintf(buffer,"\n%3d",temp); |
LastTemp=temp; |
} |
} |
return START; |
} |
/*uint8_t ProcesSolder(char *buffer,uint8_t key,uint16_t temp,Clockt_t *clock) |
{ |
enum{SOLDER_START,SOLDER_PREHEAT,SOLDER_SOLDER,SOLDER_COOL}; |
static uint8_t stav=SOLDER_START; |
static uint8_t timer=PREHEATTIME; |
static uint8_t TimerFlag=0; |
static uint8_t PrevSec; |
if (key != NOKEY){ |
stav = SOLDER_START; |
return START; |
} |
switch(stav) |
{ |
case SOLDER_START: |
timer = PREHEATTIME+1; |
TimerFlag = 0; |
stav = SOLDER_PREHEAT; |
ClockInit(0,0,0,clock); |
PrevSec = 0xff; |
sprintf(buffer,"\f"); |
break; |
case SOLDER_PREHEAT: |
if(temp >= PREHEATTEMPSTART) TimerFlag=1; |
ProcesHeat(PREHEATTEMP,temp); |
if (!timer){ |
stav = SOLDER_SOLDER; |
timer = SOLDERTIME+1; |
TimerFlag = 0; |
PrevSec = 0xff; |
} |
sprintf(buffer,"\rpreheat\n%3dC %3ds",temp,timer-1); |
break; |
case SOLDER_SOLDER: |
if(temp >= SOLDERTEMP) TimerFlag=1; |
ProcesHeat(SOLDERTEMP,temp); |
if (!timer){ |
stav = SOLDER_COOL; |
timer = COOLTIME+1; |
TimerFlag = 0; |
PrevSec = 0xff; |
} |
sprintf(buffer,"\rsolder \n%3dC %3ds",temp,timer-1); |
break; |
case SOLDER_COOL: |
HeatOff(); |
TimerFlag=1; |
if (!timer){ |
stav = SOLDER_START; |
PrevSec = 0xff; |
return START; |
} |
sprintf(buffer,"\rcool \n%3dC %3ds",temp,timer-1); |
break; |
default: HeatOff(); |
stav = SOLDER_START; |
return START; |
} |
if ((PrevSec != clock->sec) && TimerFlag){ |
PrevSec = clock->sec; |
timer --; |
} |
return SOLDER; |
}*/ |
uint8_t ProcesSolder(char *buffer,uint8_t key,uint16_t temp,Clockt_t *clock) |
{ |
enum{SOLDER_START,SOLDER_PREHEAT,SOLDER_SOLDER,SOLDER_COOL}; |
static uint8_t stav=SOLDER_START; |
static uint8_t timer=PREHEATTIME; |
static uint8_t Timer2=0; |
static uint8_t TimerFlag2=0; |
static uint8_t TimerFlag=0; |
static uint8_t FlagSolder=0; |
static uint8_t PrevSec; |
static uint16_t LastTemp=0; |
if (key != NOKEY){ |
stav = SOLDER_START; |
return START; |
} |
switch(stav) |
{ |
case SOLDER_START: |
timer = 0; |
TimerFlag = 0; |
Timer2 = 0; |
TimerFlag2 = 0; |
stav = SOLDER_PREHEAT; |
ClockInit(0,0,0,clock); |
PrevSec = 0xff; |
LastTemp = 0; |
sprintf(buffer,"\f"); |
break; |
case SOLDER_PREHEAT: |
if(temp >= PREHEATTEMPSTART) TimerFlag=1; |
if(temp >= PREHEATTEMP) TimerFlag2 = 1; |
if(temp >= PREHEATTEMPSTOP){ |
stav = SOLDER_SOLDER; |
TimerFlag = 0; |
FlagSolder = 0; |
TimerFlag2 = 0; |
Timer2 = timer; |
timer=0; |
break; |
} |
if (TimerFlag2 && (Timer2 < PREHEATTIMEOFF)){ |
if (LastTemp > temp) HeatOn(); |
else { |
HeatOff(); |
if ((clock->sec & 0x4) == 0x4) LastTemp = temp; //4sec vzorkovani; |
} |
//LastTemp=temp; |
} |
else HeatOn(); |
sprintf(buffer,"\rpreheat\n%3dC %3ds",temp,timer); |
break; |
case SOLDER_SOLDER: |
if(temp >= SOLDERTEMPSTART) TimerFlag=1; |
if(temp >= SOLDERTEMP) FlagSolder = 1; |
if (FlagSolder){ |
HeatOff(); |
if(temp <= SOLDERTEMPSTART){ |
stav = SOLDER_COOL; |
timer=0x1; |
TimerFlag = 0; |
break; |
} |
} |
else HeatOn(); |
if (TimerFlag) Timer2=timer; |
sprintf(buffer,"\rsolder \n%3dC %3ds",temp,Timer2); |
break; |
case SOLDER_COOL: |
HeatOff(); |
TimerFlag=1; |
if (!timer){ |
stav = SOLDER_START; |
//PrevSec = 0xff; |
return START; |
} |
sprintf(buffer,"\rcool \n%3dC",temp); |
break; |
default: HeatOff(); |
stav = SOLDER_START; |
return START; |
} |
if ((PrevSec != clock->sec)){ |
PrevSec = clock->sec; |
if (TimerFlag)timer ++; |
if (TimerFlag2) Timer2 ++; |
} |
return SOLDER; |
} |
uint8_t ProcesPositiv(char *buffer,uint8_t key,uint16_t temp,Clockt_t *clock) |
{ |
static uint8_t time = 0; |
static uint8_t PrevSec; |
if (!time){ |
time = POSITIVTIME+1; |
ClockInit(0,0,0,clock); |
PrevSec = 1; |
} |
ProcesHeat(POSITIVTEMP,temp); |
if (key == TL1) time +=5; |
if (key == TL2) { |
time = 0; |
return START; |
} |
if (PrevSec != clock->sec){ |
PrevSec = clock->sec; |
if (PrevSec == 0) time --; |
} |
sprintf(buffer,"\n%3dC %3dm",temp,time); |
if (!time) return START; |
return POSITIV; |
} |
uint8_t ProcesDry(char *buffer,uint8_t key,uint16_t temp,Clockt_t *clock) |
{ |
static uint8_t time; |
static uint8_t PrevSec; |
if (!time){ |
time = DRYTIME+1; |
ClockInit(0,0,0,clock); |
PrevSec = 1; |
} |
ProcesHeat(DRYTEMP,temp); |
if (key == TL1) time +=5; |
if (key == TL2) { |
time = 0; |
return START; |
} |
if (PrevSec != clock->sec){ |
PrevSec = clock->sec; |
if (PrevSec == 0) time --; |
} |
sprintf(buffer,"\n%3dC %3dm",temp,time); |
if (!time) return START; |
return DRY; |
} |
/* |
uint8_t ProcesTest(char *buffer,uint8_t key,uint16_t temp,Clockt_t *clock) |
{ |
HeatOff(); |
sprintf(buffer,"\r%2d:%02d:%02d\n%3dC ",clock->hour,clock->min,clock->sec,temp); |
if (key == TL2) return START; |
return TEST; |
}*/ |
void ProcesDispl(char *data) |
{ |
uint8_t a,b; |
for (a=0;a<MAXDISPLBUFFER;a++) |
{ |
switch (*(data+a)) |
{ |
case 0: *data = 0;return; |
case '\n': LCD_gotoxy(1,2);break; |
case '\r': LCD_gotoxy(1,1);break; |
case '\f': LCD_gotoxy(1,1); |
for (b=0;b<8;b++) LCD_putc(0x20); |
LCD_gotoxy(1,2); |
for (b=0;b<8;b++) LCD_putc(0x20); |
LCD_gotoxy(1,1); |
break; |
default : LCD_putc(*(data+a)); |
} |
} |
*data = 0; |
} |
void ProcesTemp(uint16_t adc,uint16_t *temp) |
{ |
double Rpt; |
double Tpt; |
Rpt = 1.0*adc*2350.0/1024.0; |
#define A 3.90802e-3 |
#define B -5.802e-7 |
Tpt = (-A + sqrt(A*A - 4*B*(1.0 - Rpt/1000.0)))/2.0/B; |
//Tpt = (-A + sqrt(A*A - 4*B*(1.0 - Rpt)))/2.0/B; |
//Tpt = (Rpt/1000.0 - 1.0)/A; |
*temp = (int16_t)Tpt; |
} |
/* |
void ProcesHeat(uint16_t temp,uint16_t ActualTemp) |
{ |
enum{HEAT_STABLE,HEAT_UP_1,HEAT_UP_2,HEAT_UP_3,HEAT_UP_4,HEAT_UP_5,HEAT_DOWN_1,HEAT_DOWN_2,HEAT_DOWN_3,HEAT_DOWN_4,HEAT_DOWN_5}; |
static uint8_t stav = HEAT_STABLE; |
static uint8_t PrevTemp = 0; |
static uint8_t TimeChange=0; |
if (ActualTemp < (temp) |
switch(stav) |
{ |
case HEAT_STABLE: |
if (ActualTemp>temp) HeatOff(); |
else HeatOn(); |
break; |
case HEAT_UP_1: |
break; |
case HEAT_UP_2: |
break; |
case HEAT_UP_3: |
break; |
case HEAT_UP_4: |
break; |
case HEAT_UP_5: |
break; |
case HEAT_DOWN_1: |
break; |
case HEAT_DOWN_2: |
break; |
case HEAT_DOWN_3: |
break; |
case HEAT_DOWN_4: |
break; |
case HEAT_DOWN_5: |
break; |
} |
if (ActualTemp>temp) HeatOff(); |
else HeatOn(); |
} |
*/ |
/* |
void ProcesHeat(uint16_t GequestTemp,uint16_t ActualTemp) |
{ |
#define TERM_STOP 15 //teplotni rozdil do regulace - trouba topi |
#define T1 20 //vzorkovani pøi nabìhu teploty [s] |
#define T2 10 //vzorkovani pøi poklesu teploty [s] |
#define T3 5 //vzorkovani pøi ustalene teplotì [s] |
#define T4 5 //doba topení [s] |
#define MAINCYKLSPEED 100 |
static uint8_t delta_s=0; |
static uint16_t T_LAST=0; |
static uint8_t clock=MAINCYKLSPEED; //pocet opakovani teto fce za 1 sekundu |
if (!(-- clock)) {delta_s++;clock = MAINCYKLSPEED;} |
if( ActualTemp < (GequestTemp - TERM_STOP)){ |
HeatOn(); |
delta_s=0; |
T_LAST=ActualTemp; |
} |
else{ |
if (ActualTemp < GequestTemp){ |
if (ActualTemp == T_LAST){ |
if (delta_s < T1) HeatOff(); |
else HeatOn(); |
if (delta_s > (T1 + T4)) delta_s = 0; |
} |
else{ |
if (T_LAST > ActualTemp) delta_s=(T1 - T2); |
else delta_s=0; |
T_LAST=ActualTemp;HeatOff(); |
} |
} |
else{ |
HeatOff();T_LAST=ActualTemp; |
if (ActualTemp == GequestTemp) delta_s = (T1 - T3); |
else delta_s = 0; |
} |
} |
} |
*/ |
/* |
void ProcesHeat(uint16_t RequestTemp,uint16_t ActualTemp) |
{ |
#define TERM_STOP 15 //teplotni rozdil do regulace - trouba topi |
#define T1 20 //vzorkovani pøi nabìhu teploty [s] |
#define T2 10 //vzorkovani pøi poklesu teploty [s] |
#define T3 5 //vzorkovani pøi ustalene teplotì [s] |
#define T4 5 //doba topení [s] |
#define PERIOD 15 //[s] |
#define MAINCYKLSPEED 100 |
static uint8_t delta_s=0; |
static uint16_t LastTemp=0; |
static uint8_t clock=MAINCYKLSPEED; //pocet opakovani teto fce za 1 sekundu |
static uint8_t Pwm=0; |
static uint8_t DutyPwm = 0; |
static uint8_t FlagTemp = 1; |
static uint8_t FlagPwm = 0; |
if (!(-- clock)){ |
delta_s++; |
clock = MAINCYKLSPEED; |
if ((++Pwm) > PERIOD){ |
Pwm = 0; |
FlagPwm = 1; |
} |
} |
if( ActualTemp < (RequestTemp - TERM_STOP)){ |
DutyPwm = PERIOD; |
LastTemp = ActualTemp; |
FlagTemp=1; |
} |
else{ |
if (FlagTemp){ |
DutyPwm=0; |
FlagTemp = 0; |
} |
else |
if (FlagPwm) |
{ |
FlagPwm=0; |
if (ActualTemp >= RequestTemp){ |
if(LastTemp < ActualTemp ) { if (DutyPwm) DutyPwm --;} |
} |
else{ |
if (LastTemp >= ActualTemp) {if (DutyPwm<PERIOD)DutyPwm ++;} |
} |
LastTemp = ActualTemp; |
} |
} |
if(ActualTemp<RequestTemp){ |
if (DutyPwm >= Pwm) HeatOn(); |
else HeatOff(); |
} |
else HeatOff(); |
}*/ |
void ProcesHeat(uint16_t RequestTemp,uint16_t ActualTemp) |
{ |
#define TERM_STOP 15 //teplotni rozdil do regulace - trouba topi |
#define PERIOD 15 //[s] |
#define MAINCYKLSPEED 100 |
static uint8_t delta_s=0; |
static uint16_t LastTemp=0; |
static uint8_t clock=MAINCYKLSPEED; //pocet opakovani teto fce za 1 sekundu |
static uint8_t Pwm=0; |
static uint8_t DutyPwm = 0; |
static uint8_t FlagTemp = 1; |
static uint8_t FlagPwm = 0; |
if (!(-- clock)){ |
clock = MAINCYKLSPEED; |
if ((++Pwm) > PERIOD){ |
Pwm = 0; |
FlagPwm = 1; |
} |
} |
if( ActualTemp < (RequestTemp - TERM_STOP)){ |
DutyPwm = PERIOD; |
LastTemp = ActualTemp; |
FlagTemp=1; |
} |
else{ |
if (FlagTemp){ |
DutyPwm=0; |
FlagTemp = 0; |
} |
else |
if (FlagPwm) |
{ |
FlagPwm=0; |
if (ActualTemp >= RequestTemp){ |
if (ActualTemp != RequestTemp) |
if(LastTemp < ActualTemp ){ |
//if ((ActualTemp-LastTemp) > 1) |
if (DutyPwm) DutyPwm --; |
} |
} |
else{ |
if (LastTemp >= ActualTemp){ |
//if ((ActulaTemp - LastTemp)>1) |
if (DutyPwm<PERIOD)DutyPwm ++; |
} |
if(LastTemp < ActualTemp ){ |
if ((ActualTemp-LastTemp) > 5) |
if (DutyPwm) DutyPwm --; |
} |
} |
LastTemp = ActualTemp; |
} |
} |
if(ActualTemp < RequestTemp) |
{ |
if (DutyPwm == PERIOD) HeatOn(); |
else{ |
if (DutyPwm > Pwm) HeatOn(); |
else HeatOff(); |
} |
} |
else HeatOff(); |
} |
//Designs/Tools/reflow01A/SW/process.h |
---|
0,0 → 1,59 |
/* mija 2009 - header for proces.c |
SW pro ATmega8 mereni + regulace teploty |
Fosc = 8192000Hz externi krystal |
ver.: 0.0 - start |
*/ |
#ifndef __process_h_included__ |
#define __process_h_included__ |
#include "clock.h" // struc Clock_t |
#define POSITIVTIME 15 //minuty |
#define DRYTIME 120 //minuty |
#define POSITIVTEMP 70 //°C |
#define DRYTEMP 80 //°C |
#define PREHEATTEMPSTART 100 |
#define PREHEATTEMPSTOP 150 |
#define PREHEATTIMEOFF 50 //sec |
#define PREHEATTEMP 126 //°C |
#define PREHEATTIME 120 //sec |
#define SOLDERTEMPSTART 183 |
#define SOLDERTEMPSTOP 180 |
#define SOLDERTEMP 206 //°C |
#define SOLDERTIME 10 //sec |
#define COOLTEMP 50 //°C |
#define COOLTIME 10 //sec |
#define HEAT PD7 |
#define HEAT_DDR DDRD |
#define HEAT_PORT PORTD |
#define MAXDISPLBUFFER 20 //buffer pro lcd display |
enum{START=0,SOLDER,POSITIV,DRY}; //main proces |
uint8_t ProcesStart(char *buffer,uint8_t key,uint16_t temp); |
uint8_t ProcesSolder(char *buffer,uint8_t key,uint16_t temp,Clockt_t *clock); |
uint8_t ProcesPositiv(char *buffer,uint8_t key,uint16_t temp,Clockt_t *clock); |
uint8_t ProcesDry(char *buffer,uint8_t key,uint16_t temp,Clockt_t *clock); |
void ProcesDispl(char *data); |
void ProcesTemp(uint16_t adc,uint16_t *temp); |
void ProcesHeat(uint16_t temp,uint16_t ActualTemp); |
#define HeatInit() HEAT_DDR|=_BV(HEAT) |
#define HeatOn() HEAT_PORT|=_BV(HEAT) |
#define HeatOff() HEAT_PORT &= (~(_BV(HEAT))) |
#endif /* __process_h_included__ */ |
//Designs/Tools/reflow01A/SW/reflow.c |
---|
0,0 → 1,121 |
/* mija 2009 |
SW pro ATmega8 mereni + regulace teploty |
Fosc = 8192000Hz externi krystal |
ver.: 0.0 - start |
*/ |
#include <avr/io.h> |
#include <avr/interrupt.h> |
#include <util/delay.h> |
#include <avr/eeprom.h> |
#include "reflow.h" |
#include "lcd.h" // musi se definovat PINy LCD |
#include "key.h" // musi se definovat PINy Tlacitek |
#include "clock.h" // typ promenne Clockt_t |
#include "process.h" // musi se definovat PIN topeni |
//************************************************************* |
// delay + interrupt |
void delay_ms(uint16_t time) |
{ |
while (time --) _delay_ms(1); |
} |
volatile static uint8_t ClockTik8ms=125; |
ISR(TIMER0_OVF_vect) //tik 8ms |
{ |
if (ClockTik8ms) ClockTik8ms --; |
} |
//************************************************************* |
// gemeral cpu set |
void GeneralCpuInit(void) |
{ |
//*** IO PIN *** init,setup |
//*** TIMER0 *** |
// 256 prescaler |
// overflow 8ms |
// enable interrupt overflow |
TCCR0 = _BV(CS02); |
TIMSK |= _BV(TOIE0); |
//*** TIMER1 *** |
//*** TIMER2 *** |
//*** EXTERNAL INTERRUPT |
//*** USART *** |
//*** ADC *** |
// input ADC2 (pin25 C2) |
// external reference 2.5V |
// clock adc 128k (div 64) |
ADMUX = _BV(MUX1); |
ADCSRA = _BV(ADEN) | _BV(ADSC) | _BV(ADPS1) | _BV(ADPS2); |
} |
//************************************************************* |
// analog read |
int16_t ReadAdc(void) |
{ |
int16_t analog; |
uint8_t a; |
analog = 0; |
for (a=0;a<32;a++) |
{ |
ADCSR &= ~(_BV(ADIF)); |
ADCSR |= _BV(ADSC); |
while (!(ADCSR & _BV(ADIF))); |
analog += ADC; |
} |
return (analog >> 5 ); // prumer = analog/32 |
} |
//************************************************************* |
// main |
int main(void) |
{ |
uint8_t proces = START; |
char DisplBuffer[MAXDISPLBUFFER]; |
Clockt_t clock; |
uint16_t temp = 0; |
uint8_t key = NOKEY; |
GeneralCpuInit(); |
HeatInit(); |
HeatOff(); |
delay_ms(100); |
LCD_init(); |
KeyInit(); |
ClockInit(0,0,0,&clock); |
sei(); |
for (;;) |
{ |
switch(proces) |
{ |
case START: proces = ProcesStart(DisplBuffer,key,temp);break; |
case SOLDER: proces = ProcesSolder(DisplBuffer,key,temp,&clock);break; |
case POSITIV: proces = ProcesPositiv(DisplBuffer,key,temp,&clock);break; |
case DRY: proces = ProcesDry(DisplBuffer,key,temp,&clock); break; |
default: proces = START; |
} |
if (DisplBuffer[0]) ProcesDispl(DisplBuffer); |
ProcesKey(&key); |
ProcesClock((uint8_t *)&ClockTik8ms,&clock); |
ProcesTemp(ReadAdc(),&temp); |
} |
return 0; |
} |
//Designs/Tools/reflow01A/SW/reflow.h |
---|
0,0 → 1,22 |
/* mija 2009 |
SW pro ATmega8 mereni + regulace teploty |
Fosc = 8192000Hz externi krystal |
ver.: 0.0 - start |
LCD PINs defined in lcd.h |
KEY PINs defined in key.h |
HEAT PIN defined in proces.h |
POSITIVTEMP,DRYTEMP,PREHEATTEMP,SOLDERTEMP in proces.h |
*/ |