Problem with comparison.
/Designs/Tools/reflow2/SW/process.h
0,0 → 1,12
 
// reflow soldering profile difinition
#define PREHEAT_SLOPE 1.0 // preheat ramp up time
#define SOAK_TEMP 150 // soak temperature
 
#define SOAK_TIME 100 // time to soak
 
#define SOLDER_SLOPE 2.5
#define SOLDER_TEMP 210
#define SOLDER_TIME 5
 
 
/Designs/Tools/reflow2/SW/reflow.c
0,0 → 1,351
#include "reflow.h"
#include "process.h"
#include <math.h>
 
// nastaveni teplot a casu
#define TEPLOTA_PREDEHREVU 120
#define DOBA_PREDEHREVU 60
 
#define TEPLOTA_VRCHOLU 210
#define DOBA_VRCHOLU 5
 
// CPU IO rozhrani
#define LCD_RS PIN_C1 // rizeni registru LCD displeje
#define LCD_E PIN_C2 // enable LCD displeje
#define LCD_DATA_LSB PIN_D0 // data LCD
#include "lcd.c"
 
#define TL1 PIN_B3 // tlacitko S1
#define TL2 PIN_B2 // tlacitko S2
#define TL3 PIN_B1 // tlacitko S3
#define TL4 PIN_B0 // tlacitko S4
 
#define POWER_T3 PIN_C4 // ovladani optotriaku T3
#define POWER_T4 PIN_C5 // ovladani optotriaku T4
#define POWER_T5 PIN_C6 // ovladani optotriaku T5
 
#define ADC_PIN PIN_A0 //info, nelze menit - pin pouzit jako input analog
#define ADC_PIN_NC PIN_A1 //info, nelze menit - pin pouzit jako input analog
#define REF_PIN PIN_A3 //info, nelze menit - pin pouzit jako input reference 2.5V
 
// interni
#define PowerOn() output_low(POWER_T4);output_low(POWER_T5)
#define PowerOff() output_high(POWER_T4);output_high(POWER_T5)
 
// globalni promenne
struct time
{
volatile signed int8 hod;
volatile signed int8 min;
volatile signed int8 sec;
}cas;
 
unsigned int top_heat_power=0; // range 0-200% nad 100% je ale teleso jiz pretizene
unsigned int bottom_heat_power=0; // contains heating power range 0-100%
unsigned int period;
 
float temp_last=0;
float temp_slope=0;
 
 
void GeneralCpuInit() // inicializace
{
output_high(POWER_T4);
output_high(POWER_T5);
port_b_pullups(true);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_64); //nepouzit
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); // rizeni
setup_timer_2(T2_DIV_BY_16,249,10); //rtc 40ms
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
enable_interrupts(GLOBAL);
enable_interrupts(INT_TIMER2);
enable_interrupts(INT_TIMER0);
setup_adc_ports(AN0_AN1_VSS_VREF); //A0 vstup cidla, A1 nepozit, A3 - ref. 2.5V
setup_adc(ADC_CLOCK_DIV_8);
SET_ADC_CHANNEL(0); //AN0, PIN_A0
}
 
void heat_failure() // exception in case of heating fail
{
top_heat_power=0;
bottom_heat_power=0;
 
lcd_gotoxy(1,2);
printf(lcd_putc,"HEATING FAILURE!");
while(true);
 
}
 
unsigned int16 adc(void) // adc read and filtering
{
unsigned int16 analog;
unsigned int8 a;
 
analog = 0;
for (a=0;a<32;a++)
{
analog += read_adc();
delay_us(50);
}
return (analog >> 5 ); // prumer = analog/32
}
 
float teplota(void) // temperature measuring
{
return (0.674201*adc() - 294.35); // temperature calculaton (linear aproximation)
}
 
void top_heating()
{
if (period < top_heat_power){
output_low(POWER_T4);
output_low(POWER_T5);
}
else{
output_high(POWER_T4);
output_high(POWER_T5);
}
}
 
void bottom_heating()
{
 
if (period < 2*bottom_heat_power){
output_low(POWER_T3);
}
else{
output_high(POWER_T3);
}
}
 
#int_TIMER0
void heating_control() //rizeni topnych teles pri preteceni casovace
{
float temp;
 
top_heating();
bottom_heating();
if (period == 200)
{
temp=teplota();
temp_slope=(temp - temp_last) /(2*100.0*256.0/62500.0); // vypocet strmosti narustu teploty ve stupnich/s
temp_last = temp;
}
if (period < 200) period++;
else period=0;
}
 
#int_TIMER2
void Rtc(void) //40ms
{
static unsigned int8 ms40=0;
struct time* time;
time=&cas;
if ( ++ms40 < 25) return;
ms40=0;
if (++(time->sec) >= 60)
{
time->sec=0; //1min
if (++(time->min) >= 60)
{
time->min = 0; //1hod
(time->hod)++;
}
}
}
 
void slope_control(float ramp, unsigned int balance) // P proporcionalni rizeni narustu teploty predpoklada periodicke volani 1x/s
{
float slope_deviation;
 
slope_deviation = temp_slope - ramp; // vypocet strmosti a odchylky od pozadovane strmosti
 
if(slope_deviation < 0)
{
top_heat_power= 67 + balance;
bottom_heat_power= 100;
}
else{
top_heat_power=0;
bottom_heat_power=0;
}
}
 
void level_control(float level) // P proporcionalni rizeni teploty
{
if (teplota() > level)
{
top_heat_power=0;
bottom_heat_power=0;
}
else
{
top_heat_power=70;
bottom_heat_power=80;
}
}
 
 
void nullcas(struct time* time)
{
disable_interrupts(INT_TIMER2);
time->sec=0;
time->hod=0;
time->min=0;
enable_interrupts(INT_TIMER2);
}
 
void reflow_solder()
{
 
struct time process_time;
 
// ------------------- PREHEAT ---------------------
 
nullcas(&cas);
lcd_gotoxy(1,2);
printf(lcd_putc,"PREHEAT");
 
do {
slope_control(PREHEAT_SLOPE, 0); // hlida strmost predehrevu
 
lcd_gotoxy(1,1);
printf(lcd_putc,"%3.1f\21C ",teplota());
 
lcd_gotoxy(12,1);
printf(lcd_putc,"%02u:%02u",cas.min,cas.sec);
 
lcd_gotoxy(10,2);
printf(lcd_putc,"%1.1f\21C/s ",temp_slope);
 
delay_ms(200);
if (cas.min>3) heat_failure();
}
while (teplota() < SOAK_TEMP);
 
// ----------- SOAK ---------------
nullcas(&cas);
process_time.min = SOAK_TIME/60;
process_time.sec = SOAK_TIME - process_time.min*60;
 
lcd_clr();
lcd_gotoxy(1,2);
printf(lcd_putc,"SOAK ");
 
while (process_time.sec!=0 || process_time.min!=0)
{
level_control(SOAK_TEMP);
 
lcd_gotoxy(1,1);
printf(lcd_putc,"%3.1f\21C ",teplota());
 
if ((process_time.sec = process_time.sec - cas.sec)<0) process_time.sec=59;
 
process_time.min = (SOAK_TIME - cas.min*60 - cas.sec)/60;
process_time.sec = (SOAK_TIME - cas.min*60 - cas.sec) - process_time.min*60;
 
lcd_gotoxy(9,1);
printf(lcd_putc,"%02u:%02u", process_time.min, process_time.sec);
delay_ms(200);
}
//----------------- solder ----------------------------
 
nullcas(&cas);
lcd_clr();
lcd_gotoxy(1,2);
printf(lcd_putc,"SOLDER");
 
do {
slope_control(SOLDER_SLOPE, 10); // hlida strmost predehrevu
 
lcd_gotoxy(1,1);
printf(lcd_putc,"%3.1f\21C ",teplota());
 
lcd_gotoxy(12,1);
printf(lcd_putc,"%02u:%02u",cas.min,cas.sec);
 
lcd_gotoxy(10,2);
printf(lcd_putc,"%1.1f\21C/s ",temp_slope);
 
delay_ms(200);
if (cas.min>3) heat_failure();
}
while (teplota() < SOLDER_TEMP);
 
// ---------------- TAO ------------------------
 
 
while (process_time.sec!=0 || process_time.min!=0)
{
level_control(SOLDER_TEMP);
 
lcd_gotoxy(1,1);
printf(lcd_putc,"%3.1f\21C ",teplota());
 
if ((process_time.sec = process_time.sec - cas.sec)<0) process_time.sec=59;
 
process_time.min = (SOLDER_TIME - cas.min*60 - cas.sec)/60;
process_time.sec = (SOLDER_TIME - cas.min*60 - cas.sec) - process_time.min*60;
 
lcd_gotoxy(9,1);
printf(lcd_putc,"%02u:%02u", process_time.min, process_time.sec);
delay_ms(200);
}
 
// ---------------- COOLING ------------------------
 
top_heat_power=0;
bottom_heat_power=0;
 
lcd_clr();
 
lcd_gotoxy(1,2);
printf(lcd_putc,"REFLOW COMPLETE");
while(true)
{
lcd_gotoxy(1,1);
printf(lcd_putc,"%3.1f\21C ",teplota());
 
lcd_gotoxy(10,1);
printf(lcd_putc,"%1.1f\21C/s ",temp_slope);
 
}
}
 
void main() // main loop
{
GeneralCpuInit();
PowerOff();
lcd_init();
lcd_define_char(1,LCD_CHAR_STUPEN);
nullcas(&cas);
while(true)
{
delay_ms(300);
reflow_solder();
}
}
/Designs/Tools/reflow2/SW/reflow.hex
0,0 → 1,398
:1000000008308A00C8280000FF00030E8301A10009
:100010000A08A0008A010408A2007708A300780853
:10002000A4007908A5007A08A600831383128C30F7
:100030008400801C1D288C1832288B1E21280B1947
:100040003528220884002308F7002408F800250832
:10005000F9002608FA0020088A00210E8300FF0E0E
:100060007F0E09008A110A12D12B8A110A12872ADF
:100070000A108A100A11820728340C34013406341D
:10008000C822412A49274710C62049265529C510AC
:100090000000DE01DD01DF015F081F3C031C622858
:1000A0001F151F19512883161E088312DD071E080D
:1000B00003181E0FDE071030F700F70B5D28000055
:1000C000DF0A4C285E0CFA005D0CF900FA0CF90C02
:1000D000FA0CF90CFA0CF90CFA0CF90C0730FA05C9
:1000E0007908F8007A08F90008008E30F7005E08F9
:1000F000F8005D08F900FA01F808031D892879085D
:10010000F800F9010830F702F808031D8928F70103
:1001100091280310F81B9028F90DF80DF703892892
:10012000F81308005D0803190229E50061080319A6
:100130000229E5070318A3287F30E502031C0229E2
:1001400003190229A7288130E50703180229650849
:10015000F700F801F901FA015E08E900E9175F0804
:10016000E8006008E7001830E500E601671CD028C9
:100170006408FA07031CC228F90A031DC228F80AFA
:100180000319E6176308F907031CC928F80A0319BD
:10019000E6176208DF00DF175F08F8070318E617A5
:1001A000E60DF80CF90CFA0CE90CE80CE70C03105E
:1001B000E50BB5280130F70703180229F81BE728DB
:1001C000E90DFA0DF90DF80DF70303190229E91FDE
:1001D000F828FA0A031DF828F90A031DF828F80A76
:1001E000031DF828F80CF90CFA0CF70A0319022978
:1001F0005E08E6006208E606E61F0029F8170629F1
:10020000F8130629F701F801F901FA010800803016
:100210008318E806ED01EE016408EC006808EC06BE
:1002200063080319F729EB00F70067080319002A90
:10023000EB0203199C29031C5A296808F100F117E5
:100240006908F0006A08EF00EE010310F10CF00CF1
:10025000EF0CEE0CEB0B2429EC1F31296D14142A42
:100260006D106B106D16663084008313292A6D1291
:10027000EC1B44296B1C4F29F10CF00CEF0CEE0C1D
:10028000F70A03190F2A4F29F11B52290310EE0D0B
:10029000EF0DF00DF10DF70303190F2A44296D1727
:1002A000BC296D136408EC00EC1F5829F117082ACB
:1002B000F113082A6708EB00F7006308EB026408F3
:1002C000F100F1176508F0006608EF00EE01031079
:1002D000F10CF00CEF0CEE0CEB0B6629EC1F732904
:1002E000ED14142AED106B10ED166A3084008313A0
:1002F000292AED12EC1B86296B1C9129F10CF00CBC
:10030000EF0CEE0CF70A03190F2A9129F11B94291F
:100310000310EE0DEF0DF00DF10DF70303190F2A89
:100320008629ED17BC29ED136808EC00EC1F9A290B
:10033000F117082AF113082A6808F100F117690873
:10034000F0006A08EF00EC1FA929F1136D15142ABB
:100350006D11EE016B10663084008313292AEC1BAB
:10036000D2296408EC006B1CBC29F10CF00CEF0CDA
:10037000EE0CF70A03190F2AEE1FCD29EF0A031D11
:10038000CD29F00A031DCD29F10A031DCD29F10C59
:10039000F00CEF0CF70A03190F2A6D1B5129ED1B06
:1003A0009329F1298030F106F11FDA29142A68080F
:1003B000EC00E7296408EC00F108031DE729F008C8
:1003C000031DE729EF08031DE729F701082AF11BA0
:1003D000F1290310EE0DEF0DF00DF10DF70BE729EC
:1003E0000F2AEC1FF529F117082AF113082A6708CC
:1003F000F7006808F1006908F0006A08EF00082AB1
:100400006308F7006408F1006508F0006608EF0073
:100410007108F8007008F9006F08FA00472AF70120
:10042000F801F901FA01472AEE01EF09F009F10993
:10043000EE09EE0A031D222AEF0A031D222AF00A02
:100440000319F10A6D183029ED1872296D19A829C0
:10045000D7290008EF07031C332AF00A031D332AAB
:10046000F10A03196B1484030008F007031C3B2AEC
:10047000F10A03196B1484030008801F803AF10706
:1004800003186B146D1A3729ED1A7929AF29080062
:1004900049207908FA007808DD007908DE00752027
:1004A0007030E0009830DF002C30DE007E30DD0060
:1004B0007A08E4007908E3007808E2007708E100B0
:1004C00092207708DD007808DE007908DF007A08DE
:1004D000E000E2010408E1006210831B621483144F
:1004E0007A08E6007908E5007808E4007708E30078
:1004F000CD30EA002C30E9001330E8008730E70007
:1005000007216108840083136218831708002C08F0
:100510002E020318982AA81228088316870083122F
:100520008712281328088316870083120713A42A2A
:10053000A812280883168700831287162813280814
:10054000831687008312071703102D0D2E02031840
:10055000B02A281228088316870083120712B62AA9
:100560002812280883168700831207162E08C83C15
:10057000031DC62B48227A08DC007908DB007808C6
:10058000DA007708D90083145C08E6005B08E50010
:100590005A08E4005908E3003208EA003108E9008B
:1005A0003008E8002F08E70007217708DD00780809
:1005B000DE007908DF007A08E0006008E4005F08E8
:1005C000E3005E08E2005D08E1001730E800B730A4
:1005D000E7005130E6007E30E50061080319B22BD8
:1005E000ED0065080319B22BED02031CFC2A7F30D5
:1005F000ED070318B22B022B8130ED02031CB22B46
:100600000319B22B6D08F700F801F901FA01EC01AA
:100610006208EB00EB176308EA006408E900193090
:10062000ED006808E9020318252B0130EA020318DF
:10063000252BEB020318252BEC020318252BEC0AC3
:10064000EB0AEA0A6808E907572B6708EA02031869
:10065000402B0130EB020318402BEC020318402B17
:10066000EC0AEB0A6708EA076808E907031C572B3E
:10067000EA0A031D572BEB0A031D572BEC0A572BD5
:1006800066088038EB020318562B0130EC02031881
:10069000562BEC0A66088038EB076708EA07031C4C
:1006A000342BEB0A031D342BEC0A342B7A14ED0B9C
:1006B0005A2B652B0310E90DEA0DEB0DEC0D031021
:1006C000FA0DF90DF80DEE0D112B6E1C6D2B0310AC
:1006D000F80CF90CFA0CEE0C702BF7030319B22B83
:1006E000EE1B992B0310E90DEA0DEB0DEC0D6808DC
:1006F000E9020318852B0130EA020318852BEB026F
:100700000318852BEC02031CA82B6708EA020318C8
:10071000902B0130EB020318902BEC02031CA82B4A
:1007200066088038EB020318992B0130EC02031C99
:10073000A82BFA0A031DA82BF90A031DA82BF80AF7
:10074000031DA82BF70A0319B22BF80CF90CFA0CAD
:100750006208ED006608ED06ED1FB02BF817B62B0A
:10076000F813B62BF701F801F901FA017A08B6007F
:100770007908B5007808B4007708B3005C08B200C7
:100780005B08B1005A08B0005908AF002E08C73CFA
:10079000031CCC2BAE0ACD2BAE010B118A110A1211
:1007A0002128DA012930D900B70A3708183C031884
:1007B000082CB70102305907840083135A18831795
:1007C000800A801B082C00083B3C0318082C0230D0
:1007D0005907840083135A18831780010130590781
:1007E000840083135A188317800A801B082C000882
:1007F0003B3C0318082C01305907840083135A1816
:10080000831780015908840083135A188317800ABC
:100810008C108A110A12212850294524C520540021
:10082000A519AE18E60843102000A518AE18E60872
:10083000C31773102000D327C125201020100001FA
:10084000A519AE18E60843102000D3274C224529ED
:100850000001A519AE18E60843102000A518AE182F
:10086000E608C31773102000A519AE18E608431058
:100870002000D2224626CF2BA021CF265026452A63
:100880004500A519AE18E60843102000A518AE18BB
:10089000E608C317731020000634093409340634FF
:1008A00080348034803480340034A81228088316C1
:1008B000870083128716281328088316870083125F
:1008C000071783168113091283129412A81228089D
:1008D0008316870083122816280883168700831240
:1008E000A811280883168700013083129400003075
:1008F000831694000108C0390538810085308312C1
:1009000090004830F80006389200F93083169200C3
:1009100007309C00050885000330F700F70B8E2C8C
:100920001C0883120D1383169D01C03083128B04A3
:1009300083168C1483128B1683161F149F101F1599
:100940009F111F1383121F179F1383169F17831264
:100950001F140030F8001F08C73978049F008A155B
:100960000A12E7284D308400831300080319C62CAF
:100970000130F800F701F70BBB2CF80BBA2C4A300A
:10098000F700F70BC12CC42C800BB82C080008080A
:10099000F039D50053080F39550488000715281180
:1009A00028088316870000008312071128112808E1
:1009B0008316870083120800D108031DE12C8710DD
:1009C000E22C8714A8102808831687008312D20E01
:1009D0005208D300C724D20E5208D300C7240D30CA
:1009E000F700F70BF12C0800C830CD00B224F0302E
:1009F0008316880583128710A8102808831687009D
:100A00008312071128112808831687008312B80162
:100A10003808023C031C142D0230CD00B2240330F0
:100A2000D300C724B80A082D0D30F700F70B162D98
:100A30000230D300C7240D30F700F70B1D2DB8018D
:100A40003808023C031C302D38083820B900D10189
:100A50003908D200DC240230CD00B224B80A202D9F
:100A60008A150A12F628831603178C170C14000037
:100A7000000083128C0803195A2D0D080313B800C7
:100A800003170F080313B90003170C080313BA0068
:100A90000130D1003A08D200DC24380803178D0059
:100AA0000313390803178F008D0A03198F0A0313E4
:100AB000332D031703138A150A120A2983168C1083
:100AC000023083123B07840083133C188317800194
:100AD0003B08840083133C188317800101303B07D7
:100AE000840083133C188317800183168C148312AF
:100AF000080001304D02CF004E08023C031D822D3C
:100B00004030CF074F088038D000D1015008D200C4
:100B1000DC2408004C080C3A0319952D063A0319F9
:100B20009D2D073A0319A32DA82DD1010130D20024
:100B3000DC240230CD00B224B42D0130CD000230CF
:100B4000CE007925B42D0130CD00CE007925B42D0D
:100B50004C081F3C031CAE2D0730CC050130D100E2
:100B60004C08D200DC24B42D0800831603178C1720
:100B70000C140000000083120C087F390319F92DB2
:100B80000313BB0003170D080313BC0003170F0862
:100B90000313BD003B08CC008A253C0803178D00D9
:100BA00003133D0803178F0083168C170C140000E5
:100BB000000083120C0D0E0D7F390319F92D03135C
:100BC000BB0003170D080313BC0003170F08031322
:100BD000BD003B08CC008A253C0803178D00031399
:100BE0003D0803178F008D0A03198F0A0313B52DD3
:100BF0000317031308004508CC004908CC06CC1F96
:100C0000062E03110310C51B0314392E4508CC0012
:100C10004808CD004408CD020319142ECC1F392EEC
:100C20000308013A8300392E4908CD004508CD025A
:100C30000319202ECC1F392E0308013A8300392EC8
:100C40004A08CD004608CD0203192C2ECC1F392EA0
:100C50000308013A8300392E4B08CD004708CD0226
:100C60000319382ECC1F392E0308013A8300392E80
:100C7000031008008314A7018B1BA7178B133608DA
:100C8000E6003508E5003408E4003308E3003E08D8
:100C9000EA003D08E9003C08E8003B08E7000721BE
:100CA000A71B8B177A08C3007908C2007808C10017
:100CB0007708C0004308C7004208C6004108C500C5
:100CC0004008C400CB01CA01C901C801FB25031CAF
:100CD0006F2E43303F07AC006430AD00712EAC0185
:100CE000AD010800F701F801F901FA01D401D501BD
:100CF000D601D70153085204510450040319B02EF1
:100D00002030D8000310CC0DCD0DCE0DCF0DD40D5D
:100D1000D50DD60DD70D53085702031D992E520835
:100D20005602031D992E51085502031D992E500895
:100D30005402031CAA2E5008D4025108031C510F60
:100D4000D5025208031C520FD6025308031C530F3E
:100D5000D7020314F70DF80DF90DFA0DD80B822EFA
:100D600054308400831308000408C4004308C600FC
:100D70000319D92EA7018B1BA7178B134208E0007C
:100D80004108DF004008DE003F08DD00E401E30128
:100D90002030E2008230E1009220A71B8B177A08F6
:100DA000C2007908C1007808C0007708BF00C60BF0
:100DB000BA2E4208CF004108CE004008CD003F08BF
:100DC000CC004C08B63CCC00FA014D08D000CD1741
:100DD0000310CD0CCE0CCF0CFA0CF90CF80CF70C60
:100DE000CC0BE82ED01FFF2EF709F809F909FA09F4
:100DF000F70A0319F80A0319F90A0319FA0A7A0813
:100E0000C2007908C1007808C0007708BF00C21F7F
:100E1000162FC403C416BF09C009C109C209BF0AFD
:100E20000319C00A0319C10A0319C20A3B30CB00D7
:100E30009A30CA00CA30C900C8010A30C600430847
:100E40000319C40A4208CF004108CE004008CD0073
:100E50003F08CC004B08D3004A08D2004908D10013
:100E60004808D00072260008BF00840A0008C000AD
:100E7000840A0008C100840A0008C200FD3084070B
:100E8000F708031D562F430A46020319562F44083C
:100E90000319582F0F3946020319502F0318882FB2
:100EA000C41B882F441B582F2030842F2030C405AA
:100EB000C41E662FC4124308031DC4037708C40070
:100EC0002D30CC008A254408F700C40143084602AF
:100ED000031D742F7708C4002E30CC008A254408E7
:100EE000F7002030C40500303030C41E842FC412F7
:100EF0004308031DC4037708C4002D30CC008A25A5
:100F00004408F700C4013030F7077708CC008A2581
:100F10004B08CF004A08CE004908CD004808CC0055
:100F2000D301D201D1010A30D00072267A08CB0059
:100F30007908CA007808C9007708C800C60B222FB4
:100F40000800831603178C170C1400000000031808
:100F5000D02F83120C087F390313C00003170D082C
:100F60000313C10003170F080313C2004008CC008D
:100F70008A25410803178D000313420803178F00C9
:100F800083168C170C140000000083120313BF0B90
:100F9000CA2FCD2F83160317D02FEF2F83160317D9
:100FA00083120C0D0E0D7F390313C00003170D08BB
:100FB0000313C10003170F080313C2004008CC003D
:100FC0008A25410803178D000313420803178F0079
:100FD0008D0A03198F0A03100313BF0BA12F0800FA
:101000003E08F8013D02031808283D08F70014289F
:10101000F7010830BF00BD0DF70D3E087702031839
:10102000F700F80DBF0B0B28080078083B08BD003F
:101030006430BE0000207708BB0078083030031D04
:101040002828BC1C3128BC1931283C1A20302B28F8
:10105000BC113C123C14F8077808CC008A118A2590
:101060008A153B08BD000A30BE0000207708BB008F
:1010700078083030031D4228BC1948283C1C4828F9
:101080003C1A2030F8077808CC008A118A258A1586
:101090003030BB073B08CC008A118A258A1508002E
:1010A000F701F8013C0803103D18F707F70CF80C9E
:1010B000BD18F707F70CF80C3D19F707F70CF80CFB
:1010C000BD19F707F70CF80C3D1AF707F70CF80CE9
:1010D000BD1AF707F70CF80C3D1BF707F70CF80CD7
:1010E000BD1BF707F70CF80C0800A7018B1BA7170F
:1010F0008B138A1148228A15A71B8B177708BF000C
:101100007808C0007908C1007A08C2003E08C7000C
:101110003D08C6003C08C5003B08C4004208CB009F
:101120004108CA004008C9003F08C8008A11FB25D1
:101130008A15031C9E28AC01AD01A2284630AC00E4
:101140005030AD0008003D083E068039C000BD1F8C
:10115000AB28BD09BD0ABE1FAF28BE09BE0A3E08A6
:10116000F8013D020318B7283D08F700C328F7012E
:101170000830BF00BD0DF70D3E0877020318F700D9
:10118000F80DBF0BBA28C01FC728F809F80A0800D5
:10119000840183131F3083058316861383128617F9
:1011A000AC01AD01B201B101B001AF01B601B501B1
:1011B000B401B301B70183161F149F141F159F11AB
:1011C00007309C00FF308312A8008A11552C8A1525
:1011D000A812280883168700831287162813280868
:1011E00083168700831207178A11F42C8A15D10100
:1011F0004830D2008A11DC248A150230CD008A11D1
:10120000B2248A154C3003178D0004308F008A11E8
:101210000313332D8A15D1010330D2008A11DC2447
:101220008A150230CD008A11B2248A15BC012930FA
:10123000BB008A115E258A150230B8009630CD00B9
:101240008A11B2248A15B80B1E29BC012930BB00B3
:101250008A115E258A150130CD000230CE008A1138
:1012600079258A150C3003178D0004308F008A1100
:101270000313B5258A15BE01BD01BC017F30BB003B
:10128000BF018A113A268A150130CD00CE008A119D
:1012900079258A15A7018B1BA7178B138A11482262
:1012A0008A15A71B8B177708BB007808BC00790844
:1012B000BD007A08BE00023084007A08C2007908B6
:1012C000C1007808C0007708BF000130C3008A1150
:1012D000B4268A15123003178D0004308F000314D2
:1012E00004300313BF008A11A1278A150C30CD00EA
:1012F0000130CE008A1179258A152A08BB000130F9
:10130000BC0015203A30CC008A118A258A152B089A
:10131000BB000130BC0015200A30CD000230CE00E9
:101320008A1179258A15893084003608C20035086B
:10133000C1003408C0003308BF000130C3008A1167
:10134000B4268A15173003178D0004308F0003145C
:1013500006300313BF008A11A1278A15C830CD00BB
:101360008A11B2248A15AA1BCC292A08033C031827
:10137000CC29AC01AD010130CD000230CE008A1184
:1013800079258A15403003178D0000308F008A11AF
:101390000313B5258A15CB29A7018B1BA7178B1320
:1013A0008A1148228A15A71B8B177708BB0078087B
:1013B000BC007908BD007A08BE00C7003D08C60021
:1013C0003C08C5003B08C400CB01CA011630C90067
:1013D0008630C8008A11FB258A1503183B29BC01F9
:1013E0002930BB008A115E258A150130B900390801
:1013F000BC003C30BD0050207808643CBA000C3082
:10140000CC008A118A258A150130CD000230CE0029
:101410008A1179258A151B3003178D0004308F003F
:101420008A110313B5258A15BA08031D1A2AB908AB
:101430000319992ABE01BD011630BC008630BB00DD
:1014400075200130CD00CE008A1179258A15A701BB
:101450008B1BA7178B138A1148228A15A71B8B1782
:101460007708BB007808BC007908BD007A08BE0088
:10147000023084007A08C2007908C1007808C000F0
:101480007708BF000130C3008A11B4268A152230C4
:1014900003178D0004308F00031404300313BF00C2
:1014A0008A11A1278A152B08BA02BA1F592A3B3084
:1014B000BA002A08BC003C30BD0050207808643CCB
:1014C000F8002B087802BC00BD003C30BE00A32011
:1014D0007808B9002A08BC003C30BD0050207808CC
:1014E000643CF8002B087802BB003908BC003C3093
:1014F000BD00502078083B02BA000930CD00013011
:10150000CE008A1179258A153908BB000130BC004C
:1015100015203A30CC008A118A258A153A08BB007A
:101520000130BC001520C830CD008A11B2248A15C4
:10153000142ABC012930BB008A115E258A150C30A3
:10154000CC008A118A258A150130CD000230CE00E8
:101550008A1179258A15253003178D0004308F00F4
:101560008A110313B5258A15BE01BD012030BC00C8
:101570008030BB000A30BF008A113A268A1501303C
:10158000CD00CE008A1179258A15A7018B1BA717DC
:101590008B138A1148228A15A71B8B177708BB006B
:1015A0007808BC007908BD007A08BE0002308400CB
:1015B0007A08C2007908C1007808C0007708BF0027
:1015C0000130C3008A11B4268A152B3003178D0011
:1015D00004308F00031404300313BF008A11A127C5
:1015E0008A150C30CD000130CE008A1179258A157C
:1015F0002A08BB000130BC0015203A30CC008A110B
:101600008A258A152B08BB000130BC0015200A3042
:10161000CD000230CE008A1179258A1589308400E8
:101620003608C2003508C1003408C0003308BF00C6
:101630000130C3008A11B4268A15303003178D009B
:1016400004308F00031406300313BF008A11A12752
:101650008A15C830CD008A11B2248A15AA1B472BDF
:101660002A08033C0318472BAC01AD010130CD0023
:101670000230CE008A1179258A15403003178D007B
:1016800000308F008A110313B5258A15462BA70158
:101690008B1BA7178B138A1148228A15A71B8B1740
:1016A0007708BB007808BC007908BD007A08BE0046
:1016B000C7003D08C6003C08C5003B08C400CB017C
:1016C000CA015230C9008630C8008A11FB258A152C
:1016D0000318B42ABA08031D702BB9080319EF2B9D
:1016E000BE01BD015230BC008630BB007520013008
:1016F000CD00CE008A1179258A15A7018B1BA7176B
:101700008B138A1148228A15A71B8B177708BB00F9
:101710007808BC007908BD007A08BE000230840059
:101720007A08C2007908C1007808C0007708BF00B5
:101730000130C3008A11B4268A15363003178D0094
:1017400004308F00031404300313BF008A11A12753
:101750008A152B08BA02BA1FAF2B3B30BA002A08F1
:10176000BC003C30BD0050207808053CF8002B0838
:101770007802BC00BD003C30BE00A3207808B90050
:101780002A08BC003C30BD0050207808053CF80019
:101790002B087802BB003908BC003C30BD0050204B
:1017A00078083B02BA000930CD000130CE008A1122
:1017B00079258A153908BB000130BC0015203A3064
:1017C000CC008A118A258A153A08BB000130BC007A
:1017D0001520C830CD008A11B2248A156A2BAC01BD
:1017E000AD010C30CC008A118A258A150130CD005C
:1017F0000230CE008A1179258A15393003178D0001
:1018000004308F008A110313B5258A150130CD00ED
:10181000CE008A1179258A15A7018B1BA7178B1378
:101820008A1148228A15A71B8B177708BB007808F6
:10183000BC007908BD007A08BE00023084007A0836
:10184000C2007908C1007808C0007708BF000130E5
:10185000C3008A11B4268A15433003178D00043063
:101860008F00031404300313BF008A11A1278A15C7
:101870000A30CD000130CE008A1179258A158930D1
:1018800084003608C2003508C1003408C00033089F
:10189000BF000130C3008A11B4268A1548300317EF
:1018A0008D0004308F00031406300313BF008A112B
:0A18B000A1278A15062C1C296300ED
:02400E003A3F37
:00000001FF
;PIC16F877A
;CRC=4340 CREATED="28-V-11 21:54"
/Designs/Tools/reflow2/SW/reflow.PJT
0,0 → 1,44
[PROJECT]
Target=reflow.HEX
Development_Mode=2
Processor=0x877A
Processor_Text=PIC16F877A
ToolSuite=CCS
 
[Directories]
Include=
Library=
LinkerScript=
 
[Target Data]
FileList=D:\MLAB\Designs\Tools\reflow2\SW\reflow.c
BuildTool=C-COMPILER
OptionString=+FM
AdditionalOptionString=
BuildRequired=1
 
[reflow.c]
Type=4
Path=
FileList=
BuildTool=
OptionString=
AdditionalOptionString=
 
[mru-list]
1=reflow.c
 
[Windows]
0=0000 reflow.c 0 0 796 451 3 0
 
[Opened Files]
1=reflow.c
2=reflow.h
3=C:\Program Files\PICC\devices\16F877A.h
4=process.h
5=C:\Program Files\PICC\drivers\math.h
6=lcd.c
7=
[Units]
Count=1
1=reflow (main)
/Designs/Tools/reflow2/SW/reflow.h
0,0 → 1,16
#include <16F877A.h>
#device adc=10
 
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
 
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_B7,rcv=PIN_B6,bits=8)
 
/Designs/Tools/reflow2/SW/LCD.C
0,0 → 1,318
// LCD modul pro ovladani dvouradkoveho LCD modulu se standardnim Hitachi radicem
// (c)miho 2002,2005
//
// Historie:
//
// 0.00 Uvodni verze se snadnou definici portu LCD displeje
// 0.01 Oprava portu (zapomenute stare identifikatory)
// 0.02 Doplnena moznost pripojeni datoveho portu LCD na libovolne porty
// 0.03 Doplnena procedura lcd_clr pro smazani displeje
//
//
// Funkce:
//
// lcd_init() inicializuje LCD displej a porty, nutno volat jako prvni
//
// lcd_putc(c) zapis snaku do lcd displeje, zpracovava nasledujici ridici znaky
// \f = \x0C - nova stranka - smazani displeje
// \n = \x0A - odradkovani (prechod na druhou radku)
// \b = \x08 - backspace - posunuti kurzoru o 1 pozici zpet
// \r = \x0D - goto home to position 1,1
// \0 .. \7 - definovatelne znaky v pozicich 0 az 7 v CGRAM
// \20 .. \27 - alternativne zapsane znaky (oktalove) v pozicich 0 az 7 CGRAM
// Pozor na to, ze funkce printf konci tisk pokud narazi na \0 (konec retezce)
//
// lcd_gotoxy(x,y) presune kurzor na uvedenou adresu
// nekontroluje parametry
//
// lcd_cursor_on zapne kurzor
// lcd_cursor_off vypne kurzor
//
// lcd_clr smaze displej
//
// lcd_define_char(Index, Def) Makro, ktere definuje znaky od pozice Index obsahem definicniho
// retezce Def. Kazdych 8 znaku retezce Def definuje dalsi znak v CGRAM.
// Kapacita CGRAM je celkem 8 znaku s indexem 0 az 7.
// Na konci se provede lcd_gotoxy(1,1).
// Na konci teto knihovny je priklad pouziti definovanych znaku
//
//
// Definice portu: // Datovy port displeje pripojeny na 4 bity za sebou na jeden port
//
// #define LCD_RS PIN_B2 // rizeni registru LCD displeje
// #define LCD_E PIN_B1 // enable LCD displeje
// #define LCD_DATA_LSB PIN_C2 // pripojeni LSB bitu datoveho portu LCD displeje (celkem 4 bity vzestupne za sebou)
//
//
// Alternativni definice: // Datovy port displeje pripojeny na libovolne 4 bitove porty (vede na kod delsi asi o 25 slov)
//
// #define LCD_RS PIN_B2 // rizeni registru LCD displeje
// #define LCD_E PIN_B1 // enable LCD displeje
// #define LCD_D0 PIN_C2 // D0 - datove bity pripojene na libovolne porty
// #define LCD_D1 PIN_C3 // D1
// #define LCD_D2 PIN_C4 // D2
// #define LCD_D3 PIN_C5 // D3
 
 
 
 
// Privatni sekce, cist jen v pripade, ze neco nefunguje
 
 
 
 
#ifdef LCD_DATA_LSB
// Generovane defince portu pro ucely teto knihovny aby kod generoval spravne IO operace a soucasne
// bylo mozne jednoduse deklarovat pripojene piny LCD displeje pri pouziti teto knihovny. Problem spociva
// v tom, ze se musi spravne ridit smery portu a soucasne datovy port zabira jen 4 bity ze zadaneho portu
//
#define LCD_SHIFT (LCD_DATA_LSB&7) // pocet bitu posuvu datoveho kanalu v datovem portu
#define LCD_PORT (LCD_DATA_LSB>>3) // adresa LCD datoveho portu
#define LCD_TRIS (LCD_PORT+0x80) // adresa prislusneho TRIS registru
#define LCD_MASK (0xF<<LCD_SHIFT) // maska platnych bitu
//
#if LCD_SHIFT>4 // kontrola mezi
#error LCD data port LSB bit not in range 0..4
#endif
#endif
 
 
// 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
//
BYTE const 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)
};
 
 
// Odesle nibble do displeje (posle data a klikne signalem e)
//
void lcd_send_nibble( BYTE n )
{
#ifdef LCD_DATA_LSB
// data jsou za sebou na 4 bitech jednoho portu
*LCD_PORT = (*LCD_PORT & ~LCD_MASK) | ((n << LCD_SHIFT) & LCD_MASK); // nastav datove bity portu a ostatni zachovej
#else
// data jsou na libovolnych 4 bitech libovolnych portu
output_bit(LCD_D0,bit_test(n,0));
output_bit(LCD_D1,bit_test(n,1));
output_bit(LCD_D2,bit_test(n,2));
output_bit(LCD_D3,bit_test(n,3));
#endif
output_bit(LCD_E,1); // vzestupna hrana
delay_us(1); // pockej alespon 450ns od e nebo alespon 195ns od dat
output_bit(LCD_E,0); // sestupna hrana (minimalni perioda e je 1us)
}
 
 
// Odesle bajt do registru LCD
//
// Pokud je Adr=0 .. instrukcni registr
// Pokud je Adr=1 .. datovy registr
//
void lcd_send_byte( BOOLEAN Adr, BYTE n )
{
output_bit(LCD_RS,Adr); // vyber registr
swap(n);
lcd_send_nibble(n); // posli horni pulku bajtu
swap(n);
lcd_send_nibble(n); // posli spodni pulku bajtu
delay_us(40); // minimalni doba na provedeni prikazu
}
 
 
// Provede inicializaci LCD displeje, smaze obsah a nastavi mod displeje
//
// Tato procedura se musi volat pred pouzitim ostatnich lcd_ procedur
//
void lcd_init()
{
 
int i; // pocitadlo cyklu
 
delay_ms(200); // spozdeni pro provedeni startu displeje po zapnuti napajeni
 
#ifdef LCD_DATA_LSB
// data jsou na 4 bitech za sebou, nastav smer pro vsechny dalsi prenosy
*LCD_TRIS = *LCD_TRIS & ~LCD_MASK; // nuluj odpovidajici bity tris registru datoveho portu LCD
#endif
 
output_bit(LCD_RS,0); // nastav jako vystup a nastav klidovy stav
output_bit(LCD_E, 0); // nastav jako vystup a nastav klidovy stav
 
for (i=0; i<3; i++) // nastav lcd do rezimu 8 bitu sbernice
{
delay_ms(2); // muze byt rozdelany prenos dat (2x 4 bity) nebo pomaly povel
lcd_send_nibble(3); // rezim 8 bitu
}
 
delay_us(40); // cas na zpracovani
lcd_send_nibble(2); // nastav rezim 4 bitu (plati od nasledujiciho prenosu)
delay_us(40); // cas na zpracovani
 
for (i=0;i<3;i++) // proved inicializaci (nastaveni modu, smazani apod)
{
lcd_send_byte(0,LCD_INIT_STRING[i]);
delay_ms(2);
}
}
 
 
// Proved presun kurzoru
//
// Pozice 1.1 je domu
//
void lcd_gotoxy( BYTE x, BYTE y)
{
 
BYTE Adr;
 
Adr=x-1;
if(y==2)
Adr+=LCD_LINE_2;
 
lcd_send_byte(0,0x80|Adr);
}
 
 
// Zapis znaku na displej, zpracovani ridicich znaku
//
void lcd_putc( char c)
{
 
switch (c)
{
case '\f' : lcd_send_byte(0,1); // smaz displej
delay_ms(2);
break;
case '\n' : lcd_gotoxy(1,2); break; // presun se na 1. znak 2. radky
case '\r' : lcd_gotoxy(1,1); break; // presun home
// case '\b' : lcd_send_byte(0,0x10); break; // posun kurzor o 1 zpet
default : if (c<0x20) c&=0x7; // preklopeni definovatelnych znaku na rozsah 0 az 0x1F
lcd_send_byte(1,c); break; // zapis znak
}
}
 
 
// Zapni kurzor
//
void lcd_cursor_on()
{
lcd_send_byte(0,LCD_CURSOR_ON_);
}
 
 
// Vypni kurzor
//
void lcd_cursor_off()
{
lcd_send_byte(0,LCD_CURSOR_OFF_);
}
 
 
// Smaz displej
//
void lcd_clr()
{
lcd_putc('\f');
}
 
 
// Definice vlastnich fontu
//
// Vlastnich definic muze byt jen 8 do pozic 0 az 7 pameti CGRAM radice lcd displeje
// Pro snadne definovani jsou pripraveny nasledujici definice a na konci souboru je uveden
// priklad pouziti definovanych znaku.
 
 
// Pomocna procedura pro posilani ridicich dat do radice displeje
//
void lcd_putc2(int Data)
{
lcd_send_byte(1,Data);
}
 
 
// Pomocne definice pro programovani obsahu CGRAM
//
#define lcd_define_start(Code) lcd_send_byte(0,0x40+(Code<<3)); delay_ms(2)
#define lcd_define_def(String) printf(lcd_putc2,String);
#define lcd_define_end() lcd_send_byte(0,3); delay_ms(2)
 
 
// Vlastni vykonne makro pro definovani fontu do pozice Index CGRAM s definicnim retezcem Def
//
#define lcd_define_char(Index, Def) lcd_define_start(Index); lcd_define_def(Def); lcd_define_end();
 
 
// Pripravene definice fontu vybranych znaku
// V tabulce nesmi byt 00 (konec retezce v printf()), misto toho davame 80
//
#define LCD_CHAR_BAT100 "\x0E\x1F\x1F\x1F\x1F\x1F\x1F\x1F" /* symbol plne baterie */
#define LCD_CHAR_BAT50 "\x0E\x1F\x11\x11\x13\x17\x1F\x1F" /* symbol polovicni baterie */
 
#define LCD_CHAR_BAT20 "\x0E\x1F\x11\x11\x11\x11\x1F\x1F" /* symbol baterie 20% */
#define LCD_CHAR_BAT40 "\x0E\x1F\x11\x11\x11\x1F\x1F\x1F" /* symbol baterie 40% */
#define LCD_CHAR_BAT60 "\x0E\x1F\x11\x11\x1F\x1F\x1F\x1F" /* symbol baterie 60% */
#define LCD_CHAR_BAT80 "\x0E\x1F\x11\x1F\x1F\x1F\x1F\x1F" /* symbol baterie 80% */
 
#define LCD_CHAR_BAT0 "\x0E\x1F\x11\x11\x11\x11\x11\x1F" /* symbol vybite baterie */
#define LCD_CHAR_UP "\x80\x04\x0E\x15\x04\x04\x04\x80" /* symbol sipka nahoru */
#define LCD_CHAR_DOWN "\x80\x04\x04\x04\x15\x0E\x04\x80" /* symbol Sipka dolu */
#define LCD_CHAR_LUA "\x04\x0E\x11\x11\x1F\x11\x11\x80" /* A s carkou */
#define LCD_CHAR_LLA "\x01\x02\x0E\x01\x1F\x11\x0F\x80" /* a s carkou */
#define LCD_CHAR_HUC "\x0A\x0E\x11\x10\x10\x11\x0E\x80" /* C s hackem */
#define LCD_CHAR_HLC "\x0A\x04\x0E\x10\x10\x11\x0E\x80" /* c s hackem */
#define LCD_CHAR_HUD "\x0A\x1C\x12\x11\x11\x12\x1C\x80" /* D s hackem */
#define LCD_CHAR_HLD "\x05\x03\x0D\x13\x11\x11\x0F\x80" /* d s hackem */
#define LCD_CHAR_LUE "\x04\x1F\x10\x10\x1E\x10\x1F\x80" /* E s carkou */
#define LCD_CHAR_LLE "\x01\x02\x0E\x11\x1F\x10\x0E\x80" /* e s carkou */
#define LCD_CHAR_HUE "\x0A\x1F\x10\x1E\x10\x10\x1F\x80" /* E s hackem */
#define LCD_CHAR_HLE "\x0A\x04\x0E\x11\x1F\x10\x0E\x80" /* e s hackem */
#define LCD_CHAR_LUI "\x04\x0E\x04\x04\x04\x04\x0E\x80" /* I s carkou */
#define LCD_CHAR_LLI "\x02\x04\x80\x0C\x04\x04\x0E\x80" /* i s carkou */
#define LCD_CHAR_HUN "\x0A\x15\x11\x19\x15\x13\x11\x80" /* N s hackem */
#define LCD_CHAR_HLN "\x0A\x04\x16\x19\x11\x11\x11\x80" /* n s hackem */
#define LCD_CHAR_LUO "\x04\x0E\x11\x11\x11\x11\x0E\x80" /* O s carkou */
#define LCD_CHAR_LLO "\x02\x04\x0E\x11\x11\x11\x0E\x80" /* o s carkou */
#define LCD_CHAR_HUR "\x0A\x1E\x11\x1E\x14\x12\x11\x80" /* R s hackem */
#define LCD_CHAR_HLR "\x0A\x04\x16\x19\x10\x10\x10\x80" /* r s hackem */
#define LCD_CHAR_HUS "\x0A\x0F\x10\x0E\x01\x01\x1E\x80" /* S s hackem */
#define LCD_CHAR_HLS "\x0A\x04\x0E\x10\x0E\x01\x1E\x80" /* s s hackem */
#define LCD_CHAR_HUT "\x0A\x1F\x04\x04\x04\x04\x04\x80" /* T s hackem */
#define LCD_CHAR_HLT "\x0A\x0C\x1C\x08\x08\x09\x06\x80" /* t s hackem */
#define LCD_CHAR_LUU "\x02\x15\x11\x11\x11\x11\x0E\x80" /* U s carkou */
#define LCD_CHAR_LLU "\x02\x04\x11\x11\x11\x13\x0D\x80" /* u s carkou */
#define LCD_CHAR_CUU "\x06\x17\x11\x11\x11\x11\x0E\x80" /* U s krouzkem */
#define LCD_CHAR_CLU "\x06\x06\x11\x11\x11\x11\x0E\x80" /* u s krouzkem */
#define LCD_CHAR_LUY "\x02\x15\x11\x0A\x04\x04\x04\x80" /* Y s carkou */
#define LCD_CHAR_LLY "\x02\x04\x11\x11\x0F\x01\x0E\x80" /* y s carkou */
#define LCD_CHAR_HUZ "\x0A\x1F\x01\x02\x04\x08\x1F\x80" /* Z s hackem */
#define LCD_CHAR_HLZ "\x0A\x04\x1F\x02\x04\x08\x1F\x80" /* z s hackem */
 
#define LCD_CHAR_STUPEN "\x06\x09\x09\x06\x80\x80\x80\x80" /* ° stupen C */
 
// Priklad pouziti definovanych znaku
//
//
//void lcd_sample()
//{
// lcd_define_char(0,LCD_CHAR_BAT50); // Priklad definice znaku baterie do pozice 0
// lcd_define_char(2,LCD_CHAR_HLE LCD_CHAR_LUI); // Priklad definice znaku e s hackem a I s carkou od pozice 2
// // vsimnete si, ze neni carka mezi retezci s definici (oba retezce definuji
// // jediny definicni retezec)
// printf(lcd_putc,"\fZnaky:\20\22\23"); // priklad vypisu znaku z pozice 0, 2 a 3
// delay_ms(1000);
// lcd_define_char(0,LCD_CHAR_BAT0); // Predefinovani tvaru znaku v pozici 0
// delay_ms(1000);
//}