DIY Cyfrowa stacja lutownicza na bazie projektu Kamila Sz.


Na wstępie apeluję i bardzo proszę o zachowanie szczególnej ostrożności, gdyż w niektórych miejscach płytki występuje pełne napięcie sieci 230VAC.
Nie zachowanie ostrożności może grozić śmiercią !!!

Lutownica czy też stacja lutownicza to chyba najbardziej potrzebne narzędzie w pracowni zarówno elektronika jak i elektronika-amatora. O ile zwykłą lutownicę można mieć za przysłowiowych kilka złotych o tyle stacja lutownicza to już większy koszt a w dodatku nie zawsze spełnia nasze oczekiwania. Prosta lutownica ma wiele minusów spośród których można wymienić choćby brak kontroli nad osiąganą temperaturą.

 

Zaprezentowana tutaj stacja lutownicza ma wiele plusów, natomiast minusów w sumie nie dopatrzyłem się. Z pewnością ktoś może wytknąć ich masę, ale przypominam że jest to amatorska stacja lutownicza i do takich zastosowań przeznaczona, więc nie ma co szukać dziury w całym. Poza wszystkimi plusami jakie posiada owa stacja, można dodać jeszcze jeden, chyba najważniejszy - cena. Koszt wykonania tej stacji nie uszczupli zbyt mocno domowego budżetu przeciętnego a nawet mniej zamożnego elektronika-amatora.

Stacja nie jest moim projektem i całkowicie podpisać się pod nią nie mogę bo było by to co najmniej nie fair.
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órej już niestety znaleźć nie mogę, natomiast ja wniosłem do tegoż projektu kilka poprawek które przyznam szczerze, podpowiedział mi pewien kolega Piotr.

Schemat i opis:


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.

Zaczniemy od początku czyli sekcja zasilania. Na wejście CON1 nalezy 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.
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.
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.

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.


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.

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:
tzw miękkie sterowanie (starzy wyjadacze znający sprzęt m.in. Technics'a będą wiedzieć o co chodzi)

  • automatyczne usypianie stacji po upływie określonego czasu (15 min. - dokładnie 14,43)
  • automatyczne wyłączanie stacji po upływie określonego czasu (30 min. - dokładnie 29,22)
  • automatyczne wyłączanie podświetlania lcd po określonym czasie (5 min. - dokładnie 4,54)
  • włączenie podświetlania następuje po naciśnięciu któregokolwiek z przycisków lub podniesieniu kolby
  • automatyczne przejście w stan normalnej pracy po podniesieniu kolby lutownicy

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. 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ę.
Zwierając SW6 podajemy zasilanie 230V na trafo, niejako zwierając wyprowadzenia przekaźnika, więc dostarczamy zasilanie na transformator a co za tym idzie na cały układ. Program napisany 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.

Teraz opiszę sytuację kiedy stacja pracuje a my chcemy ją wyłączyć naciskając przycisk wł/wył. Co się dzieje?
Naciśnięcie wł/wył zwiera SW6, 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.
Ja w swojej stacji lutowniczej wykorzystałem taki oto włącznik:

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.

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.

Obsługa:
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 WIĘCEJ oraz przycisk MNIEJ dzięki czemu wpisywana byla pierwsza wartość temperatury gdyż po zaprogramowaniu świeżego procesora wartość wynosi 0. Chcąc jak najbardziej to uprościć najpierw wymuszałem sprawdzanie tylko przycisku WIĘCEJ, ale... uznałem że człowiek to "zwierzę" leniwe i chciałem pominąć również i to więc... wymyśliłem sobie że zaraz po uruchomieniu programu procesor sprawdza parametr zmiennej TEMPERATURA ZADANA czyli dokładnie NASTAWA i jeśli wynosi ów parametr mniej niż 50 to z automatu wpisywana jest wartość 250st. C.

Samo użytkowanie sprowadza się do kilku czynności:

  • przycisk WIĘCEJ zwiększa wartość żądanej temperatury
  • przycisk MNIEJ zmniejsza wartość żądanej temperatury
  • przycisk UŚPIENIE wprowadza stację w stan hibernacji obniżając zarówno temperaturę grota jak i pobór mocy oraz wyłącza podświetlanie lcd
  • przyciski ZADANA 1, ZADANA 2, ZADANA 3 odpowiadają za ustawienie predefiniowanych wartości temperatur do szybkiego wyboru, przy czym zapis zadanych temperatur odbywa się na zasadzie opisanej niżej.
  • przycisku ON/OFF chyba nie trzeba tłumaczyć
  • przycisk WIECEJ + UŚPIENIE włącza wyciąg
  • przycisk MNIEJ + UŚPIENIE wyłącza wyciąg

Jeśli chcemy skorzystać z przycisków szybkiego wyboru temperatury ZADANA 1, ZADANA 2 czy ZADANA 3 to należy przypisać im odpowiednie temperatury. Dokonujemy tego następująco:
przyciskami WIĘCEJ lub MNIEJ ustawiamy pożądaną temperaturę
naciskamy na chwilę przycisk pod który chcemy zapisać wybraną wartość temperatury
naciskamy na raz przyciski WIĘCEJ oraz MNIEJ

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 szybkiej temperatury 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 UŚPIENIE.
W trybach UŚPIENIE, ZADANA 1, ZADANA 2 oraz ZADANA 3 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 UŚPIENIE, 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?

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ą:

  • czas podświetlania lcd = 5 minut bezczynności
  • czas do automatycznego uśpienia = 15 minut bezczynności
  • czas do automatycznego wyłączenia = 30 minut bezczynności

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.

Program jest przetestowany i już ową stacją lutowałem. Zamierzam wprowadzić jeszcze kilka poprawek o których poinformuję na bieżąco.
Stacja nie jest jeszcze w pełni ukończona. Muszę Wam jeszcze opisać jak zrobiłem wykrywanie odłożenia kolby oraz pokazać filmik z działania stacji. Filmik jest przygotowywany i powoli się renderuje...

Byłbym zapomniał o kodzie, poniżej w całej okazałości. Nadmienię tylko dwa słowa o nim. Na pierwszy rzut oka wydawać by się mogło że jest skomplikowany bo strasznie go dużo, ale tak naprawdę składa się z kilku takich samych bloków i dlatego tworzy tak długą listę.
W całym kodzie wyróżnić można pętlę główną gdzie sprawdzane są przyciski i wyświetlane informacje na lcd, jest kilka podprogramów do których wykonywane są skoki, ot i cała filozofia tego programu.

Jako że wszelkie nastawy zapisywane są w wewnętrznej pamięci EPROM procka a ta jak wiadomo ma ograniczoną żywotność to napisałem kawałek kodu który minimalizuje zapis do tejże pamięci i wykonuje go tylko wówczas kiedy zmienimy nastawę temperatury. Dajmy na to że włączamy stację i nastawa wynosi 220st.C a my nie zmienimy tej nastawy to przy wyłączaniu nie zostanie ona zapisana do epromu, ale jeśli tylko nastawa zostanie zmieniona to podczas wyłączania stacji na lcd pokaże się napis ZAPIS, wykonany zostanie zapis nowej wartości do pamięci i stacja się wyłączy.

Napiszę jeszcze o jednej rzeczy którą zauważyłem i jest to według mnie mankament który w najbliższym czasie wyeliminuję. Fragment kodu:

'================================================================================================
'sprawdzamy czy kolba jest podłączona
 
 If Temp > 800 Then                                         'jeśli jest zbyt duże napięcie  to może oznaczać niepodłączoną kolbę
    Gosub Spr
   Else                                                     'skocz do poprogramy wyświetlenia info o tym
     Home
     Lcd "Temp:" ; Temp_lcd ; Chr(0) ; "C" ; "   "          'wyświetlamy wartość temp. z pomiaru
     Lowerline
     Lcd "Nastawa:" ; Nastawa ; Chr(0) ; "C" ; "  "         'a w dolnej linii pokazujemy wartość nastawy
End If

Niby odpowiedzialny jest za sprawdzanie czy podłączona jest kolba lutownicy, tylko że jak się ją odłączy to napięcie nie rośnie tak by wartość temperatury była wyższa niż 800. Trzeba sprawdzać czy wartość jej jest mniejsza niż 50.
W wolnej chwili naniosę poprawki.

'********************************************************************
'*********** STACJA LUTOWNICZA STEROWANA MIKROKONTROLEREM ***********
'********************* AUTOR: KAMIL SZKUTNIK ************************
'*********************** poprawki by matrix *************************
'********************************************************************
 
$regfile = "m8def.dat"
$crystal = 8000000
'$prog &HFF , &HE4 , &HDB , &H00                             'fusy dla zegara 8MHz
 
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portb.0 , Rs = Portb.1
Cls
Cursor Off Noblink
 
'Config Portb = &B10000111 ; Portb = 255
'Config Portc = &B11100000 ; PORTB = 255
'Config Portd = &B11111000 ; Portd = 255
 
Config Pinb.3 = Input
Config Pinb.4 = Input
Config Pinb.5 = Input
Config Portb.6 = Output
'Config Pinb.6 = Input
Config Portb.7 = Output
Config Portd.0 = Output
Config Pind.1 = Input
Config Pind.2 = Input
Config Portd.3 = Output
Config Pinc.0 = Input
Config Pinc.1 = Input
Config Pinc.2 = Input
Config Pinc.3 = Input
Config Pinc.4 = Input
Config Portc.5 = Output
 
Portb = 127                                                 'powinno wyłączyć lcd (255)
Portc = 255
Portd = 255
 
Kolba_odlozona Alias Pind.1
Zero_fazy Alias Pind.2
Grzalka Alias Portd.3
Wlacz_lcd Alias Portb.7
'Enable_procedura Alias Pinb.6
Wentylator Alias Portd.0
Zadana_1 Alias Pinb.2
Zadana_2 Alias Pinb.3
Zadana_3 Alias Pinb.4
Uspienie Alias Pinc.1
Wiecej Alias Pinc.2
Mniej Alias Pinc.3
Wlacznik Alias Pinc.4
Przekaznik Alias Portc.5
 
Set Przekaznik
 
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Config Timer1 = Timer , Prescale = 256
Enable Interrupts
'Stop Timer0
Enable Timer1
Timer1 = 34286
On Timer1 Przerwanie
Stop Timer1
Start Adc
 
Dim Zm_dla_odl_kolby As Bit
Dim Licz_czas As Single
Dim Nastawa As Single
Dim Nastawa_temp As Single
Dim Temp_1 As Single
Dim Temp_2 As Single
Dim Temp_3 As Single
Dim Wart_ac As Word
Dim V As Single
Dim Wart_nap As String * 2
Dim Temp As Single
Dim Temp_lcd As String * 1
Dim Do_wylaczenia As Byte
'Dim T_podswietlania As Single
'Dim T_usypiania As Single
'Dim T_wylaczania As Single
'Dim Trzymany_przycisk As Word
'Trzymany_przycisk = 0
 
Bitwait Wlacznik , Set
Waitms 500
 
Cls
Cursor Off Noblink
Waitms 250
Home
Set Wlacz_lcd                                               'włączam podświetlanie lcd
Lcd "**   STACJA   **"
Lowerline
Lcd "*  LUTOWNICZA  *"
Wait 2
Deflcdchar 0 , 12 , 18 , 18 , 12 , 32 , 32 , 32 , 32        'znaczek st C
Deflcdchar 1 , 4 , 14 , 17 , 16 , 14 , 1 , 17 , 14          'literka ś
Deflcdchar 2 , 4 , 14 , 31 , 32 , 4 , 14 , 31 , 32          'strzałki w górę
Deflcdchar 3 , 32 , 31 , 14 , 4 , 32 , 31 , 14 , 4          'strzałki w dół
Cls
 
Zm_dla_odl_kolby = 0
Licz_czas = 0
 
Readeeprom Nastawa , 2
Readeeprom Temp_1 , 8
Readeeprom Temp_2 , 14
Readeeprom Temp_3 , 20
 
'================================================================================================
'procedura ustawiająca 250 st.C uruchamiana tylko raz, za pierwszym razem
 
 If Nastawa < 50 Then
    Nastawa = 250                                            'nastawa wyniesie 250
    Home
    Lcd "Nastawa=" ; Nastawa ; Chr(0) ; "C    "
    Bitwait Wiecej , Set                                     'czekamy na puszczenie przycisku WIĘCEJ
    Cls
 End If
'================================================================================================
 
Do                                                          'tu zaczyna się pętla główna
'================================================================================================
'sprawdzanie czy chcemy wyłączyć stację
 
 If Wlacznik = 0 Then                                       'jeśli naciśniemy przycisk wyłączania to
    Bitwait Wlacznik , Set
    Gosub Procedura_wylaczania                              'skocz do podprogramu wyłączania stacji
 End If
'================================================================================================
 
'================================================================================================
'sprawdzanie aktywności stacji
'jeśli naciśniemy jakikolwiek przycisk to
 
 If Wiecej = 0 Or Mniej = 0 Or Zadana_1 = 0 Or Zadana_2 = 0 Or Zadana_3 = 0 Then
    Licz_czas = 0                                           'czas zaczynamy liczyć od nowa
    Set Wlacz_lcd                                           'włącz podświetlanie lcd
 End If
'================================================================================================
 
'================================================================================================
 'ta sekcja sprawdza czy kolba jest odłożona ?
 
 If Kolba_odlozona = 0 Then                                 'jeśli kolba jest położona
    Locate 1 , 16
    Lcd Chr(3)                                              'powinno wyświetlić dwie strzałki w górę
    If Zm_dla_odl_kolby = 0 Then                            'i zmienna pomocnicza =0
       Start Timer1                                         'to rozpocznij zliczanie
       Zm_dla_odl_kolby = 1                                 'zmień stan zmiennej pomocniczej na 1 żeby timer nie był już startowany
    End If
 
    If Licz_czas = 900 Then Gosub Usypianie                 'jeśli kolba leży 900 sekund (15 minut) default is 900
 
    If Licz_czas > 300 Then                                 'default is 300
       Reset Wlacz_lcd                                      'jeśli czas od ostatniego naciśnięcia przycisku jest > 5min. to
      Else                                                  'wyłącz podświetlanie
       Set Wlacz_lcd
    End If
  Else
    Locate 1 , 16
    Lcd Chr(2)                                              'powinno wyświetlić dwie strzałki w dół
    Stop Timer1                                             'zatrzymaj timer
    Zm_dla_odl_kolby = 0                                    'wyzeruj wartość zmiennej pomocniczej odłożenia kolby
    Licz_czas = 0                                           'i zerujemy wartość zliczania czasu
 End If
'================================================================================================
 
'================================================================================================
 'tu po raz pierwszy robimy pomiar temperatury
 
 Gosub Pomiar_temp
 Gosub Sterowanie_grzalka
'================================================================================================
 
'================================================================================================
'sprawdzamy czy kolba jest podłączona
 
 If Temp > 800 Then                                         'jeśli jest zbyt duże napięcie  to może oznaczać niepodłączoną kolbę
    Gosub Spr
   Else                                                     'skocz do poprogramy wyświetlenia info o tym
     Home
     Lcd "Temp:" ; Temp_lcd ; Chr(0) ; "C" ; "   "          'wyświetlamy wartość temp. z pomiaru
     Lowerline
     Lcd "Nastawa:" ; Nastawa ; Chr(0) ; "C" ; "  "         'a w dolnej linii pokazujemy wartość nastawy
End If
'================================================================================================
 
'================================================================================================
'tu zaczyna się sekcja sprawdzania naciskanych przycisków
 
 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
    Waitms 150
    Licz_czas = 0                                           'zerujemy czas
    Set Wlacz_lcd                                           'włączamy podświetlanie lcd
    Gosub Usypianie                                         'i skaczemy do podprogramu UŚPIENIE
 End If
'================================================================================================
 
'================================================================================================
'ta procedura spowoduje włączenie nawiewu jeśli wciśniemy na raz  przyciski UŚPIENIE i WIĘCEJ
 
If Uspienie = 0 And Wiecej = 0 And Mniej = 1 Then
   Waitms 50
   Reset Wentylator
End If
'================================================================================================
 
'================================================================================================
'ta procedura spowoduje wyłączenie nawiewu jeśli wciśniemy na raz  przyciski UŚPIENIE i MNIEJ
 
If Uspienie = 0 And Wiecej = 1 And Mniej = 0 Then
   Waitms 50
   Set Wentylator
End If
'================================================================================================
 
'================================================================================================
'sekcja sprawdzania czy naciskamy przycisk zwiększania porządanej temperatury
 
 If Wiecej = 0 And Temp < 800 Then                          'jeśli naciśniemy przycisk WIĘCEJ
    Waitms 50
    If Wiecej = 0 And Uspienie = 1 Then
       If Nastawa < 500 Then                                'i jeśli wartość zmiennej NASTAWA jest mniejsza niż wymagane maximum
          Nastawa = Nastawa + 10                            'to wartość nastawionej temp. zwiększa się o 10st. C
          Waitms 50
       End If
    End If
 End If
'================================================================================================
 
'================================================================================================
'sekcja sprawdzania czy naciskamy przycisk zmniejszania porządanej temperatury
 
 If Mniej = 0 And Temp < 800 Then                           'jeśli naciśniemy przycisk MNIEJ
    Waitms 50
    If Mniej = 0 And Uspienie = 1 Then
       If Nastawa > 50 Then                                 'i jeśli wartość zmiennej NASTAWA jest większa niż wymagane minimum
          Nastawa = Nastawa - 10                            'to zmniejszamy wartość rządanej temp. o 10st. C
          Waitms 50
       End If
    End If
 End If
'================================================================================================
 
'================================================================================================
'sekcja sprawdzania czy wybierzemy którąś z temperatur szybkiego wyboru
 
If Zadana_1 = 0 Then                                        'jeśli wybierzemy temp zadaną 1 i nie jest włączone uśpienie
   Licz_czas = 0                                            'czas zaczynamy liczyć od nowa
   Set Wlacz_lcd                                            'włącz podświetlanie lcd
   Bitwait Zadana_1 , Set
   Gosub Odczyt_zadana_1
End If
If Zadana_2 = 0 Then                                        'jeśli wybierzemy temp 2 i nie jest włączone uśpienie
   Licz_czas = 0                                            'czas zaczynamy liczyć od nowa
   Set Wlacz_lcd                                            'włącz podświetlanie lcd
   Bitwait Zadana_2 , Set
   Gosub Odczyt_zadana_2
End If
If Zadana_3 = 0 Then                                        'jeśli wybierzemy temp 3 i nie jest włączone uśpieni
   Licz_czas = 0                                            'czas zaczynamy liczyć od nowa
   Set Wlacz_lcd                                            'włącz podświetlanie lcd
   Bitwait Zadana_3 , Set
   Gosub Odczyt_zadana_3
End If
 
Loop                                                        'koniec pętli głownej
End
'================================================================================================
 
'***********************************
'*** podprogram usypiania stacji ***
'***********************************
Usypianie:
'================================================================================================
    'Reset Wlacz_lcd                                         'wyłączamy podświetlanie
    Nastawa_temp = Nastawa                                  'wpisujemy aktualne ustawienia do zmiennej tymczasowej
    Nastawa = 178                                           'nastawa przyjmuje wartość 60
     Locate 2 , 1
      Lcd "U" ; Chr(1) ; "PIENIE->178" ; Chr(0) ; "C"
       Bitwait Uspienie , Set                               'i program czeka na puszczenie przycisku UŚPIEINIE
         Do
           Gosub Pomiar_temp
           Gosub Sterowanie_grzalka
 
           If Licz_czas = 1800 Then Gosub Procedura_wylaczania       'jeśli kolba leży 1800 sekund (30 minut)
           If Licz_czas = 60 Then Reset Wlacz_lcd           'wyłączamy podświetlanie
 
           If Temp > 800 Then                               'jeśli procesor wykryje napięcie zbyt duże
              Gosub Spr                                     'sprawdź czy podłączona lutownica
            Else
              Home
              Lcd "Temp:" ; Temp_lcd ; Chr(0) ; "C" ; "    "
           End If
 
           If Uspienie = 0 Or Kolba_odlozona <> 0 Then
              Nastawa = Nastawa_temp
              Licz_czas = 0
              Start Timer1
              Bitwait Uspienie , Set
              Set Wlacz_lcd                                 'włączamy podświetlanie
              Exit Do
           End If
         Loop
Return
'================================================================================================
 
'*************************************
'*** podprogram sterowania grzałką ***
'*************************************
 
'tu sterujemy grzałką
 
Sterowanie_grzalka:
   Temp = Temp + 5                                          'temperatura po włączeniu grzałki skacze o 10 stopni w gorę
                                                            'dzięki temu załączanie grzałki odbywa się 5st. niżej niż ustawiona i skacze do 5 stopni
                                                            'wyżej niż ustawiona
If Nastawa > Temp Then                                      'jeśli ustawiona temp. większa niż aktualna temp
    Bitwait Zero_fazy , Set                                 'program czeka aż zmienna ZERO_FAZY przyjmie wartość 1 zaraz po 0
    Grzalka = 1                                             'i włączy grzałkę lutownicy
  Else
    Grzalka = 0                                             'lub jeśli nie są spełnione powyższe warunki to grzałka pozostanie wyłączona
End If
Return
'================================================================================================
 
'*************************************
'*** podprogram pomiaru temperaury ***
'*************************************
 
Pomiar_temp:
 Wart_ac = 0
 Wart_ac = Getadc(0)                                        'pobieranie wartości napięcia (temp grzałki)
  Waitms 100
   V = Wart_ac * 0.0049                                     'konwersja na temp. celsjusza
   Temp = V * 260                                           'to obliczenie wstępnie ustawia temperaturę zwiększając jej wartość
   Temp = Temp + 20                                         'o temperaturę w pokoju w lecie na poziomie około 26st
                                                            'wcześniej było 260 po zmianie 180
                                                            'powinien zostać zastosowany czujnik z jednym pomiarem podczas włączenia
   Temp_lcd = Fusing(temp , "#.#")
Return
'================================================================================================
 
'********************************
'*** podprogram tem zadanej 1 ***
'********************************
 
Zapis_zadana_1:
   Stop Timer1
   Licz_czas = 0                                            ' zerujemy wartość zliczania czasu
      Temp_1 = Nastawa                                      'przypisuję wartość aktualnie nastawionej temp do zadanej_1
      Writeeeprom Temp_1 , 8
      Home
      'Waitms 100
      Lcd "Zapisano Temp. 1 "                               'wyświetl info o zapisie temp zadanej nr1
      Bitwait Zadana_1 , Set
      Wait 1
      Start Timer1
Return
'================================================================================================
 
'================================================================================================
Odczyt_zadana_1:
      Stop Timer1
      Licz_czas = 0                                         ' zerujemy wartość zliczania czasu
      Readeeprom Temp_1 , 8                                 'odczytuję wartość wcześniej ustawionej temp zadanej nr1
      Do
       Gosub Pomiar_temp                                    'wykonuję pomiar temperatury
 
       If Temp > 800 Then                                   'jeśli procesor wykryje napięcie zbyt duże
          Gosub Spr                                         'skocz do podprogramu spr podłączenia grzałki
        Else
          Home
          Lcd "Temp:" ; Temp_lcd ; Chr(0) ; "C" ; "    "
          Locate 2 , 1
          Lcd "Zadana 1 " ; Temp_1 ; Chr(0) ; "C" ; "  "    'pokazując wartość nastawy
       End If
 
       If Temp_1 > Temp Then                                'jeśli nastawa mniejsza niż aktualna temp
          Bitwait Zero_fazy , Set                           'program czeka aż zmienna ZERO_FAZY przyjmie wartość 1 zaraz po 0
          Grzalka = 1                                       'i włączy grzałkę lutownicy
         Else
           Grzalka = 0                                      'lub jeśli nie są spełnione powyższe warunki to grzałka pozostanie wyłączona
       End If
 
       If Mniej = 0 And Wiecej = 0 Then                     'taki zapis spowoduje od razu wyjście z podprogramu zadana
          Gosub Zapis_zadana_1
          Exit Do
       End If
 
       If Zadana_1 = 0 Then                                 'sprawdzam czy naciśnięto przycisk temp zadanej 1
          Bitwait Zadana_1 , Set
          Waitms 50
          Exit Do                                           'jeśli tak to wychodzę z podprogramu temp zadanej
       End If
      Loop
   Start Timer1
Return
'================================================================================================
 
 
'********************************
'*** podprogram tem zadanej 2 ***
'********************************
 
Zapis_zadana_2:
   Stop Timer1
   Licz_czas = 0                                            ' zerujemy wartość zliczania czasu
   Temp_2 = Nastawa                                         'przypisuję wartość aktualnie nastawionej temp do zadanej_2
   Writeeeprom Temp_2 , 14
   Home
      'Waitms 100
      Lcd "Zapisano Temp.2 "
      Bitwait Zadana_2 , Set
      Wait 1
      Start Timer1
Return
'================================================================================================
 
Odczyt_zadana_2:
      Stop Timer1
      Licz_czas = 0
      Readeeprom Temp_2 , 14                                'odczytuję wartość wcześniej ustawionej temp zadanej nr2
      Do
        Gosub Pomiar_temp                                   'wykonuję pomiar
        If Temp > 800 Then                                  'jeśli procesor wykryje napięcie zbyt duże
           Gosub Spr                                        'skocz do podprogramu spr podłączenia grzałki
         Else
           Home
           Lcd "Temp:" ; Temp_lcd ; Chr(0) ; "C" ; "    "
            Locate 2 , 1
           Lcd "Zadana 2 " ; Temp_2 ; Chr(0) ; "C" ; "  "   'pokazując wartość nastawy
        End If
 
        If Temp_2 > Temp Then                               'jeśli nastawa mniejsza niż aktualna temp
           Bitwait Zero_fazy , Set                          'program czeka aż zmienna ZERO_FAZY przyjmie wartość 1 zaraz po 0
           Grzalka = 1                                      'i włączy grzałkę lutownicy
          Else
            Grzalka = 0                                     'lub jeśli nie są spełnione powyższe warunki to grzałka pozostanie wyłączona
        End If
 
        If Mniej = 0 And Wiecej = 0 Then                    'taki zapis spowoduje od razu wyjście z podprogramu zadana
           Gosub Zapis_zadana_2
           Exit Do
        End If
 
        If Zadana_2 = 0 Then                                'sprawdzam czy naciśnięto przycisk temp zadanej 2
           Bitwait Zadana_2 , Set
           Waitms 50
           Exit Do                                          'jeśli tak to wychodzę z podprogramu temp zadanej
        End If
      Loop
   Start Timer1
Return
'================================================================================================
 
 
'********************************
'*** podprogram tem zadanej 3 ***
'********************************
 
Zapis_zadana_3:
   Stop Timer1
   Licz_czas = 0                                            ' zerujemy wartość zliczania czasu
   'Trzymany_przycisk = 0
   Temp_3 = Nastawa                                         'przypisuję wartość aktualnie nastawionej temp do zadanej_3
   Writeeeprom Temp_3 , 20
      Home
      'Waitms 100
      Lcd "Zapisano Temp.3 "                                'wyswietlam info o tym
      Bitwait Zadana_3 , Set
      Wait 1
      Start Timer1
Return
'================================================================================================
 
Odczyt_zadana_3:
      Stop Timer1
      Licz_czas = 0
      Readeeprom Temp_3 , 20                                'odczytuję wartość wcześniej ustawionej temp zadanej nr3
      Do
        Gosub Pomiar_temp                                   'wykonuję pomiar
        If Temp > 800 Then                                  'jeśli procesor wykryje napięcie zbyt duże
           Gosub Spr                                        'sprawdź czy podłączona lutownica
         Else
           Home
           Lcd "Temp:" ; Temp_lcd ; Chr(0) ; "C" ; "    "
            Locate 2 , 1
           Lcd "Zadana 3 " ; Temp_3 ; Chr(0) ; "C" ; "  "   'pokazując wartość nastawy
        End If
 
        If Temp_3 > Temp Then                               'jeśli nastawa mniejsza niż aktualna temp
           Bitwait Zero_fazy , Set                          'program czeka aż zmienna ZERO_FAZY przyjmie wartość 1 zaraz po 0
           Grzalka = 1                                      'i włączy grzałkę lutownicy
          Else
            Grzalka = 0                                     'lub jeśli nie są spełnione powyższe warunki to grzałka pozostanie wyłączona
        End If
 
        If Mniej = 0 And Wiecej = 0 Then                    'taki zapis spowoduje od razu wyjście z podprogramu zadana
           Gosub Zapis_zadana_3
           Exit Do
        End If
 
        If Zadana_3 = 0 Then                                'sprawdzam czy naciśnięto przycisk temp zadanej 3
           Bitwait Zadana_3 , Set
           Waitms 50
           Exit Do                                          'jeśli tak to wychodzę z podprogramu temp zadanej
        End If
      Loop
   Start Timer1
Return
'================================================================================================

Niestety chyba strona ma ograniczenie co do ilości linii kodu więc ostatnia część kodu jest poniżej.

'********************************************
'*** Procedura wyłączania, Tak dla bajeru ***
'********************************************
 
Procedura_wylaczania:
    Set Wlacz_lcd
    Reset Grzalka
 
    '**********************************************
    '*** minimalizacja ilości zapisów do eeprom ***
    '**********************************************
       Nastawa_temp = Nastawa                               'zmienne temp [przypisuję na chwilę wartość aktualnej nastawy
       Readeeprom Nastawa , 2                               'odczytuję wartość nastawy z pamięci eprom
       If Nastawa <> Nastawa_temp Then                      'porównuję czy wartość jest inna i jeśli jest inna to
          Nastawa = Nastawa_temp                            'przepisuję z powrotem nową wartość
          Writeeeprom Nastawa , 2                           'i zapisuję do pamięci
          Cls
          Home
          Lcd "     Zapis      "                            'w górnej linii wpisuję wyraz Zapis
          Waitms 500                                        'czekamy 500 ms
       End If
     '*****************************************************************
     '*** Powyższy kawalek kodu zminimalizuje zapis temperatury *******
     '*** do pamięci eeprom. Jeśli po włączeniu stacji lutowniczej ****
     '*** będziemy mieć powiedzmy 250st.C i przy wyłączaniu również ***
     '*** to stacja nie nadpisze temperatury do pamięci eeprom co *****
     '************* powinno wydłużyć życie procesora ******************
     '*****************************************************************
 
    Deflcdchar 0 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31    'definiuję zaciemnione pole na lcd
    Cls
      Home                                                  'wracamy do pola nr 1 w górnej linii
      Lcd "   Wylaczanie   "
      'If Enable_procedura = 0 Then                          'jeśli założona zworka to
       'Do_wylaczenia = 1                                    'zmienna potrzebna do określenia miejsca na lcd
         Do_wylaczenia = 16                                 'dla zmiennej Do_wylaczenia = od 1 do 16
             Locate 2 , 1
             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);
             'Incr Do_wylaczenia                             'powinno nastąpić to tak szybko że od razu zobaczymy całą linię ciemną
           For Do_wylaczenia = 16 To 1 Step -1              'dla zmiennej Do_wylaczenia od 16 do 1 z krokiem -1
               Locate 2 , Do_wylaczenia                     'znajdź w dolnej linii kolejne pola od końca
               Lcd " "                                      'i w każde wpisz pusty znak
               Waitms 500
           Next
      'End If
         Waitms 250                                         'poczekaj 350 ms
         Reset Przekaznik                                   'i wyłącz stację
         'Set Przekaznik                                     'do testów na płytce propox
Return
'================================================================================================
 
'*********************************************
'*** podprogram wyświetlania że brak kolby ***
'*********************************************
 
Spr:
  Home                                                      'co znaczy że nie podłączono grzałki
   Lcd " Podlacz raczke "                                   'poprosi o jej podłaczenie
     Locate 2 , 1
   Lcd "   lutownicy!   "
Return
'================================================================================================
 
Przerwanie:
   Stop Timer1
   Incr Licz_czas
 
     'Toggle Portd.0
 
   Timer1 = 34286
   Start Timer1
Return
'================================================================================================




Portret użytkownika gosc

Materiały do pobrania

Dzień dobry, czy można by poprosić o udostępnienie skompilowanego wsadu, ustawień fusebitów oraz użytych wzorów płytek?

Portret użytkownika matrix

Re: Materiały do pobrania

Oczywiście że tak. W wolnej chwili gdzieś wstawię i zapodam.

Portret użytkownika matrix

Re: Materiały do pobrania

-> TUTAJ <- powinny być do pobrania. W załączniku plik bas, hex i kilka innych.
Po hasło proszę się zgłosić, yyy, drogą mailową ? Albo GG - 1688365

Portret użytkownika gosc

Materiały do pobrania

Witam, mógłbym prosic o wysłanie hasła do paczki na adres ?
POzdrawiam