Главная » Статьи » Proton PICBasic

Цифровая паяльная станция
Цифровая паяльная станция. 

 Представляю вашему вниманию свой вариант паяльной станции. Понимаю, что паяльных станций полно, но хочется сделать свое – родное.  Да и почти все что есть в сети, на LCD. Я же решил сделать на 7-ми сегментном индикаторе. Нет, не потому, что LCD дорогой, на нем даже проще было бы код писать, а потому, что, на мой взгляд, на таком индикаторе лучше видно информацию. 
Сначала начал делать на операционном усилителе AD8551. Но наверно мне попался уж слишком китайский паяльник, (шли сильные помехи работы ШИМ на вход АЦП) пришлось перейти на более дешевый и как оказалось надежнее ОУ - LM358.

  • Максимальная температура (не ограничивал) ~ 750°
  • Используемый паяльник с термопарой K-type – 50W, 24V.
  • Индикация – семисегментный индикатор.
  • Три предустановки – температурные режимы (можно записать любые). Записываются в энергонезависимую память (EEPROM).
  • Используется ПИ (Пропорционально Интегральный) регулятор.
  • Настройка коэффициентов через ком порт RS232.


Сама конструкция разбита на три части:
• Плата индикации.
• Основная плата.
• Плата питания.

Схема индикации


Схема основная



Схема питания


Алгоритм клавиатуры

Код

Code
Device = 16F886 ; Мікроконтролер
; 20E4
@CONFIG_REQ
  @__CONFIG _CONFIG1, 20E4h
  @__CONFIG _CONFIG2, 3fffh
; @__CONFIG _CONFIG1, HS_OSC & WDT_OFF & MCLRE_ON & PWRTE_ON & CP_OFF & CPD_OFF & BOR_OFF & IESO_OFF & FCMEN_OFF & LVP_OFF & DEBUG_OFF
; @__CONFIG _CONFIG2, IESO_OFF & FCMEN_OFF
  Xtal = 4 ; Частота осцилятора 4 МГц
   
   
  setttemp EData 250,0,300,350 ; Ініціалізація Еепром (Режими температури)
  setKp EData 40 ; Пропорціональний коеф.
  setKi EData 0.3 ; Інтегральний
  setNormkof EData 0 ; Статичної помилки
  LostTemp EData 300 ; Остання температура

  Declare Bootloader = On ; Завантажувач ввімкнено
  Declare Adin_Res 10 ; 10-bit result required  
  Declare Adin_Tad FRC ; RC OSC chosen  
  Declare Adin_Stime 100 ; Allow 50us sample time
   
  Declare CCP1_Pin = PORTC.2 ; Порт ШИМ
   
  Declare Hserial_Baud 4800 ' Швидкість передачі, бод
  Declare Hserial_TXSTA = %00100000 ' Активувати передатчик, асинхронний режим
  Declare Hserial_RCSTA = %10010000 ' активувати приймач
  Declare Hserial_SPBRG 12 ' Значение регистра SPBRG для выбранной скорости
  Declare Hserial_Clear = On ' Автоматична очистка біта помилки
   
  ;========== Var =================
  Dim delayd As Byte ; Затрика перед --
  Dim delaydisp1 As Byte ; зміною значень цифр
  Dim DelayACP As Byte ; Затримка перед --
  Dim delayacp1 As Byte ; зчитуванням АЦП
  Dim dlds As Byte ; При збільшенні\зменшенні температури кнопками
  Dim delayds1 As Byte ; відображати деякий час (для паузи)
  Dim delaylost As Word ; пауза для запису останнього значення
   
  Dim Cifra4 As Byte ; Цифри на дисплей
  Dim Cifra3 As Byte ; ************
  Dim Cifra2 As Byte ; ************
  Dim Cifra1 As Byte ; ************
  Dim Selector As Byte ; Яку цифру будемо показувати
  Dim Address As Byte ; Адреса цифри в пам'яті
  Dim OUTA As Byte ; Те, що виводимо в ПортА
   
  ;=====For PID ======
  Dim Ki As Float ; Іртергальний коефіцієнт
  Dim TempPower As Float ; Проміжна перемінна  
;/ Dim Koef_Duty As 0.333 ; Коеф. АЦП
  Dim P As Word ; Пропорційна складова
  Dim PI As Float ; Інтегральна
  Dim Power As Word ; Вихідний результат
  Dim TError0 As Word ;
  Dim TError1 As Word ;
  Dim Integral As Word ;
  Dim dutytmp As Byte
  Dim duty_1 As Word ; Значення для АЦП
  Dim NormKof As Byte ; Статична помилка
  Dim Kp As Byte ; Пропорційний коеф.
   
  Dim TempSet As Word ; Встановлена температура
  Dim Prs1 As Word ; Пресет 1
  Dim Prs2 As Word ; Пресет 2
  Dim Prs3 As Word ; Пресет 3
   
   
  Dim Dig_Pat As Byte ' Цифра на порт B
  Dim Flag1 As Bit ' Яку інформацію показувати (0_реальну, 1_встановлену)
  Dim Flag4 As Bit ' для запису останньої
  Dim Flag2 As Byte ' Вибір налаштування
  Dim Flag3 As Byte
  Dim cifra As Byte ' Для присвоєння цифр
  Dim DigitDisp As Byte ' для lookupl
   
   
  Dim SerString[3] As Byte ' Масив 3 байти для RS232
   
  Dim TDisplay As Word ; на диплей
  Dim prostotak As Byte ; перемінні виходять за межі банків
   
  Dim i As Word ;
  Dim j As Word ;
   
  Dim AD_Result As Word ; Результат АЦП
  Dim TMP As Byte ; RS232
  Dim delaybut As Word ; пауза кнопки SET
;Dim k As Word

  Symbol T0IE = INTCON.5 ; біт дозволу переривання
;===== Кнопки ========
  Symbol ENT = PORTB.0 ; SET
  Symbol one = PORTB.1 ; 1
  Symbol two = PORTB.2 ; 2
  Symbol thre = PORTB.3 ; 3
  Dim BUF As Byte ; буфер BUTTON
   
  Symbol ledg = PORTB.4 ; зелений
  Symbol ledr = PORTB.5 ; червоний
   
  Asm
  mvi Macro DEST2,CONST2  
  movlw CONST2
  movwf DEST2
  Endm  
  EndAsm
  Declare FSR_CONTEXT_SAVE = On
  On_Hardware_Interrupt MyInt ; При перериванні перейти на MyInt (апаратні переривання)

GoTo init ; перейти на процедуру ініціалізації -->

;****************************************************************
;====================== переривання ===========================
;****************************************************************

MyInt:
  DelayUS 1
  Inc delaylost
  Asm
  incf dlds,f
  incf delayd,f
  incf DelayACP,f

  movlw B'00100000' ; Маска для для збереження біта 5
  andwf OUTA,F ; Обнуляємо біти, які управляють розрядами (PORTA)
   
   
  movf OUTA,W ; Гасимо
  movwf PORTA ; індикатор
  movf Selector,W ; Підготовлюємо засвітити
  iorwf OUTA,F ; розряд індикатора
   
  movf Address,W ; Адреса комірки з даними
  movwf FSR ; в FSR (непряма адресація)
  movf INDF,W ; Перенести дані в W
  movwf SSPBUF ; Передати дані по SPI
   
   
  movf OUTA,W ; Запалюємо  
  movwf PORTA ; розряд індикатора
   
  bcf STATUS,C
  rrf Selector,F
   
  btfss STATUS,C ; Цифра була останньою в даному циклі, пропускаемо перехід (1)
  GoTo Int_label ; Цифра ще не остання
   
   
  movlw Cifra4 ; адреса комірки
  movwf Address ; в ADDRESS  
  movlw B'00001000' ; З якої цифри  
  movwf Selector ; починаємо відображати
  GoTo End_int ;
   
  Int_label  
  incf Address,F ; Наступне переривання, інша цифра (інкремент ADDRESS)
  nop
  nop
  GoTo End_int ;
  End_Int  
  bcf INTCON,T0IF ;  
  EndAsm
  Context Restore
   
  ;Resume
  ;Enable
   
;================== ініціалізація ======================
init:  
  Clear
  SSPSTAT = %00000000 ; Ініціалізація SPI
  SSPSTAT = %01000000 ; //
  SSPCON = $21 ; //
  ;OSCCON = %01110000 ; Частота процесора 8 МГц
  CM1CON0 = %00000000 ; Компаратори
  CM2CON0 = %00000000 ; виключені

' Розрахунок PR2 = 1kHz  
' 4MHz частота, дільник 4

' Fosc = Частота процесора (4MHz)
' PS = Timer2 подільник  
' Freq = Частота ШІМ

' Формула:
' PR2=(Fosc/(4*PS*Freq))-1
  PR2 = 249 ' PR2 для 1 kHz
  CCP1CON = %00001100 ' CCP1 = ШІМ  
  T2CON = %00000101 ' Вкл. Timer2, дільник = 4
  duty_1 = 0 : GoSub shim  

  ANSEL = %00100000 ; 4 канал аналоговый
  ANSELH = %00000000 ; Всі інші цифрові порти
  PORTA = 0 ;
  TRISA = %00100000 ; RA5 вхід, інші виходи
  PORTB = 0 ;
  TRISB = %00001111 ; RA0,RA1,RA2,RA3 - кнопки
  ADCON1 = %10000000 ; Праве вирівнювання АЦП
  OPTION_REG = %00000010 ; TMR0 --- 1:8
  INTCON = %10100000 ; Дозволене переривання
  TMR0 = 0 ;
  PORTC = 0 ;
  TRISC = %00000000 ; PORTC всі виходи
   
   
  Asm
  mvi Address,Cifra4 ;Заносим в ADDRESS адреск комірки з початковою цифрою
  EndAsm  
  Selector = %00001000 ; Показуємо з 4-ї цифри
   
  DelayACP = 0 ; Всі затримки
  dlds = 0 ; в 0
  delayds1 = 0 ; **
  delayd = 0 ; **
  delaydisp1 = 0 ; **
   
  j = 0
  Flag1 = 0 ; Показувати реальну температуру
  Flag2 = 0 ;
  Flag3 = 0 ;  
  Flag4 = 0 ;  
  ;==== Зчитуємо дані попередніх установок ====
   
  Prs1.LowByte = ERead 0 ; Зчитати дані
  Prs1.HighByte = ERead 1 ; з ЕЕпром в
  Prs2.LowByte = ERead 2 ; в регістри
  Prs2.HighByte = ERead 3 ; пресетів
  Prs3.LowByte = ERead 4 ; ****
  Prs3.HighByte = ERead 5 ; ****
   
   
  Kp = ERead setKp ; Зчитати Кп
  Ki = ERead setKi ; Кі
  NormKof = ERead setNormkof ; Стат. пом.
   
  ;=========================================================
  ;======= Для USART, настройки еепром
  ;=========================================================
  Button ENT,0,40,5,BUF,0,initgo ; Якщо при включенні нажата клавіша SET
  DelayMS 200 ; переходимо на опитування
  Cifra4 = 240 ;  
  Cifra3 = 246 ;  
  Cifra2 = 246 ;  
  Cifra1 = 198 ;  

  GoTo USART_ ; компорта
initgo:
  ;============ Показуємо першу передустановку
  Cifra4 = 128 ; Показ.
  Cifra3 = 128 ;  
  Cifra2 = 191 ;  
  Cifra1 = 249 ;  

  TempSet = ERead LostTemp ; Встановлюємо останню температуру
  DelayMS 1000 ;
  TDisplay = TempSet ; Показати  
  GoSub Display ; температуру  
  DelayMS 1000 ;
   
   
   
;************************************************************  
;===================== Головна програма ===================
;************************************************************

main:
  If DelayACP >= 150 Then ; Чекаємо поки DelayACP буде 150
  Inc delayacp1 ; інкремент delayacp1
  DelayACP = 0 ;
  If delayacp1 >= 1 Then ;
  delayacp1 = 0 ;
  AD_Result = ADIn 4 ; Отримати дані з АЦП (RA5)
  DelayUS 1
  HSerOut ["Int:",Dec Integral," ","dut:",Dec duty_1," ","ad_Rs:",Dec AD_Result," ", Dec j, 13, 0]
  Inc j
;======================================================================================  
  If AD_Result > TempSet + 5 Then ; Включити оранжевий при зменшенні температури
  ledr = 1
  ledg = 1
  Else  
  If AD_Result < TempSet - 5 Then ; Якщо температура менша встановленої
  ledg = 0 ; світимо червоний світлодіод
  ledr = 1 ;
  Else ;
  ledg = 1 ; якщо ні
  ledr = 0 ; зелений
  EndIf  
  EndIf  
;=======================================================================================  
  If Flag1 = 0 Then ; Відображаємо
  TDisplay = AD_Result ; реальну температуру, чи
  Else
  TDisplay = TempSet ; встановлену
  EndIf
   
  GoSub PID ; на PID регулятор
  If AD_Result > TempSet + 15 Then ; Якщо температура > втановленої на 15Гр.  
  duty_1 = 0;
  GoSub shim
; HPWM 1, 1, 500 ; зменшити ШИМ майже до нуля
  Else  
  GoSub shim
  EndIf
  EndIf
  EndIf

;======= Затримка для відображення установок температури =======
  If Flag3 = 1 Then ;
  If dlds >= 254 Then ;
  dlds = 0 ; При збільшенні  
  Inc delayds1 ; чи зменшенні
  EndIf ; температури  
  If delayds1 = 4 Then ; вносимо затримку  
  delayds1 = 0 ; відображення  
  Flag1 = 0 ; встановленої температури
  Flag3 = 0 ;
  EndIf ;
  EndIf ;
;===================================================================
  If Flag4 = 1 Then
  If delaylost >= 32000 Then
  Flag4 = 0
  EWrite LostTemp,[TempSet]
  ledr = 0: ledg = 0
  EndIf
  EndIf
   
;============ Клавіша SET ====================
PreBut:

  Button ENT,0,40,5,BUF,0,ButOne ; Якщо нажата "SET"
  DelayMS 200 ; йдемо на підрограму
  Inc delaybut
  If ENT = 0 Then
  If delaybut >= 7 Then
  delaybut = 0
  GoTo USART_
  EndIf
  GoTo PreBut
  EndIf

  GoSub SelPrs ; вибору передустановок
  GoTo main ;

ButOne: ; Нажата 1
  Button one,0,40,5,BUF,0,press2 ;
  DelayMS 200 ; Збільшуємо температуру
  TempSet = TempSet + 5 ; Починаємо
  If TempSet >= 500 Then TempSet = 500
  dlds = 0 ; затримку  
  delayds1 = 0 ; відображення
  Flag1 = 1 ;
  Flag3 = 1 ;

  delaylost = 0 ;
  Flag4 = 1  
  TDisplay = TempSet ;
  GoSub Display ;
  GoTo main ;
   
;======== Кнопка режим номер 2
press2:  
  Button two,0,40,5,BUF,0,press3 ; Якщо нажата 2
  DelayMS 200 ;
  TempSet = TempSet - 5 ; зменшуємо температуру
  If TempSet <= 150 Then TempSet = 150
  dlds = 0 ;
  delayds1 = 0 ; то саме шо на 1
  Flag1 = 1 ;
  Flag3 = 1 ;
  delaylost = 0 ;
  Flag4 = 1  
  TDisplay = TempSet ;
  GoSub Display ;
  GoTo main ;
   
press3:  
  Button thre,0,40,5,BUF,0,Dsp ; Кн. 3
  DelayMS 200 ;
  If Flag1 = 0 Then ; Переключаємо режим показу
  Flag1 = 1 ; встановлена
  Else ; чи
  Flag1 = 0 ; реальна
  EndIf ;
  GoTo main ;

Dsp:  
  If delayd >= 250 Then ;
  Inc delaydisp1 ; виводити на
  delayd = 0 ; дисплей
  If delaydisp1 = 1 Then ; приблизно раз
  GoSub Display ; в 500мс
  delaydisp1 = 0 ;
  EndIf
  EndIf
   
GoTo main
;===================================================
; Присвоєння цифрам значень
;===================================================
Display:
  If Flag1 = 0 Then
  DigitDisp = 10
  GoSub LOOK
  Cifra4 = cifra
  Else
  Cifra4 = 148
  EndIf
  DigitDisp = TDisplay Dig 0  
  GoSub LOOK
  Cifra3 = cifra
   
  DigitDisp = TDisplay Dig 1  
  GoSub LOOK
  Cifra2 = cifra

  DigitDisp = TDisplay Dig 2  
  GoSub LOOK
  Cifra1 = cifra

Return  

  '-------------------------------------------------------------------------
shim:
  CCP1CON.4 = duty_1.0 '  
  CCP1CON.5 = duty_1.1 '  
  CCPR1L = duty_1 >> 2
@ BSF T2CON,TMR2ON  

  Return
'==========================================================================

;============== PID =========================

PID:
  If TempSet > AD_Result Then ; Если установленная температура > реальной
  TError0 = TempSet - AD_Result ; Ошибка = Установл. - реальная
  Else ; если нет
  TError0 = 0 ; ошибка = 0
  EndIf ;
  If 150 < Power And Power < 500 Then ; Если мин. температура < (значения ШИМ) и (значение ШИМ) < макс. темп.  
  Integral = Integral + TError0 ; Увеличиваем интеграл на ошибку  
  EndIf
   
  If Integral > 500 Then Integral = 500 ; Ограничиваем интеграл, если этого не сделать
  ; значение ШИМ будет постоянно увеличиватся  
  P = Kp * (TError0 + NormKof) ; Пропорциональная составляющая
  PI = Ki * Integral ; Интегральная составляющая
   
  TempPower = P + PI ; П+И
   
  If TempPower > 765 Then Power = 1023 ; 765 это максимальный показатель АЦП, но так как у нас ограничение 500гр. то это условие не будет выполнятся  
  If TempPower < 0 Then Power = 0 ;
  If 765 > TempPower And TempPower >= 0 Then ; Если все значения в рамках допустимых
  Power = TempPower; ; Значение для ШИМ присваиваем переменной Power
  EndIf ;
  duty_1 = Power ;
Return
   
LOOK:

  ; 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , Гр  
  cifra = LookUpL DigitDisp,[192,249,164,176,153,146,130,248,128,144,156]  
Return

;===================== Кнопки - вибір режимів ====================
SelPrs:
  Cifra4 = 255 '
  Cifra3 = 146 ' S
  Cifra2 = 175 ' r
  Cifra1 = 140 ' P
   
  Button ENT,0,40,5,BUF,0,SelPrsB1 'Перевірка кл. ENT
  DelayMS 200
  GoSub SelSet
  Return  

SelPrsB1:
  Button one,0,40,5,BUF,0,SelPrsB2  
  DelayMS 200
   
  Cifra4 = 249
  Cifra3 = 191
  Cifra2 = 175
  Cifra1 = 140
  TempSet = Prs1
  DelayMS 1000
  TDisplay = TempSet
  GoSub Display
  DelayMS 1000
  delaylost = 0 ;
  Flag4 = 1  
  Return
   
SelPrsB2:  
  Button two,0,40,5,BUF,0,SelPrsB3  
  DelayMS 200
   
  Cifra4 = 164
  Cifra3 = 191
  Cifra2 = 175
  Cifra1 = 140
  TempSet = Prs2
  DelayMS 1000

  TDisplay = TempSet
  GoSub Display
  DelayMS 1000
  delaylost = 0 ;
  Flag4 = 1  
  Return

SelPrsB3:
  Button thre,0,40,5,BUF,0,SelPrs  
  DelayMS 200
   
  Cifra4 = 176
  Cifra3 = 191
  Cifra2 = 175
  Cifra1 = 140
  TempSet = Prs3
  DelayMS 1000

  TDisplay = TempSet
  GoSub Display
  DelayMS 1000
  delaylost = 0 ;
  Flag4 = 1  
  Return  

;===================== Кнопки - налаштування ====================
SelSet:
  Cifra4 = 255 '
  Cifra3 = 135 ' t
  Cifra2 = 134 ' E
  Cifra1 = 146 ' S
DelayMS 500  
SelSet1:
  If Flag2 = 0 Then
  DigitDisp = Prs1 Dig 0
  GoSub LOOK
  Cifra4 = cifra
  DigitDisp = Prs1 Dig 1
  GoSub LOOK
  Cifra3 = cifra
  DigitDisp = Prs1 Dig 2
  GoSub LOOK
  Cifra2 = cifra
  Cifra1 = 121
  Else If Flag2 = 1 Then
  DigitDisp = Prs2 Dig 0
  GoSub LOOK
  Cifra4 = cifra
  DigitDisp = Prs2 Dig 1
  GoSub LOOK
  Cifra3 = cifra
  DigitDisp = Prs2 Dig 2
  GoSub LOOK
  Cifra2 = cifra
  Cifra1 = 36
  Else  
  DigitDisp = Prs3 Dig 0
  GoSub LOOK
  Cifra4 = cifra
  DigitDisp = Prs3 Dig 1
  GoSub LOOK
  Cifra3 = cifra
  DigitDisp = Prs3 Dig 2
  GoSub LOOK
  Cifra2 = cifra
  Cifra1 = 48
  EndIf
   
  Button ENT,0,40,5,BUF,0,SelSetB1 'Перевірка кл. ENT
  DelayMS 200
  Select Flag2
  T0IE = 0 ' Виключити переривання по TMR0
  Case 0
  EWrite 0, [Prs1.LowByte]
  EWrite 1, [Prs1.HighByte]
  Case 1
  EWrite 2, [Prs2.LowByte]
  EWrite 3, [Prs2.HighByte]
  Case 2
  EWrite 4, [Prs3.LowByte]
  EWrite 5, [Prs3.HighByte]
  EndSelect
  T0IE = 1 ' Включити переривання по TMR0
  Return  

SelSetB1:
  Button one,0,40,5,BUF,0,SelSetB2  
  DelayMS 200
  Select Flag2
  Case 0
  Inc Prs1
  If Prs1 >= 500 Then Prs1 = 500
  Case 1
  Inc Prs2
  If Prs2 >= 500 Then Prs2= 500
  Case 2
  Inc Prs3  
  If Prs3 >= 500 Then Prs3 = 500
  EndSelect
  GoTo SelSet1
   
SelSetB2:  
  Button two,0,40,5,BUF,0,SelSetB3  
  DelayMS 200
  Select Flag2
  Case 0
  Dec Prs1
  If Prs1 <= 150 Then Prs1 = 150
  Case 1
  Dec Prs2
  If Prs2 <= 150 Then Prs2 = 150
  Case 2
  Dec Prs3  
  If Prs3 <= 150 Then Prs3 = 150
  EndSelect
  GoTo SelSet1

SelSetB3:
  Button thre,0,40,5,BUF,0,SelSet1  
  DelayMS 200
  Inc Flag2
  If Flag2 = 3 Then Flag2 = 0
  GoTo SelSet1

;============================================================
; ******** Запис нових коефіцієнтів через компорт *******
;============================================================
USART_:

loop1:
  Cifra4 = 240 ;  
  Cifra3 = 246 ;  
  Cifra2 = 246 ;  
  Cifra1 = 198 ;  
   
  Button thre,0,40,5,BUF,0,Postbut ; Кн. 3
  DelayMS 200 ;
  GoTo main ;

Postbut:
  HSerIn 100, loop1,[Str SerString] '  

  If SerString[0] = "q" And SerString[1] = "i" Then
  DelayMS 10
  HSerOut ["OK_qi"]
' DelayMS 200

  GoTo WriteK
  EndIf  

  If SerString[0] = "q" And SerString[1] = "r" Then
  DelayMS 10
  Cifra4 = 161 ;  
  Cifra3 = 136 ;  
  Cifra2 = 134 ;  
  Cifra1 = 175 ;  

  HSerOut ["OK_qr"]

t1:  
  HSerIn 100, t1,[Str SerString] '  

  If SerString[0] = "k" And SerString[1] = "i" Then
  DelayMS 30
  HSerOut ["OK_ki"]
  DelayMS 50
  HSerOut [Dec Ki]
; DelayMS 10
  EndIf
t2:  
  HSerIn 100, t2,[Str SerString] '  

  If SerString[0] = "k" And SerString[1] = "p" Then
  DelayMS 30
  HSerOut ["OK_kp"]
  DelayMS 50
  HSerOut [Dec Kp]
; DelayMS 10
  EndIf
t3:  
  HSerIn 100, t3,[Str SerString] '  

  If SerString[0] = "k" And SerString[1] = "f" Then
  DelayMS 30
  HSerOut ["OK_kf"]
  DelayMS 50
  HSerOut [Dec NormKof]
; DelayMS 10
  EndIf
   

  SerString[0] = "n"

EndIf
GoTo loop1  

;================ Запис нових значень =========================================

WriteK:
  Cifra4 = 135 ;  
  Cifra3 = 239 ;  
  Cifra2 = 175 ;  
  Cifra1 = 193 ;  

  HSerIn 100, WriteK,[Str SerString] ' Чекаємо поки прийде значення з порта

  If SerString[0] = "k" And SerString[1] = "p" Then ;Якщо прийшло "kp"
  ; TMP1 = 0
  DelayMS 20
  HSerOut ["OK_kp"]
  DelayMS 20

' While TMP1 = 0
;t0ie = 0
timeout:  
  HSerIn 1000, timeout ,[Dec Ki.Byte0]
  DelayMS 300
; HSerOut [Dec TMP2]
  HSerOut ["OK_b0"]

timeout1:  
  HSerIn 500, timeout1,[Dec Ki.Byte1]
  DelayMS 50
  HSerOut ["OK_b1"]
timeout2:  
  HSerIn 500, timeout2,[Dec Ki.Byte2]
  DelayMS 50
  HSerOut ["OK_b2"]
timeout3:  
  HSerIn 500, timeout3,[Dec Ki.Byte3]
   

  DelayMS 50
  HSerOut ["OK_b3"]
  ;Ki = TMP1
  DelayMS 350
  HSerOut [Dec Ki]

timeout4:  
  HSerIn 500, timeout4,[Dec TMP]
  Kp = TMP
  DelayMS 50
  HSerOut [Dec TMP]

timeout5:  
  HSerIn 500, timeout4,[Dec TMP]
  NormKof = TMP
  DelayMS 50
  HSerOut [Dec TMP]
   
T0IE = 0

  EWrite setKi,[Ki]
  EWrite setKp,[Kp]
  EWrite setNormkof,[NormKof]
   

T0IE = 1
  Else
  GoTo WriteK

  EndIf
  GoTo loop1  

End
 

Контроллер применен PIC16F886. Индикатор 4-х знаковый с общим анодом. Полевой транзистор для коммутации нагрузки выдрал с материнской платы. В моих печатках резисторы, конденсаторы(почти все), транзисторы в SMD корпусах.

Остальное описание, схемы в DipTrace, программа для настройки в архивах.

Ссылка на материалы к статье - здесь

Если будут вопросы, задавайте сюда.

Также по этой теме можно посмотреть еще разработки - Терморегулятор, Программируемый термостат, USB HID термометр, Работа с датчиком DS18B20, Прибор для измерения влажности, Работа с датчиком DS18S20, Работа с датчиком LM35




Категория: Proton PICBasic | Добавил: ivan_fd (25.09.2010)
Просмотров: 11315 | Комментарии: 5 | Теги: PROTON, паяльная станция, Программа, пример, статья | Рейтинг: 5.0/1
Всего комментариев: 5
1 ADMIN   (26.09.2010 07:05)
Отличная работа!
Если не получится прикрепить, скидывай мне на мыло, залью.
Программу можно написать прямо здесь, используя теги [code][/code]

2 brown   (06.10.2010 21:42)
Молодец! Будет время изучу подробней, может что то изменю в своей http://www.picbasic.ru/forum/5-122-1

3 ivan_fd   (07.10.2010 15:35)
Прошивку изменил, неправильно написал Интегральную составляющую. Добавил запоминание последней температуры, при включении устанавливается она.... Исходник в теге код.

4 chiper   (10.11.2010 10:31)
Интересный проект =) 5 баллов!

Можно ещё фотографии схемы и прочей начинки ?) Мне всегда интересно как и что реализовано. Придумать схему и написать программу это одно, но часто гораздо интереснее сам процесс реализации smile


5 MasterPic   (15.11.2010 14:11)
А не могли бы вы алгоритм работы написать еще и на русском? Был бы очень признателен. Я вот не понял по регулировке.

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]