' * ' * Projekt név ' Digitális forrasztóállomás ' * ' MCU: PIC16F88 ' OSC: HS, 20.0000 MHz ' * program Digitalis_forrasztoallomas dim szam, kapcs, mertekegyseg, tvalos as word dim egy, ketto, harom, negy, ot, hat, seebeck, term, u0, uoffs18, adc1, adc0, szam2, szam3 as float dim szamok as string[5] const ii as byte[8] = (2,4,12,4,4,4,14,0) const aa as byte[8] = (2,4,14,1,15,17,15,0) const oo as byte[8] = (2,4,14,17,17,17,14,0) const fok as byte[8] = (6,9,9,6,0,0,0,0) '"í" betű sub procedure i(dim pos_row as byte, dim pos_char as byte) dim i as byte LCD_Cmd(64) for i = 0 to 7 LCD_Chr_Cp(ii[i]) next i LCD_Cmd(LCD_RETURN_HOME) LCD_Chr(pos_row, pos_char, 0) end sub '"á" betű sub procedure a(dim pos_row as byte, dim pos_char as byte) dim i as byte LCD_Cmd(72) for i = 0 to 7 LCD_Chr_Cp(aa[i]) next i LCD_Cmd(LCD_RETURN_HOME) LCD_Chr(pos_row, pos_char, 1) end sub '"ó" betű sub procedure o(dim pos_row as byte, dim pos_char as byte) dim i as byte LCD_Cmd(80) for i = 0 to 7 LCD_Chr_Cp(oo[i]) next i LCD_Cmd(LCD_RETURN_HOME) LCD_Chr(pos_row, pos_char, 2) end sub '"°" jel sub procedure fokjel(dim pos_row as byte, dim pos_char as byte) dim i as byte LCD_Cmd(88) for i = 0 to 7 LCD_Chr_Cp(fok[i]) next i LCD_Cmd(LCD_RETURN_HOME) LCD_Chr(pos_row, pos_char, 3) end sub 'kívánt + 1 sub procedure hozzaad() szam = szam + 1 if szam = 451 then szam = 1 end if end sub 'kívánt - 1 sub procedure kivon() szam = szam - 1 if szam = 0 then szam = 450 end if end sub '"Kívánt:" kiírása sub procedure kiir_kivant() Lcd_out(1, 1, "K v nt: ") i(1, 2) a(1, 4) end sub 'kívánt értékének kiírása celsiusban sub procedure kivant_celsius() WordToStr(szam, szamok) Lcd_out(1, 9, szamok) end sub 'kívánt értékének kiírása kelvinben sub procedure kivant_kelvin() szam2 = szam+273 WordToStr(szam2, szamok) Lcd_out(1, 9, szamok) end sub 'kívánt értékének kiírása fahrenheitben sub procedure kivant_fahrenheit() szam2 = szam*9/5+32 WordToStr(szam2, szamok) Lcd_out(1, 9, szamok) end sub '"Valós:" kiírása sub procedure kiir_valos() Lcd_out(2, 1, "Val s: ") o(2, 4) end sub 'valós értékének kiírása celsiusban sub procedure valos_celsius() WordToStr(tvalos, szamok) Lcd_out(2, 9, szamok) end sub 'valós értékének kiírása kelvinben sub procedure valos_kelvin() szam3 = tvalos+273 WordToStr(szam3, szamok) Lcd_out(2, 9, szamok) end sub 'valós értékének kiírása fahrenheitben sub procedure valos_fahrenheit() szam3 = tvalos*9/5+32 WordToStr(szam3, szamok) Lcd_out(2, 9, szamok) end sub 'kívánt értékének kiírása sub procedure kivant() if mertekegyseg = 1 then kivant_celsius() else if mertekegyseg = 2 then kivant_kelvin() else kivant_fahrenheit() end if end if end sub 'valós értékének kiírása sub procedure valos() adcon0=%10001001 'AN1 analóg csatorna Delay_ms(1) 'adatgyűjtési idő adcon0=%10001101 'konverzió indul - GO/DONE bit 1 Delay_ms(1) 'konverzió befejeződéséig várakozás adc1 = Adc_Read(1) 'feszültség meghatározása az egy = adc1*5/1024 'AN1-en adcon0=%10000001 'AN0 analóg csatorna Delay_ms(1) 'adatgyűjtési idő adcon0=%10000101 'konverzió indul - GO/DONE bit 1 Delay_ms(1) 'konverzió befejeződéséig várakozás adc0 = Adc_Read(0) 'feszültség meghatározása az ketto = adc0*5/1024 'AN0-án 'hőelem (melegpont) hőmérséklet számítása seebeck = 203/25000 'seebeck állandó harom = egy - uoffs18 'hőelemen mért feszültség kompenzálása offset feszültség kivonásával negy = harom/seebeck 'művelet ot = ketto-u0 'művelet, termisztoron mért feszültségből kivonja a 0 °C-on mért feszültséget(offset feszültséggel együtt) term = 571/100000 'termisztorra jellemző állandó hat = ot/term 'művelet tvalos = negy + hat 'végső művelet if mertekegyseg = 1 then valos_celsius() else if mertekegyseg = 2 then valos_kelvin() else valos_fahrenheit() end if end if end sub 'mértékegység-váltás sub procedure mertegy() if mertekegyseg = 1 then fokjel(1, 15) Lcd_out(1, 16, "C") fokjel(2, 15) Lcd_out(2, 16, "C") else if mertekegyseg = 2 then Lcd_out(1, 15, " K") Lcd_out(2, 15, " K") else fokjel(1, 15) Lcd_out(1, 16, "F") fokjel(2, 15) Lcd_out(2, 16, "F") end if end if end sub main: trisa=%11111011 'RA2 kimenet, többi bemenet trisb=%00000011 'RB0-RB1 bemenet, többi kimenet ansel=%00000011 'RA0-RA1 analóg, többi digitális intcon=%00000000 'megszakítások letiltása adcon1=%00000000 'referencia feszültség VDD-VSS Lcd_Config(PORTB, 7, 6, 5, 4, PORTB, 2, 2, 3) 'lcd csatlakozása szam = 375 'bekapcsolásnál alap hőmérséklet kapcs = 1 'bekapcsolásnál 0=fűtés kikapcsolva, 1=fűtés bekapcsolva mertekegyseg = 1 'bekapcsolásnál 1=celsius, 2=kelvin, 3=fahrenheit u0 = 173/50 'termisztoron mérhető feszültség 0 °C-on(offset feszültség is bele van számítva) uoffs18 = 17/200 '18-as lábon mérhető offset feszültség Lcd_Cmd(Lcd_CURSOR_OFF) 'üdvözlőképernyő 4 másodpercig Lcd_out(1, 4, "Digit lis") a(1, 9) Lcd_out(2, 1, "forraszt llom s") o(2, 9) a(2, 10) a(2, 15) Delay_ms(4000) Lcd_cmd(Lcd_Clear) if kapcs = 0 then mertegy() 'mérékegység kiírása Lcd_out(1, 1, " Kikapcsolva ") '"Kikapcsolva" kiírása kiir_valos() '"Valós:" kiírása else kiir_kivant() '"Kívánt:" kiírása kiir_valos() '"Valós:" kiírása kivant() 'kívánt értékének kiírása mertegy() 'mérékegység kiírása end if while TRUE 'végtelen ciklus '----------------- 'fűtés kikapcsolva '----------------- if kapcs = 0 then porta.2 = 0 'fűtés kikapcsolva valos() 'valós értékének kiírása if Button(PORTB, 1, 1, 0) then kiir_kivant() '"Kívánt:" kiírása kivant() 'kívánt értékének kiírása mertegy() 'mérékegység kiírása kapcs = 1 'fűtés engedélyezése end if Delay_ms(200) end if '----------------- 'fűtés bekapcsolva '----------------- if kapcs = 1 then valos() 'valós értékének kiírása if szam <= tvalos then 'a kívánt és a valós érték összehasonlítása porta.2=0 'ha kívánt <= valós akkor a fűtés kikapcsol else porta.2=1 'ha nem, akkor a fűtés bekapcsol end if if Button(PORTB, 1, 1, 0) then hozzaad() 'kívánt + 1 kivant() 'kívánt értékének kiírása end if if Button(PORTB, 0, 1, 0) then kivon() 'kívánt - 1 kivant() 'kívánt értékének kiírása end if if Button(PORTB, 0, 1, 0) and Button(PORTB, 1, 1, 0) then Lcd_out(1, 1, " Kikapcsolva ") '"Kikapcsolva" kiírása kapcs = 0 'fűtés tiltása end if if Button(PORTA, 3, 1, 0) then szam = 310 '200-ra ugrás Illetve 310-re kivant() 'kívánt értékének kiírása end if if Button(PORTA, 4, 1, 0) then szam = 300 '300-ra ugrás kivant() 'kívánt értékének kiírása end if if Button(PORTA, 5, 1, 0) then szam = 425 '400-ra ugrás Illetve 425-re kivant() 'kívánt értékének kiírása end if if Button(PORTA, 3, 1, 0) and Button(PORTA, 4, 1, 0) then mertekegyseg = 1 'mértékegység vátása celsiusra kivant() 'kívánt értékének kiírása mertegy() 'mérékegység kiírása end if if Button(PORTA, 4, 1, 0) and Button(PORTA, 5, 1, 0) then mertekegyseg = 2 'mértékegység vátása kelvinre kivant() 'kívánt értékének kiírása mertegy() 'mérékegység kiírása end if if Button(PORTA, 3, 1, 0) and Button(PORTA, 5, 1, 0) then mertekegyseg = 3 'mértékegység vátása fahrenheitre kivant() 'kívánt értékének kiírása mertegy() 'mérékegység kiírása end if Delay_ms(200) end if wend end.