'*************************************************************************
' Test example for MAX6675 (thermocouple K)
' Temperature reading in ºC with a Type K thermocouple (0 to 1024 ºC, ±2)
' Pic18F46k22, OshonSoft Pic18 Basic Compiler v6.10
' Using the SPI software.
' By COS, doglfu66@yahoo.es
' v20260927
'*************************************************************************
' ************************************************************************
' ************************************************************************
' PCB HL-K18 Jumper Configuration:
' General Jumpers on HL-K18: VCC, GND, PGC, PGD, OSC2, OSC1, VPP
' RS232 Interface: TX (Transmit), RX (Receive), BZ (Buzzer)
' Specific Jumpers for this setup: NONE
' Switches S2 and S4 should both be set to OFF.
' PICKIT2 Jumpers on HL-K18: Not used, external programmer.
' ************************************************************************
' Configuration of microcontroller fuses
' Setting up internal oscillator with 4x PLL to achieve 64MHz system clock
' MCLR enabled for external reset <---------------------------------------
#define CONFIG1L = 0x00  ' Low Power Timer and memory settings
#define CONFIG1H = 0xF8  ' External oscillator with PLL enabled
#define CONFIG2L = 0x1E  ' Brown-out Reset, Power-Up Timer
#define CONFIG2H = 0x3C  ' Watchdog Timer setup
#define CONFIG3L = 0x00  ' Low-voltage programming disabled
#define CONFIG3H = 0xBD  ' Port configuration options
#define CONFIG4L = 0x80  ' Stack overflow and underflow reset enabled
#define CONFIG4H = 0x00  ' Additional configuration bits
#define CONFIG5L = 0x0F  ' Code protection
#define CONFIG5H = 0xC0  ' Data EEPROM code protection
#define CONFIG6L = 0x0F  ' Write protection settings
#define CONFIG6H = 0xE0  ' Configuration protection bits
#define CONFIG7L = 0x0F  ' Boot block protection settings
#define CONFIG7H = 0x40  ' Configuration for block protection
' General configuration
#define CLOCK_FREQUENCY = 64		' System clock frequency in MHz
#define SINGLE_DECIMAL_PLACES = 1	' Number of decimal places for floating-point operations
#define STRING_MAX_LENGTH = 40		' Maximum length for String variables
'#define SIMULATION_WAITMS_VALUE = 0 'Activate only in simulation.
'**********************************************************
'Include "_Pic18F46K22Lib.bas"
Include "Max6675_Lib.bas"
'**********************************************************
'Clock internal 64Mhz.
OSCCON = %01110000 ' Call _Setup_Oscillator(_OSC_16MHz_HF)
OSCTUNE.PLLEN = 1 ' Call _SET_PLL4(_PLL_ON)
RCON.IPEN = 0 'Call _Interrupts_Mode(_DISABLE_PRIORITY)
'Call _SlewRate(_Disable) 'Enabled by default.
'**********************************************************
AllDigital
UART1_Init 115200
WaitMs 1
UART1_Write 0x0C ' New page
WaitMs 100
UART1_Write "Ready", CrLf
WaitMs 100

Dim MAX6675_ERROR_THERMOCOUPLE As Byte
Dim temperature As Integer
MAX6675_ERROR_THERMOCOUPLE = 0
temperature = 0

MAX6675_Init()

While (True)
	temperature = MAX6675_Read(MAX6675_ERROR_THERMOCOUPLE)

    If MAX6675_ERROR_THERMOCOUPLE Then
		' Action in case of error.
		UART_Write "Error_thermocouple: ", #temperature,CrLf
    Else
		' Correct reading.
		UART_Write "Temp. ", #temperature, "ºC", CrLf
    Endif

    WaitMs 500 ' The MAX6675 requires at least 220 ms between conversions.
Wend
End

