<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=22&amp;t=15176&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-04-23T09:44:47+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=22&amp;t=15176&amp;mode</id>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2016-04-23T09:44:47+01:00</updated>
<published>2016-04-23T09:44:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15176&amp;p=159031#p159031</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15176&amp;p=159031#p159031"/>
<title type="html"><![CDATA[Re: [DIY] Cyfrowa stacja lutownicza na bazie projektu Kamila]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15176&amp;p=159031#p159031"><![CDATA[
Bardzo fajny projekt.<br /><br />Namazane ze smarta.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1628">majster</a> — 23 kwi 2016, o 09:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[matrix]]></name></author>
<updated>2016-04-20T21:03:52+01:00</updated>
<published>2016-04-20T21:03:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15176&amp;p=158964#p158964</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15176&amp;p=158964#p158964"/>
<title type="html"><![CDATA[[DIY] Cyfrowa stacja lutownicza na bazie projektu Kamila Sz.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15176&amp;p=158964#p158964"><![CDATA[
<a href="https://obrazkiforum.atnel.pl/689/babbad0142c19952b7b4b550e6ac2a2f.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/689/babbad0142c19952b7b4b550e6ac2a2f.jpg" alt="Obrazek" /></a><br /><br />Chciałem Wam przedstawić jeden z moich wielu projektów własnych czy też zapożyczonych. Projektem tym jest stacja lutownicza wykorzystująca kolbę Solomon 10/20/30 z termoparą typu K.<br />Stacja nie jest tak do końca moim pomysłem i całkowicie podpisać się pod nią nie mogę bo było by to co najmniej nie fair.<br />Projekt jest dzieckiem kolegi Kamila Szkutnika (a przynajmniej u niego na stronie pierwszy raz ją znalazłem). Cały projekt pochodzi z jego strony, która już nie jest dostępna a bynajmniej znaleźć jej nie mogę pod adresem pod jakim do tej pory strona się znajdowała. Ja wniosłem do tegoż projektu kilka poprawek które wynikają z mojego lenistwa i zapominalstwa.<br /><br /><strong>Schemat i opis</strong><br />   Poniżej znajdziecie schemat ideowy stacji i opis który wyjaśni co, po co, dlaczego i do czego? Schemat jest dość chaotyczny bo to były moje pierwsze podrygi w programie eagle a że stacja działa i płytka jest okej to nie wprowadzałem zmian w schemacie.<br /><br /><a href="https://obrazkiforum.atnel.pl/689/ae243d9235d0b7d450f7413ea6ee5ccc.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/689/ae243d9235d0b7d450f7413ea6ee5ccc.png" alt="Obrazek" /></a><br /><br />   Zaczniemy od początku czyli sekcja zasilania. Na wejście CON1 należy podać napięcie zasilające cały układ. Podpinamy tam wtórne uzwojenie transformatora o napięciu 2x12V i mocy około 60VA. Transformator taki można kupić w wielu sklepach, a nie chcąc robić nikomu reklamy nie będę podawał konkretnej lokalizacji.<br />Napięcie wyjściowe prostowane jest przez mostek prostowniczy B1 i podawane na dwa człony stabilizacyjne. Pierwszy człon zasilania to stabilizator napięcia +5V dla procesora a także jego peryferii. Natomiast drugi człon to symetryczny stabilizator napięcia +/- 9V dla wzmacniacza operacyjnego wykrywającego przejście napięcia sieci przez zero oraz dla wzmacniacza który wzmacnia bardzo niewielkie napięcie termopary do poziomu, który spokojnie odczyta sobie serce naszej stacji czyli procesor atmega8.<br />Cała sekcja zasilania jest typowa dla scalonych stabilizatorów z serii 78XX i 79XX i nie ma sensu wdawać się tu w głębsze omawianie tego zagadnienia.<br /><br />   Jako że procesor będzie zbierał dane ze swoich wejść ADC to został on wyposażony w potrzebne kondensatory filtrujące napięcie zasilania. Są to kondensatory C15, C16 oraz C17 i towarzyszący im dławik 10uH. Są to elementy niezbędne do prawidłowej pracy procesora w takiej konfiguracji jak w zaprezentowanym tu projekcie.<br /><br /><a href="https://obrazkiforum.atnel.pl/689/db4191625c322203f567b9826839256f.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/689/db4191625c322203f567b9826839256f.png" alt="Obrazek" /></a><br /><br />Kostka IC1 czyli wzmacniacz LM311 pracuje tu w roli układu wykrywania przejścia napięcia sieci przez zero, choć ostatecznie samo wykrywanie realizowane jest drogą programową. Kolejnym blokiem wartym omówienia, który jest też koniecznym blokiem aby stacja mogła pełnić swoją rolę jest układ IC6 czyli kostka OP07CN. Scalak ten pracuje tu w roli wzmacniacza o wzmocnieniu wyznaczonym stosunkiem rezystancji R9 i R10, a jego wzmocnienie ustawione jest na x100. Układ ten wzmacnia niewielkie napięcie termopary i podaje na jedno z wejść ADC mikrokontrolera. Dioda zenera na wyjściu IC6 zabezpiecza przed sytuacją gdyby przypadkiem pojawiło się tam napięcie wyższe niż napięcie dopuszczalne które można podać na wejście procesora.<br /><br />Kilka słów muszę wspomnieć o sekcji zasilania 230V z dziwnym układem przycisków SW3, SW6, tranzystorem T1 oraz przekaźnikiem Pk1. Moduł ten wraz z odpowiednim fragmentem oprogramowania jest jedną z kilku innowacji jakie wprowadziłem w swojej wersji stacji lutowniczej. Pozwala on na:<br /><ul> <li> tzw miękkie sterowanie (starzy wyjadacze znający sprzęt m.in. Technics'a będą wiedzieć o co chodzi)<br /> </li><li> automatyczne usypianie stacji po upływie określonego czasu (15 min. - dokładnie 14,43)<br /> </li><li> automatyczne wyłączanie stacji po upływie określonego czasu (30 min. - dokładnie 29,22)<br /> </li><li> automatyczne wyłączanie podświetlania lcd po określonym czasie (5 min. - dokładnie 4,54)<br /> </li><li> włączenie podświetlania następuje po naciśnięciu któregokolwiek z przycisków lub podniesieniu kolby<br /> </li><li> automatyczne przejście w stan normalnej pracy po podniesieniu kolby lutownicy</li></ul><br />Powyższe modyfikacje pozwolą mi uniknąć sytuacji kiedy to raz zapomniałem na noc wyłączyć lutownicę i grzała się całą noc... Straszne i niebezpieczne a przede wszystkim &quot;pieniądzożerne&quot;. Ta stacja wyłączy się sama po pół godzinie bezczynności...<br />   Do złącz o nazwach SW3 i SW6 należy podłączyć włącznik chwilowy o stykach NO i z dwoma galwanicznie oddzielonymi sekcjami, ponieważ jedna z sekcji załącza zasilanie 230VAC i trzeba z tym bardzo uważać. Krótko omówię zasadę działania tego bloku.<br />Zacznijmy od sytuacji kiedy stacja jest wyłączona i nie pobiera zupełnie żadnego ale to żadnego prądu. Tranzystor T1 nie podaje zasilania na przekaźnik Pk1 a ten nie zasila transformatora. Naciskamy włącznik który zwiera nam jednocześnie wyprowadzenia SW3 i SW6 i co dzieje się dalej ? Już tłumaczę.<br />   Zwierając SW6 podajemy zasilanie 230V na trafo, niejako zwierając &quot;wysokoprądowe&quot; wyprowadzenia przekaźnika, więc dostarczamy zasilanie na transformator a co za tym idzie na cały układ. Program zapisany wewnątrz mikrokontrolera po kilku chwilach podaje stan wysoki na tranzystor T1, ten zwiera wyprowadzenia przekaźnika i już nie musimy trzymać przycisku wł/wył.  W tym samym czasie zwarty SW3 nie daje żadnego efektu i nie ma wpływu na działanie układu poza wstrzymaniem działania programu do czasu jego puszczenia.<br /><br />   Teraz opiszę sytuację kiedy stacja pracuje a my chcemy ją wyłączyć naciskając przycisk wł/wył. Co się dzieje?<br />Naciśnięcie wł/wył SW6 podaje zasilanie na trafo, ale że ten obwód jest już zwarty przez przekaźnik Pk1 to tutaj nic się nie stanie, lecz...zauważyć trzeba że jednocześnie z SW6 zwieramy SW3 podając stan niski na PINC.4 mikrokontrolera. W programie zdarzenie takie wywołuje podprogram wyłączania stacji lutowniczej. W tym czasie jeśli zmieniła się wartość temp. zadanej to jest ona zapisywana do pamięci eeprom. Zapisywana jest aktualnie ustawiona temperatura i podawany jest stan niski na tranzystor T1 wyłączając całe urządzenie.  Jeśli ktoś nie chce kombinować z szukaniem włącznika z dwiema oddzielonymi galwanicznie sekcjami, to albo wykona na własną rękę taki włącznik na bazie dwóch oddzielnych, zachowując przy tym dalece idącą ostrożność,  albo po prostu założy sobie dwa włączniki i opisze jeden jako włącz a drugi jako wyłącz.<br />Ja w swojej stacji lutowniczej wykorzystałem taki oto włącznik:<br /><br /><a href="https://obrazkiforum.atnel.pl/689/efe21fe344e8dfae042c8d22fd48c1a7.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/689/efe21fe344e8dfae042c8d22fd48c1a7.jpg" alt="Obrazek" /></a><br /><br />Jest to włącznik od jakiegoś odkurzacza nowszej wersji. Przerobiłem go by był to włącznik chwilowy a nie włącz/wyłącz. Przeróbka polegała na usunięciu jednej ze sprężynek odpowiedzialnych za działanie bistabilne.<br /><br />   Wspomnieć tu należy, że zarówno podczas włączania stacji jak i podczas jej wyłączania można przycisk(i) trzymać przez dowolnie długi czas, ponieważ w każdym przypadku program czeka na stan rozwarcia SW3. Jedynymi skutkami ubocznymi będą wydłużone czasy zarówno włączania jak i wyłączania urządzenia.<br /><br /><strong>Obsługa:</strong><br />   Obsługa stacji jest prosta i dość intuicyjna. W mojej pierwszej wersji stacji a tym bardziej w wersji głównego autora przy pierwszym uruchomieniu po zaprogramowaniu procesora należało najpierw wcisnąć przycisk <strong>WIĘCEJ</strong> oraz przycisk <strong>MNIEJ</strong> dzięki czemu wpisywana była pierwsza wartość temperatury gdyż po zaprogramowaniu świeżego procesora wartość owej temperatury wynosi 0. Chcąc jak najbardziej to uprościć najpierw wymuszałem sprawdzanie tylko przycisku <strong>WIĘCEJ</strong>, ale... uznałem że człowiek to &quot;zwierzę&quot; leniwe i chciałem pominąć również i to więc...  wymyśliłem sobie że zaraz po uruchomieniu programu procesor sprawdza parametr zmiennej <strong>NASTAWA</strong> i jeśli wynosi on mniej niż 50 to z automatu wpisywana jest wartość 250st. C.<br /><br />Samo użytkowanie sprowadza się do kilku czynności:<br /> <ul> <li> przycisk <strong>WIĘCEJ</strong> zwiększa wartość żądanej temperatury<br /> </li><li> przycisk <strong>MNIEJ</strong> zmniejsza wartość żądanej temperatury<br /> </li><li> przycisk <strong>UŚPIENIE</strong> wprowadza stację w stan hibernacji obniżając zarówno temperaturę grota (do wartości 60st. C) jak i pobór mocy oraz wyłącza podświetlanie lcd<br /> </li><li> przyciski <strong>ZADANA 1</strong>, <strong>ZADANA 2</strong>, <strong>ZADANA 3</strong> odpowiadają za ustawienie predefiniowanych wartości temperatur do szybkiego wyboru, przy czym zapis zadanych temperatur odbywa się na zasadzie opisanej niżej.<br /> </li><li> przycisku <strong>ON/OFF</strong> yyy, chyba nie trzeba tłumaczyć<br /> </li><li> przycisk <strong>WIECEJ + UŚPIENIE</strong> włącza wyciąg<br /> </li><li> przycisk <strong>MNIEJ + UŚPIENIE</strong> wyłącza wyciąg</li></ul><br /><br />Jeśli chcemy skorzystać z przycisków szybkiego wyboru temperatury <strong>ZADANA 1</strong>, <strong>ZADANA  2</strong> czy <strong>ZADANA 3</strong> to należy przypisać im odpowiednie temperatury. Dokonujemy tego następująco:<br /><ul> <li> przyciskami <strong>WIĘCEJ</strong> lub <strong>MNIEJ</strong> ustawiamy pożądaną temperaturę<br /> </li><li> naciskamy na chwilę przycisk pod który chcemy zapisać wybraną wartość temperatury<br /> </li><li> naciskamy na raz przyciski <strong>WIĘCEJ</strong> oraz <strong>MNIEJ</strong></li></ul><br />        Na wyświetlaczu pojawi się komunikat o zapisie aktualnej temperatury pod dany przycisk a jednocześnie temperatura zapisana zostanie do nieulotnej pamięci mikrokontrolera. Postępujemy tak z wszystkimi trzema przyciskami. Od tej pory pod każdym z guziczków zapisaną mamy temperaturę do szybkiego wyboru. Gdy wciśniemy na chwilę którykolwiek z przycisków, wybrana zostanie jedna z wcześniej zapisanych temperatur. By opuścić tryb &quot;szybkiej temperatury&quot; należy wcisnąć ten sam przycisk który nacisnęliśmy wchodząc w dany tryb. Podobnie jest z trybem uśpienia, by z niego wyjść należy ponownie nacisnąć przycisk <strong>UŚPIENIE</strong>.<br />W trybach <strong>UŚPIENIE</strong>, <strong>ZADANA 1</strong>, <strong>ZADANA 2</strong> oraz <strong>ZADANA 3</strong> nie działają inne przyciski póki nie wyjdziemy z danego trybu. By z nich skorzystać należy wyjść do trybu normalnej pracy stacji. Przy podniesionej kolbie lutownicy nie działa przycisk <strong>UŚPIENIE</strong>, a w zasadzie nie tyle nie działa co podniesiona kolba wybudza stację ze stanu hibernacji. Sądzę że chyba nie jest to kłopotem?<br /><br />   Do odliczania czasów automatycznego usypiania, automatycznego wyłączania czy czasu automatycznego wyłączenia podświetlania wyświetlacza lcd zaprzęgnięty został timer1 który skonfigurowany został tak, że przerwanie wywoływane jest co 1 sekundę. Poszczególne czasy są ustawione na sztywno i wynoszą:<br /><ul> <li> czas podświetlania lcd = ok. 5 minut bezczynności<br /> </li><li> czas do automatycznego uśpienia = ok. 15 minut bezczynności<br /> </li><li> czas do automatycznego wyłączenia = ok. 30 minut bezczynności</li></ul><br />   Każdorazowe naciśnięcie któregokolwiek z przycisków zeruje czas a dodatkowo każde wejście w tryb zadanej temperatury zeruje czas oraz wyłącza jego zliczanie. Podniesienie kolby lutownicy z podstawki zeruje czas i automatycznie włącza normalną pracę jeśli stacja znajdowała się w trybie uśpienia.<br /><br />Panel przedni stworzony został w darmowym programie Inkscape.<br /><br />Program jest przetestowany i już ową stacją lutowałem. Zamierzam wprowadzić jeszcze kilka poprawek o których poinformuję na bieżąco.<br />Stacja nie jest jeszcze w pełni ukończona. Do pełnego ukończenia muszę jeszcze opisać jak zrobiłem wykrywanie odłożenia kolby (zwykły wyłącznik krańcowy) oraz pokazać filmik z działania i obsługi stacji. Filmik jest przygotowywany i powoli się renderuje...<br /><br />W programie występuje kilka razy dyrektywa WAIT której jak wiadomo wszem i wobec używać się nie powinno, ale program nie jest obostrzony timerami czy innymi uwarunkowaniami czasowymi więc mogłem sobie na to pozwolić.<br /><br />Byłbym zapomniał o kodzie źródłowym. Proszę:<br /><br />[syntax=basic4gl]'********************************************************************<br />'*********** STACJA LUTOWNICZA STEROWANA MIKROKONTROLEREM ***********<br />'********************* AUTOR: KAMIL SZKUTNIK ************************<br />'*********************** poprawki by matrix *************************<br />'********************************************************************<br /><br />'$sim<br />$regfile = &quot;m8def.dat&quot;<br />$crystal = 8000000<br />'$prog &amp;HFF , &amp;HE4 , &amp;HDB , &amp;H00                             'fusy dla zegara 8MHz<br /><br />Config Lcd = 16 * 2<br />Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portb.0 , Rs = Portb.1<br />Cls<br />Cursor Off Noblink<br /><br />'Config Portb = &amp;B10000111 ; Portb = 255<br />'Config Portc = &amp;B11100000 ; PORTB = 255<br />'Config Portd = &amp;B11111000 ; Portd = 255<br /><br />Config Pinb.3 = Input<br />Config Pinb.4 = Input<br />Config Pinb.5 = Input<br />Config Portb.6 = Output<br />'Config Pinb.6 = Input<br />Config Portb.7 = Output<br />Config Portd.0 = Output<br />Config Pind.1 = Input<br />Config Pind.2 = Input<br />Config Portd.3 = Output<br />Config Pinc.0 = Input<br />Config Pinc.1 = Input<br />Config Pinc.2 = Input<br />Config Pinc.3 = Input<br />Config Pinc.4 = Input<br />Config Portc.5 = Output<br /><br />Portb = 127                                                 'powinno wyłączyć lcd (255)<br />Portc = 255<br />Portd = 255<br /><br /><br /><br />Kolba_odlozona Alias Pind.1<br />Zero_fazy Alias Pind.2<br />Grzalka Alias Portd.3<br />Wlacz_lcd Alias Portb.7<br />'Enable_procedura Alias Pinb.6<br />Wentylator Alias Portd.0<br />Zadana_1 Alias Pinb.2<br />Zadana_2 Alias Pinb.3<br />Zadana_3 Alias Pinb.4<br />Uspienie Alias Pinc.1<br />Wiecej Alias Pinc.2<br />Mniej Alias Pinc.3<br />Wlacznik Alias Pinc.4<br />Przekaznik Alias Portc.5<br /><br />Set Przekaznik<br /><br /><br />Config Adc = Single , Prescaler = Auto , Reference = Avcc<br />Config Timer1 = Timer , Prescale = 256<br />Enable Interrupts<br />'Stop Timer0<br />Enable Timer1<br />Timer1 = 34286<br />On Timer1 Przerwanie<br />Stop Timer1<br />Start Adc<br /><br />Dim Zm_dla_odl_kolby As Bit<br />Dim Licz_czas As Single<br />Dim Nastawa As Single<br />Dim Nastawa_temp As Single<br />Dim Temp_1 As Single<br />Dim Temp_2 As Single<br />Dim Temp_3 As Single<br />Dim Wart_ac As Word<br />Dim V As Single<br />Dim Wart_nap As String * 2<br />Dim Temp As Single<br />Dim Temp_lcd As String * 1<br />Dim Do_wylaczenia As Byte<br />'Dim T_podswietlania As Single<br />'Dim T_usypiania As Single<br />'Dim T_wylaczania As Single<br />'Dim Trzymany_przycisk As Word<br />'Trzymany_przycisk = 0<br /><br />Bitwait Wlacznik , Set<br />Waitms 500<br /><br />Cls<br />Cursor Off Noblink<br />Waitms 250<br />Home<br />Set Wlacz_lcd                                               'włączam podświetlanie lcd<br />Lcd &quot;**   STACJA   **&quot;<br />Lowerline<br />Lcd &quot;*  LUTOWNICZA  *&quot;<br />Wait 2<br />Deflcdchar 0 , 12 , 18 , 18 , 12 , 32 , 32 , 32 , 32        'znaczek st C<br />Deflcdchar 1 , 4 , 14 , 17 , 16 , 14 , 1 , 17 , 14          'literka ś<br />Deflcdchar 2 , 4 , 14 , 31 , 32 , 4 , 14 , 31 , 32          'strzałki w górę<br />Deflcdchar 3 , 32 , 31 , 14 , 4 , 32 , 31 , 14 , 4          'strzałki w dół<br />Cls<br /><br />Zm_dla_odl_kolby = 0<br />Licz_czas = 0<br /><br />Readeeprom Nastawa , 2<br />Readeeprom Temp_1 , 8<br />Readeeprom Temp_2 , 14<br />Readeeprom Temp_3 , 20<br /><br />'================================================================================================<br />'procedura ustawiająca 250 st.C uruchamiana tylko raz, za pierwszym razem<br /><br /> If Nastawa &lt; 50 Then<br />   Nastawa = 250                                            'nastawa wyniesie 250<br />   Home<br />   Lcd &quot;Nastawa=&quot; ; Nastawa ; Chr(0) ; &quot;C    &quot;<br />   Cls<br /> End If<br /> '================================================================================================<br /><br />Do                                                          'tu zaczyna się pętla główna<br /><br />'================================================================================================<br />'sprawdzanie czy chcemy wyłączyć stację<br /><br /> If Wlacznik = 0 Then                                       'jeśli naciśniemy przycisk wyłączania to<br />    Bitwait Wlacznik , Set<br />    Gosub Procedura_wylaczania                              'skocz do podprogramu wyłączania stacji<br /> End If<br />'================================================================================================<br /><br /><br />'================================================================================================<br />'sprawdzanie aktywności stacji<br />'jeśli naciśniemy jakikolwiek przycisk to<br /><br /> If Wiecej = 0 Or Mniej = 0 Or Zadana_1 = 0 Or Zadana_2 = 0 Or Zadana_3 = 0 Then<br />    Licz_czas = 0                                           'czas zaczynamy liczyć od nowa<br />    Set Wlacz_lcd                                           'włącz podświetlanie lcd<br /> End If<br />'================================================================================================<br /><br /> '================================================================================================<br /> 'ta sekcja sprawdza czy kolba jest odłożona ?<br /><br /> If Kolba_odlozona = 0 Then                                 'jeśli kolba jest położona<br />    Locate 1 , 16<br />    Lcd Chr(3)                                              'powinno wyświetlić dwie strzałki w górę<br />    If Zm_dla_odl_kolby = 0 Then                            'i zmienna pomocnicza =0<br />       Start Timer1                                         'to rozpocznij zliczanie<br />       Zm_dla_odl_kolby = 1                                 'zmień stan zmiennej pomocniczej na 1 żeby timer nie był już startowany<br />    End If<br /><br />    If Licz_czas = 900 Then Gosub Usypianie                 'jeśli kolba leży 900 sekund (15 minut) default is 900<br /><br />    If Licz_czas &gt; 300 Then                                 'default is 300<br />       Reset Wlacz_lcd                                      'jeśli czas od ostatniego naciśnięcia przycisku jest &gt; 5min. to<br />      Else                                                  'wyłącz podświetlanie<br />       Set Wlacz_lcd<br />    End If<br />  Else<br />    Locate 1 , 16<br />    Lcd Chr(2)                                              'powinno wyświetlić dwie strzałki w dół<br />    Stop Timer1                                             'zatrzymaj timer<br />    Zm_dla_odl_kolby = 0                                    'wyzeruj wartość zmiennej pomocniczej odłożenia kolby<br />    Licz_czas = 0                                           'i zerujemy wartość zliczania czasu<br /> End If<br /> '================================================================================================<br /><br /> '================================================================================================<br /> 'tu po raz pierwszy robimy pomiar temperatury<br /><br /> Gosub Pomiar_temp<br /> Gosub Sterowanie_grzalka<br /> '================================================================================================<br /><br />'================================================================================================<br />'sprawdzamy czy kolba jest podłączona<br /><br /> If Temp &gt; 800 Then                                         'jeśli jest zbyt duże napięcie  to może oznaczać niepodłączoną kolbę<br />    Gosub Spr<br />   Else                                                     'skocz do poprogramy wyświetlenia info o tym<br />     Home<br />     Lcd &quot;Temp:&quot; ; Temp_lcd ; Chr(0) ; &quot;C&quot; ; &quot;   &quot;          'wyświetlamy wartość temp. z pomiaru<br />     Lowerline<br />     Lcd &quot;Nastawa:&quot; ; Nastawa ; Chr(0) ; &quot;C&quot; ; &quot;  &quot;         'a w dolnej linii pokazujemy wartość nastawy<br />End If<br />'================================================================================================<br /><br />'================================================================================================<br />'tu zaczyna się sekcja sprawdzania naciskanych przycisków<br /><br /> If Uspienie = 0 And Wiecej = 1 And Mniej = 1 And Kolba_odlozona = 0 Then       'jeśli kolba jest odłożona i wciśniemy przycisk uśpienie<br />    Waitms 150<br />    Licz_czas = 0                                           'zerujemy czas<br />    Set Wlacz_lcd                                           'włączamy podświetlanie lcd<br />    Gosub Usypianie                                         'i skaczemy do podprogramu UŚPIENIE<br /> End If<br />'================================================================================================<br /><br />'================================================================================================<br />'ta procedura spowoduje włączenie nawiewu jeśli wciśniemy na raz  przyciski UŚPIENIE i WIĘCEJ<br /><br />If Uspienie = 0 And Wiecej = 0 And Mniej = 1 Then<br />   Waitms 50<br />   Reset Wentylator<br />End If<br /><br />'================================================================================================<br /><br />'================================================================================================<br />'ta procedura spowoduje wyłączenie nawiewu jeśli wciśniemy na raz  przyciski UŚPIENIE i MNIEJ<br /><br />If Uspienie = 0 And Wiecej = 1 And Mniej = 0 Then<br />   Waitms 50<br />   Set Wentylator<br />End If<br /><br />'================================================================================================<br /><br />'================================================================================================<br />'sekcja sprawdzania czy naciskamy przycisk zwiększania porządanej temperatury<br /><br /> If Wiecej = 0 And Temp &lt; 800 Then                          'jeśli naciśniemy przycisk WIĘCEJ<br />    Waitms 50<br />    If Wiecej = 0 And Uspienie = 1 Then<br />       If Nastawa &lt; 500 Then                                'i jeśli wartość zmiennej NASTAWA jest mniejsza niż wymagane maximum<br />          Nastawa = Nastawa + 10                            'to wartość nastawionej temp. zwiększa się o 10st. C<br />          Waitms 50<br />       End If<br />    End If<br /> End If<br />'================================================================================================<br /><br />'================================================================================================<br />'sekcja sprawdzania czy naciskamy przycisk zmniejszania porządanej temperatury<br /><br /> If Mniej = 0 And Temp &lt; 800 Then                           'jeśli naciśniemy przycisk MNIEJ<br />    Waitms 50<br />    If Mniej = 0 And Uspienie = 1 Then<br />       If Nastawa &gt; 50 Then                                 'i jeśli wartość zmiennej NASTAWA jest większa niż wymagane minimum<br />          Nastawa = Nastawa - 10                            'to zmniejszamy wartość rządanej temp. o 10st. C<br />          Waitms 50<br />       End If<br />    End If<br /> End If<br />'================================================================================================<br /><br />'================================================================================================<br />'sekcja sprawdzania czy wybierzemy którąś z temperatur szybkiego wyboru<br /><br />If Zadana_1 = 0 Then                                        'jeśli wybierzemy temp zadaną 1 i nie jest włączone uśpienie<br />   Licz_czas = 0                                            'czas zaczynamy liczyć od nowa<br />   Set Wlacz_lcd                                            'włącz podświetlanie lcd<br />   Bitwait Zadana_1 , Set<br />   Gosub Odczyt_zadana_1<br />End If<br />If Zadana_2 = 0 Then                                        'jeśli wybierzemy temp 2 i nie jest włączone uśpienie<br />   Licz_czas = 0                                            'czas zaczynamy liczyć od nowa<br />   Set Wlacz_lcd                                            'włącz podświetlanie lcd<br />   Bitwait Zadana_2 , Set<br />   Gosub Odczyt_zadana_2<br />End If<br />If Zadana_3 = 0 Then                                        'jeśli wybierzemy temp 3 i nie jest włączone uśpieni<br />   Licz_czas = 0                                            'czas zaczynamy liczyć od nowa<br />   Set Wlacz_lcd                                            'włącz podświetlanie lcd<br />   Bitwait Zadana_3 , Set<br />   Gosub Odczyt_zadana_3<br />End If<br /><br />Loop                                                        'koniec pętli głownej<br />End<br />'================================================================================================<br /><br />'***********************************<br />'*** podprogram usypiania stacji ***<br />'***********************************<br />Usypianie:<br />'================================================================================================<br />    'Reset Wlacz_lcd                                         'wyłączamy podświetlanie<br />    Nastawa_temp = Nastawa                                  'wpisujemy aktualne ustawienia do zmiennej tymczasowej<br />    Nastawa = 60                                            'nastawa przyjmuje wartość 60<br />     Locate 2 , 1<br />      Lcd &quot;U&quot; ; Chr(1) ; &quot;PIENIE -&gt; 60&quot; ; Chr(0) ; &quot;C&quot;<br />       Bitwait Uspienie , Set                               'i program czeka na puszczenie przycisku UŚPIEINIE<br />         Do<br />           Gosub Pomiar_temp<br />           Gosub Sterowanie_grzalka<br /><br />           If Licz_czas = 1800 Then Gosub Procedura_wylaczania       'jeśli kolba leży 1800 sekund (30 minut)<br />           If Licz_czas = 60 Then Reset Wlacz_lcd           'wyłączamy podświetlanie<br /><br />           If Temp &gt; 800 Then                               'jeśli procesor wykryje napięcie zbyt duże<br />              Gosub Spr                                     'sprawdź czy podłączona lutownica<br />            Else<br />              Home<br />              Lcd &quot;Temp:&quot; ; Temp_lcd ; Chr(0) ; &quot;C&quot; ; &quot;    &quot;<br />           End If<br /><br />           If Uspienie = 0 Or Kolba_odlozona &lt;&gt; 0 Then<br />              Nastawa = Nastawa_temp<br />              Licz_czas = 0<br />              Start Timer1<br />              Bitwait Uspienie , Set<br />              Set Wlacz_lcd                                 'włączamy podświetlanie<br />              Exit Do<br />           End If<br />         Loop<br />Return<br />'================================================================================================<br /><br />'*************************************<br />'*** podprogram sterowania grzałką ***<br />'*************************************<br /><br />'tu sterujemy grzałką<br /><br />Sterowanie_grzalka:<br />   Temp = Temp + 5                                          'temperatura po włączeniu grzałki skacze o 10 stopni w gorę<br />                                                            'dzięki temu załączanie grzałki odbywa się 5st. niżej niż ustawiona i skacze do 5 stopni<br />                                                            'wyżej niż ustawiona<br />If Nastawa &gt; Temp Then                                      'jeśli ustawiona temp. większa niż aktualna temp<br />    Bitwait Zero_fazy , Set                                 'program czeka aż zmienna ZERO_FAZY przyjmie wartość 1 zaraz po 0<br />    Grzalka = 1                                             'i włączy grzałkę lutownicy<br />  Else<br />    Grzalka = 0                                             'lub jeśli nie są spełnione powyższe warunki to grzałka pozostanie wyłączona<br />End If<br />Return<br />'================================================================================================<br /><br />'*************************************<br />'*** podprogram pomiaru temperaury ***<br />'*************************************<br /><br />Pomiar_temp:<br /> Wart_ac = 0<br /> Wart_ac = Getadc(0)                                        'pobieranie wartości napięcia (temp grzałki)<br />  Waitms 100<br />   V = Wart_ac * 0.0049                                     'konwersja na temp. celsjusza<br />   Temp = V * 260                                           'to obliczenie wstępnie ustawia temperaturę zwiększając jej wartość<br />   Temp = Temp + 20                                         'o temperaturę w pokoju w lecie na poziomie około 26st<br />                                                            'wcześniej było 260 po zmianie 180<br />                                                            'powinien zostać zastosowany czujnik z jednym pomiarem podczas włączenia<br />   Temp_lcd = Fusing(temp , &quot;#.#&quot;)<br />Return<br />'================================================================================================<br /><br />'********************************<br />'*** podprogram tem zadanej 1 ***<br />'********************************<br /><br />Zapis_zadana_1:<br />   Stop Timer1<br />   Licz_czas = 0                                            ' zerujemy wartość zliczania czasu<br />      Temp_1 = Nastawa                                      'przypisuję wartość aktualnie nastawionej temp do zadanej_1<br />      Writeeeprom Temp_1 , 8<br />      Home<br />      'Waitms 100<br />      Lcd &quot;Zapisano Temp. 1 &quot;                               'wyświetl info o zapisie temp zadanej nr1<br />      Bitwait Zadana_1 , Set<br />      Wait 1<br />      Start Timer1<br />Return<br />'================================================================================================<br /><br />Odczyt_zadana_1:<br />      Stop Timer1<br />      Licz_czas = 0                                         ' zerujemy wartość zliczania czasu<br />      Readeeprom Temp_1 , 8                                 'odczytuję wartość wcześniej ustawionej temp zadanej nr1<br />      Do<br />       Gosub Pomiar_temp                                    'wykonuję pomiar temperatury<br /><br />       If Temp &gt; 800 Then                                   'jeśli procesor wykryje napięcie zbyt duże<br />          Gosub Spr                                         'skocz do podprogramu spr podłączenia grzałki<br />        Else<br />          Home<br />          Lcd &quot;Temp:&quot; ; Temp_lcd ; Chr(0) ; &quot;C&quot; ; &quot;    &quot;<br />          Locate 2 , 1<br />          Lcd &quot;Zadana 1 &quot; ; Temp_1 ; Chr(0) ; &quot;C&quot; ; &quot;  &quot;    'pokazując wartość nastawy<br />       End If<br /><br />       If Temp_1 &gt; Temp Then                                'jeśli nastawa mniejsza niż aktualna temp<br />          Bitwait Zero_fazy , Set                           'program czeka aż zmienna ZERO_FAZY przyjmie wartość 1 zaraz po 0<br />          Grzalka = 1                                       'i włączy grzałkę lutownicy<br />         Else<br />           Grzalka = 0                                      'lub jeśli nie są spełnione powyższe warunki to grzałka pozostanie wyłączona<br />       End If<br /><br />       If Mniej = 0 And Wiecej = 0 Then                     'taki zapis spowoduje od razu wyjście z podprogramu zadana<br />          Gosub Zapis_zadana_1<br />          Exit Do<br />       End If<br /><br />       If Zadana_1 = 0 Then                                 'sprawdzam czy naciśnięto przycisk temp zadanej 1<br />          Bitwait Zadana_1 , Set<br />          Waitms 50<br />          Exit Do                                           'jeśli tak to wychodzę z podprogramu temp zadanej<br />       End If<br />      Loop<br />   Start Timer1<br />Return<br />'================================================================================================<br /><br /><br />'********************************<br />'*** podprogram tem zadanej 2 ***<br />'********************************<br /><br />Zapis_zadana_2:<br />   Stop Timer1<br />   Licz_czas = 0                                            ' zerujemy wartość zliczania czasu<br />   Temp_2 = Nastawa                                         'przypisuję wartość aktualnie nastawionej temp do zadanej_2<br />   Writeeeprom Temp_2 , 14<br />   Home<br />      'Waitms 100<br />      Lcd &quot;Zapisano Temp.2 &quot;<br />      Bitwait Zadana_2 , Set<br />      Wait 1<br />      Start Timer1<br />Return<br />'================================================================================================<br /><br />Odczyt_zadana_2:<br />      Stop Timer1<br />      Licz_czas = 0<br />      Readeeprom Temp_2 , 14                                'odczytuję wartość wcześniej ustawionej temp zadanej nr2<br />      Do<br />        Gosub Pomiar_temp                                   'wykonuję pomiar<br />        If Temp &gt; 800 Then                                  'jeśli procesor wykryje napięcie zbyt duże<br />           Gosub Spr                                        'skocz do podprogramu spr podłączenia grzałki<br />         Else<br />           Home<br />           Lcd &quot;Temp:&quot; ; Temp_lcd ; Chr(0) ; &quot;C&quot; ; &quot;    &quot;<br />            Locate 2 , 1<br />           Lcd &quot;Zadana 2 &quot; ; Temp_2 ; Chr(0) ; &quot;C&quot; ; &quot;  &quot;   'pokazując wartość nastawy<br />        End If<br /><br />        If Temp_2 &gt; Temp Then                               'jeśli nastawa mniejsza niż aktualna temp<br />           Bitwait Zero_fazy , Set                          'program czeka aż zmienna ZERO_FAZY przyjmie wartość 1 zaraz po 0<br />           Grzalka = 1                                      'i włączy grzałkę lutownicy<br />          Else<br />            Grzalka = 0                                     'lub jeśli nie są spełnione powyższe warunki to grzałka pozostanie wyłączona<br />        End If<br /><br />        If Mniej = 0 And Wiecej = 0 Then                    'taki zapis spowoduje od razu wyjście z podprogramu zadana<br />           Gosub Zapis_zadana_2<br />           Exit Do<br />        End If<br /><br />        If Zadana_2 = 0 Then                                'sprawdzam czy naciśnięto przycisk temp zadanej 2<br />           Bitwait Zadana_2 , Set<br />           Waitms 50<br />           Exit Do                                          'jeśli tak to wychodzę z podprogramu temp zadanej<br />        End If<br />      Loop<br />   Start Timer1<br />Return<br />'================================================================================================<br /><br /><br />'********************************<br />'*** podprogram tem zadanej 3 ***<br />'********************************<br /><br />Zapis_zadana_3:<br />   Stop Timer1<br />   Licz_czas = 0                                            ' zerujemy wartość zliczania czasu<br />   'Trzymany_przycisk = 0<br />   Temp_3 = Nastawa                                         'przypisuję wartość aktualnie nastawionej temp do zadanej_3<br />   Writeeeprom Temp_3 , 20<br />      Home<br />      'Waitms 100<br />      Lcd &quot;Zapisano Temp.3 &quot;                                'wyswietlam info o tym<br />      Bitwait Zadana_3 , Set<br />      Wait 1<br />      Start Timer1<br />Return<br />'================================================================================================<br /><br />Odczyt_zadana_3:<br />      Stop Timer1<br />      Licz_czas = 0<br />      Readeeprom Temp_3 , 20                                'odczytuję wartość wcześniej ustawionej temp zadanej nr3<br />      Do<br />        Gosub Pomiar_temp                                   'wykonuję pomiar<br />        If Temp &gt; 800 Then                                  'jeśli procesor wykryje napięcie zbyt duże<br />           Gosub Spr                                        'sprawdź czy podłączona lutownica<br />         Else<br />           Home<br />           Lcd &quot;Temp:&quot; ; Temp_lcd ; Chr(0) ; &quot;C&quot; ; &quot;    &quot;<br />            Locate 2 , 1<br />           Lcd &quot;Zadana 3 &quot; ; Temp_3 ; Chr(0) ; &quot;C&quot; ; &quot;  &quot;   'pokazując wartość nastawy<br />        End If<br /><br />        If Temp_3 &gt; Temp Then                               'jeśli nastawa mniejsza niż aktualna temp<br />           Bitwait Zero_fazy , Set                          'program czeka aż zmienna ZERO_FAZY przyjmie wartość 1 zaraz po 0<br />           Grzalka = 1                                      'i włączy grzałkę lutownicy<br />          Else<br />            Grzalka = 0                                     'lub jeśli nie są spełnione powyższe warunki to grzałka pozostanie wyłączona<br />        End If<br /><br />        If Mniej = 0 And Wiecej = 0 Then                    'taki zapis spowoduje od razu wyjście z podprogramu zadana<br />           Gosub Zapis_zadana_3<br />           Exit Do<br />        End If<br /><br />        If Zadana_3 = 0 Then                                'sprawdzam czy naciśnięto przycisk temp zadanej 3<br />           Bitwait Zadana_3 , Set<br />           Waitms 50<br />           Exit Do                                          'jeśli tak to wychodzę z podprogramu temp zadanej<br />        End If<br />      Loop<br />   Start Timer1<br />Return<br />'================================================================================================<br /><br /><br />'********************************************<br />'*** Procedura wyłączania, Tak dla bajeru ***<br />'********************************************<br /><br />Procedura_wylaczania:<br />    Set Wlacz_lcd<br />    Reset Grzalka<br /><br />    '**********************************************<br />    '*** minimalizacja ilości zapisów do eeprom ***<br />    '**********************************************<br />       Nastawa_temp = Nastawa                               'zmienne temp &#91;przypisuję na chwilę wartość aktualnej nastawy<br />       Readeeprom Nastawa , 2                               'odczytuję wartość nastawy z pamięci eprom<br />       If Nastawa &lt;&gt; Nastawa_temp Then                      'porównuję czy wartość jest inna i jeśli jest inna to<br />          Nastawa = Nastawa_temp                            'przepisuję z powrotem nową wartość<br />          Writeeeprom Nastawa , 2                           'i zapisuję do pamięci<br />          Cls<br />          Home<br />          Lcd &quot;     Zapis      &quot;                            'w górnej linii wpisuję wyraz Zapis<br />          Waitms 500                                        'czekamy 500 ms<br />       End If<br />     '*****************************************************************<br />     '*** Powyższy kawalek kodu zminimalizuje zapis temperatury *******<br />     '*** do pamięci eeprom. Jeśli po włączeniu stacji lutowniczej ****<br />     '*** będziemy mieć powiedzmy 250st.C i przy wyłączaniu również ***<br />     '*** to stacja nie nadpisze temperatury do pamięci eeprom co *****<br />     '************* powinno wydłużyć życie procesora ******************<br />     '*****************************************************************<br /><br />    Deflcdchar 0 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31    'definiuję zaciemnione pole na lcd<br />    Cls<br />      Home                                                  'wracamy do pola nr 1 w górnej linii<br />      Lcd &quot;   Wylaczanie   &quot;<br />      'If Enable_procedura = 0 Then                          'jeśli założona zworka to<br />       'Do_wylaczenia = 1                                    'zmienna potrzebna do określenia miejsca na lcd<br />         Do_wylaczenia = 16                                 'dla zmiennej Do_wylaczenia = od 1 do 16<br />             Locate 2 , 1<br />             Lcd Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0) ; Chr(0);<br />             'Incr Do_wylaczenia                             'powinno nastąpić to tak szybko że od razu zobaczymy całą linię ciemną<br />           For Do_wylaczenia = 16 To 1 Step -1              'dla zmiennej Do_wylaczenia od 16 do 1 z krokiem -1<br />               Locate 2 , Do_wylaczenia                     'znajdź w dolnej linii kolejne pola od końca<br />               Lcd &quot; &quot;                                      'i w każde wpisz pusty znak<br />               Waitms 500<br />           Next<br />      'End If<br />         Waitms 250                                         'poczekaj 350 ms<br />         Reset Przekaznik                                   'i wyłącz stację<br />         'Set Przekaznik                                     'do testów na płytce propox<br />Return<br />'================================================================================================<br /><br />'*********************************************<br />'*** podprogram wyświetlania że brak kolby ***<br />'*********************************************<br /><br />Spr:<br />  Home                                                      'co znaczy że nie podłączono grzałki<br />   Lcd &quot; Podlacz raczke &quot;                                   'poprosi o jej podłaczenie<br />     Locate 2 , 1<br />   Lcd &quot;   lutownicy!   &quot;<br />Return<br />'================================================================================================<br /><br />Przerwanie:<br />   Stop Timer1<br />   Incr Licz_czas<br /><br />     'Toggle Portd.0<br /><br />   Timer1 = 34286<br />   Start Timer1<br />Return<br />'================================================================================================[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=689">matrix</a> — 20 kwi 2016, o 21:03</p><hr />
]]></content>
</entry>
</feed>