Added support for fans plugin, MCP3221 ADC converter.
This commit is contained in:
parent
59fac61af3
commit
355f261f11
|
@ -39,6 +39,10 @@
|
|||
#define DIGITAL_IN(gpio) (!!(gpio.reg->DR & gpio.bit))
|
||||
#define DIGITAL_OUT(gpio, on) { if(on) gpio.reg->DR_SET = gpio.bit; else gpio.reg->DR_CLEAR = gpio.bit; }
|
||||
|
||||
#ifndef MCP3221_ENABLE
|
||||
#define MCP3221_ENABLE 0
|
||||
#endif
|
||||
|
||||
#if USB_SERIAL_CDC > 0
|
||||
//#define UART_DEBUG // For development only - enable only with USB_SERIAL_CDC enabled and SPINDLE_HUANYANG disabled
|
||||
#endif
|
||||
|
@ -137,6 +141,9 @@
|
|||
#if KEYPAD_ENABLE
|
||||
#error "KEYPAD_ENABLE requires I2C_PORT to be defined!"
|
||||
#endif
|
||||
#if MCP3221_ENABLE
|
||||
#error "MCP3221_ENABLE requires I2C_PORT to be defined!"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if !(SPINDLEPWMPIN == 12 || SPINDLEPWMPIN == 13)
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
Part of grblHAL
|
||||
|
||||
Some parts of this code is Copyright (c) 2020 Terje Io
|
||||
Some parts of this code is Copyright (c) 2020-2021 Terje Io
|
||||
|
||||
Some parts are derived/pulled from WireIMXRT.cpp in the Teensyduino Core Library (no copyright header)
|
||||
|
||||
|
@ -166,6 +166,7 @@ typedef enum {
|
|||
I2CState_ReceiveNext,
|
||||
I2CState_ReceiveNextToLast,
|
||||
I2CState_ReceiveLast,
|
||||
I2CState_Poll,
|
||||
I2CState_Error
|
||||
} i2c_state_t;
|
||||
|
||||
|
@ -273,7 +274,7 @@ uint8_t *I2C_Receive (uint32_t i2cAddr, uint8_t *buf, uint16_t bytes, bool block
|
|||
return i2c.buffer;
|
||||
}
|
||||
|
||||
void I2C_Send (uint32_t i2cAddr, uint8_t *buf, uint16_t bytes, bool block)
|
||||
bool I2C_Send (uint32_t i2cAddr, uint8_t *buf, uint16_t bytes, bool block)
|
||||
{
|
||||
i2c.count = bytes;
|
||||
i2c.data = buf ? buf : i2c.buffer;
|
||||
|
@ -290,8 +291,19 @@ void I2C_Send (uint32_t i2cAddr, uint8_t *buf, uint16_t bytes, bool block)
|
|||
|
||||
i2c.state = i2c.count == 0 ? I2CState_AwaitCompletion : (i2c.count == 1 ? I2CState_SendLast : I2CState_SendNext);
|
||||
|
||||
if(block)
|
||||
while(i2cIsBusy);
|
||||
if(block) {
|
||||
while(i2cIsBusy) {
|
||||
if(bytes == 0) {
|
||||
hal.delay_ms(2, 0);
|
||||
if(port->MSR & LPI2C_MSR_PLTF) {
|
||||
wait_ready();
|
||||
i2c.state = I2CState_Error;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return !block || i2c.state != I2CState_Error;
|
||||
}
|
||||
|
||||
uint8_t *I2C_ReadRegister (uint32_t i2cAddr, uint8_t *buf, uint8_t abytes, uint16_t bytes, bool block)
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
i2c.h - I2C interface
|
||||
|
||||
Driver code for IMXRT1062 processor (on Teensy 4.0 board)
|
||||
Driver code for IMXRT1062 processor (on Teensy 4.x board)
|
||||
|
||||
Part of grblHAL
|
||||
|
||||
|
@ -29,7 +29,7 @@
|
|||
|
||||
void i2c_init (void);
|
||||
uint8_t *I2C_Receive (uint32_t i2cAddr, uint8_t *buf, uint16_t bytes, bool block);
|
||||
void I2C_Send (uint32_t i2cAddr, uint8_t *buf, uint16_t bytes, bool block);
|
||||
bool I2C_Send (uint32_t i2cAddr, uint8_t *buf, uint16_t bytes, bool block);
|
||||
uint8_t *I2C_ReadRegister (uint32_t i2cAddr, uint8_t *buf, uint8_t abytes, uint16_t bytes, bool block);
|
||||
|
||||
#if TRINAMIC_ENABLE && TRINAMIC_I2C
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
*/
|
||||
|
||||
#include "driver.h"
|
||||
#include "mcp3221.h"
|
||||
|
||||
#ifdef HAS_IOPORTS
|
||||
|
||||
|
@ -31,7 +32,7 @@
|
|||
|
||||
#include "grbl/protocol.h"
|
||||
|
||||
static uint_fast8_t aux_n_in, aux_n_out;
|
||||
static uint_fast8_t aux_n_in, aux_n_out, analog_n_in;
|
||||
static volatile uint32_t event_bits;
|
||||
static volatile bool spin_lock = false;
|
||||
static input_signal_t *aux_in;
|
||||
|
@ -202,8 +203,10 @@ static int32_t wait_on_input (bool digital, uint8_t port, wait_mode_t wait_mode,
|
|||
if(port < aux_n_in)
|
||||
value = get_input(&aux_in[port], (settings.ioport.invert_in.mask << port) & 0x01, wait_mode, timeout);
|
||||
}
|
||||
// else if(port == 0)
|
||||
// value = analogRead(41);
|
||||
#if MCP3221_ENABLE
|
||||
else if(port < analog_n_in)
|
||||
value = (int32_t)MCP3221_read();
|
||||
#endif
|
||||
|
||||
return value;
|
||||
}
|
||||
|
@ -257,6 +260,11 @@ void ioports_init (pin_group_pins_t *aux_inputs, pin_group_pins_t *aux_outputs)
|
|||
if((hal.port.num_digital_out = aux_n_out = aux_outputs->n_pins))
|
||||
hal.port.digital_out = digital_out;
|
||||
|
||||
#if MCP3221_ENABLE
|
||||
if(MCP3221_init())
|
||||
hal.port.num_analog_in = analog_n_in = 1;
|
||||
#endif
|
||||
|
||||
hal.port.set_pin_description = set_pin_description;
|
||||
|
||||
details.on_get_settings = grbl.on_get_settings;
|
||||
|
|
|
@ -0,0 +1,41 @@
|
|||
/*
|
||||
mcp3221.c - analog input from a MCP3221 I2C ADC
|
||||
|
||||
Driver code for IMXRT1062 processor (on Teensy 4.x board)
|
||||
|
||||
Part of grblHAL
|
||||
|
||||
Copyright (c) 2021 Terje Io
|
||||
|
||||
Grbl is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Grbl is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Grbl. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "i2c.h"
|
||||
#include "mcp3221.h"
|
||||
|
||||
uint16_t MCP3221_read (void)
|
||||
{
|
||||
uint8_t value[2];
|
||||
|
||||
I2C_Receive(MCP3221_ADDRESS, value, 2, true);
|
||||
|
||||
return value[0] << 8 | value[1];
|
||||
}
|
||||
|
||||
bool MCP3221_init (void)
|
||||
{
|
||||
i2c_init();
|
||||
|
||||
return I2C_Send(MCP3221_ADDRESS, NULL, 0, true);
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
/*
|
||||
mcp3221.h - analog input from a MCP3221 I2C ADC
|
||||
|
||||
Driver code for IMXRT1062 processor (on Teensy 4.x board)
|
||||
|
||||
Part of grblHAL
|
||||
|
||||
Copyright (c) 2021 Terje Io
|
||||
|
||||
Grbl is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Grbl is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Grbl. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#define MCP3221_ADDRESS 0b1001101
|
||||
|
||||
uint16_t MCP3221_read (void);
|
||||
bool MCP3221_init (void);
|
||||
|
||||
/*EOF*/
|
|
@ -49,18 +49,20 @@ N_AXIS has a default value of 3, edit grbl\config.h to increase.
|
|||
|
||||
*/
|
||||
|
||||
#define USB_SERIAL_CDC 2 // 1 for Arduino class library and 2 for PJRC C library. Comment out to use UART communication.
|
||||
//#define USB_SERIAL_CDC 2 // 1 for Arduino class library and 2 for PJRC C library. Comment out to use UART communication.
|
||||
//#define USB_SERIAL_WAIT 1 // Wait for USB connection before starting grblHAL.
|
||||
//#define BLUETOOTH_ENABLE 1 // Set to 1 for HC-05 module. Requires Bluetooth plugin.
|
||||
//#define BLUETOOTH_ENABLE 1 // Set to 1 for HC-05 module. Requires Bluetooth plugin.
|
||||
//#define SPINDLE_HUANYANG 1 // Set to 1 or 2 for Huanyang VFD spindle. Requires spindle plugin.
|
||||
//#define QEI_ENABLE 1 // Enable quadrature encoder interfaces. Max value is 1. Requires encoder plugin.
|
||||
//#define ETHERNET_ENABLE 1 // Ethernet streaming. Requires networking plugin.
|
||||
//#define SDCARD_ENABLE 1 // Run gcode programs from SD card, requires sdcard plugin.
|
||||
//#define KEYPAD_ENABLE 1 // I2C keypad for jogging etc., requires keypad plugin.
|
||||
//#define PLASMA_ENABLE 1 // Plasma/THC plugin. To be completed.
|
||||
//#define MCP3221_ENABLE 1 // Enable analog input via MCP3221 ADC.
|
||||
//#define PPI_ENABLE 1 // Laser PPI plugin. To be completed.
|
||||
//#define ODOMETER_ENABLE 1 // Odometer plugin.
|
||||
//#define OPENPNP_ENABLE 1 // OpenPNP plugin. To be completed.
|
||||
//#define FANS_ENABLE 1 // Enable fan control via M106/M107. Requires fans plugin.
|
||||
//#define EEPROM_ENABLE 1 // I2C EEPROM support. Set to 1 for 24LC16(2K), 2 for larger sizes. Requires eeprom plugin.
|
||||
//#define EEPROM_IS_FRAM 1 // Uncomment when EEPROM is enabled and chip is FRAM, this to remove write delay.
|
||||
//#define SPINDLE_SYNC_ENABLE 1 // Enable spindle sync support (G33, G76). !! NOTE: Alpha quality - enable only for test or verification.
|
||||
|
|
Loading…
Reference in New Issue