Запросила жена термометр для духовки. Решил собрать из подручных материалов. В наличии термопара с модулем на MAX6675, микроконтроллер из охранного извещателя Шорох 3 PIC16LF1829 и трёхразрядный семисегментный индикатор. Программу писал в GreatCowBASIC. Спойлер: Схема Спойлер: Макетка Спойлер: Результат Термопару установил в отверстие родом с штатным термостатом. Подключил к плите - при включение духовки включается и термометр. Питается от зарядки старого мобильника. Спойлер: Исходник Код (C++): 'Chip settings #chip 16LF1829, 16 #config Osc = Int SPIMode MasterSlow DIM Temperature as Word ' Значение температуры с термопары DIM SegmentsBuffer(3) as Byte ' Буфер символов для отображения на индикаторе DIM Symbols(13) ' Значения символов от 0 до 9, пусто, E, r Symbols = 111, 40, 31, 62, 120, 118, 119, 44, 127, 126, 0, 87, 17 #define SymbolE 11 ' Буква E #define SymbolR 12 ' Буква r #define Clear 10 ' Нет символа #define delay 5 ' Время отображения одного символа DIM L_byte as Byte DIM Timer as Byte ' SPI #define CS PortA.5 #define SCK PortB.6 #define SO PortB.4 Dir SO in Dir SCK out Dir CS out ' 7 Segments #define SEG1 PORTA.4 #define SEG2 PORTA.2 #define SEG3 PORTB.5 Dir PORTC out Dir SEG1 out Dir SEG2 out Dir SEG3 out Wait 1 s Timer = 100 do Forever if Timer = 100 then call GetTemperature Timer = 0 end if call ShowSegments Timer = Timer + 1 Loop Sub GetTemperature CS = 0 SPITransfer 0, Temperature Temperature = FnLSL(Temperature, 8) SPITransfer 0, L_byte Temperature = Temperature or L_byte Temperature = FnLSR(Temperature, 5) CS = 1 End Sub Sub ShowSegments if Temperature = 1023 then SegmentsBuffer(1) = SymbolE SegmentsBuffer(2) = SymbolR SegmentsBuffer(3) = SymbolR else if Temperature > 99 then SegmentsBuffer(1) = Temperature / 100 SegmentsBuffer(2) = Temperature % 100 SegmentsBuffer(2) = SegmentsBuffer(2) / 10 SegmentsBuffer(3) = Temperature % 10 else if Temperature > 9 then SegmentsBuffer(1) = Clear SegmentsBuffer(2) = Temperature / 10 SegmentsBuffer(3) = Temperature % 10 else SegmentsBuffer(1) = Clear SegmentsBuffer(2) = Clear SegmentsBuffer(3) = Temperature end if PORTC = Symbols(SegmentsBuffer(1)+1) Set SEG1 Off Set SEG3 On Wait delay ms PORTC = Symbols(SegmentsBuffer(2)+1) Set SEG3 Off Set SEG2 On Wait delay ms PORTC = Symbols(SegmentsBuffer(3)+1) Set SEG2 Off Set SEG1 On Wait delay ms End Sub