feat: new firmware

pull/1276/head
Noah Gaeta 2024-12-05 12:24:04 -05:00
rodzic 3d5989ef60
commit ee9ff9faed
10 zmienionych plików z 103 dodań i 3 usunięć

Wyświetl plik

@ -29,6 +29,13 @@
#define config_h
#include "grbl.h" // For Arduino IDE compatibility.
enum MachineType {
RCMINI,
BAMBOO
}
#define MACHINE_TYPE MachineType::BAMBOO
// Define CPU pin map and default settings.
// NOTE: OEMs can avoid the need to maintain/update the defaults.h and cpu_map.h files and use only

Wyświetl plik

@ -22,7 +22,7 @@
#define grbl_h
// Grbl versioning system
#define GRBL_VERSION "1.1h"
#define GRBL_VERSION "1.2h"
#define GRBL_VERSION_BUILD "20190830"
// Define standard libraries used by Grbl.
@ -60,6 +60,8 @@
#include "spindle_control.h"
#include "stepper.h"
#include "jog.h"
#include "vcm.h"
#include "spi.h"
// ---------------------------------------------------------------------------------------
// COMPILE-TIME ERROR CHECKING OF DEFINE VALUES:

Wyświetl plik

@ -95,6 +95,20 @@ uint8_t limits_get_state()
}
uint8_t pinch_roller_get_state()
{
if (MACHINE_TYPE === MachineType::BAMBOO)
{
// Check PC3 state
if (PINC & (1 << PINC3))
{
return 1;
}
}
return 0;
}
// This is the Limit Pin Change Interrupt, which handles the hard limit feature. A bouncing
// limit switch can cause a lot of problems, like false readings and multiple interrupt calls.
// If a switch is triggered at all, something bad has happened and treat it as such, regardless

Wyświetl plik

@ -32,6 +32,8 @@ void limits_disable();
// Returns limit state as a bit-wise uint8 variable.
uint8_t limits_get_state();
uint8_t pinch_roller_get_state();
// Perform one portion of the homing cycle based on the input settings.
void limits_go_home(uint8_t cycle_mask);

Wyświetl plik

@ -91,6 +91,8 @@ int main(void)
coolant_init();
limits_init();
probe_init();
vcm_init();
motor_spi_init();
plan_reset(); // Clear block buffer and planner variables
st_reset(); // Clear stepper subsystem variables.

Wyświetl plik

@ -369,7 +369,7 @@ void report_execute_startup_message(char *line, uint8_t status_code)
// Prints build info line
void report_build_info(char *line)
{
printPgmString(PSTR("[VER:" GRBL_VERSION "." GRBL_VERSION_BUILD ":"));
printPgmString(PSTR("[VER:" GRBL_VERSION "." GRBL_VERSION_BUILD ":" MACHINE_TYPE ":" ));
printString(line);
report_util_feedback_line_feed();
printPgmString(PSTR("[OPT:")); // Generate compile-time build option list
@ -568,7 +568,8 @@ void report_realtime_status()
uint8_t lim_pin_state = limits_get_state();
uint8_t ctrl_pin_state = system_control_get_state();
uint8_t prb_pin_state = probe_get_state();
if (lim_pin_state | ctrl_pin_state | prb_pin_state) {
uint8_t pinch_roller_state = pinch_roller_get_state();
if ((lim_pin_state | ctrl_pin_state | prb_pin_state) || pinch_roller_state) {
printPgmString(PSTR("|Pn:"));
if (prb_pin_state) { serial_write('P'); }
if (lim_pin_state) {
@ -586,6 +587,7 @@ void report_realtime_status()
if (bit_istrue(lim_pin_state,bit(X_AXIS))) { serial_write('X'); }
if (bit_istrue(lim_pin_state,bit(Y_AXIS))) { serial_write('Y'); }
if (bit_istrue(lim_pin_state,bit(Z_AXIS))) { serial_write('Z'); }
if (pinch_roller_state) { serial_write('R'); }
#endif
}
if (ctrl_pin_state) {

56
grbl/spi.c 100644
Wyświetl plik

@ -0,0 +1,56 @@
#include "grbl.h"
#define CS1_PORT PORTC // Chip Select for Driver 1
#define CS1_PIN PC0
#define CS2_PORT PORTC // Chip Select for Driver 2
#define CS2_PIN PC1
#define SPI_DDR DDRB
#define SPI_PORT PORTB
#define MOSI PB3
#define MISO PB4
#define SCK PB5
void spi_init() {
SPI_DDR |= (1 << MOSI) | (1 << SCK); // Set MOSI and SCK as output
SPI_DDR &= ~(1 << MISO); // Set MISO as input
SPCR = (1 << SPE) | (1 << MSTR) | (1 << SPR0); // Enable SPI, Master, Fclk/16
}
void spi_write(uint8_t cs_port, uint8_t cs_pin, uint8_t address, uint8_t data) {
// Pull CS low to select device
cs_port &= ~(1 << cs_pin);
_delay_us(1); // Short delay for setup
// Send address
SPDR = address;
while (!(SPSR & (1 << SPIF))); // Wait for transmission to complete
// Send data
SPDR = data;
while (!(SPSR & (1 << SPIF))); // Wait for transmission to complete
// Pull CS high to deselect device
cs_port |= (1 << cs_pin);
_delay_us(1); // Short delay for setup
}
/**
* CTRL1 Control Register (address = 0x04) [Default = 0Fh]
* BIT = 2-0
* SETTING = DECAY MODE
* 111b = Smart tune Ripple Control
*/
void motor_spi_init() {
// Configure Chip Select pins as outputs
DDRC |= (1 << CS1_PIN) | (1 << CS2_PIN);
CS1_PORT |= (1 << CS1_PIN); // Set CS high (deselect)
CS2_PORT |= (1 << CS2_PIN); // Set CS high (deselect)
// Send configuration to Driver 1
spi_write(CS1_PORT, CS1_PIN, 0x04, 0x07);
// Send configuration to Driver 2
spi_write(CS2_PORT, CS2_PIN, 0x04, 0x07);
}

2
grbl/spi.h 100644
Wyświetl plik

@ -0,0 +1,2 @@
void motor_spi_init();

11
grbl/vcm.c 100644
Wyświetl plik

@ -0,0 +1,11 @@
#include "grbl.h"
void vcm_init()
{
if (MACHINE_TYPE === MachineType::BAMBOO)
{
DDRD |= (1 << DDD7);
// Set pin 7 to HIGH
PORTD |= (1 << PORTD7);
}
}

2
grbl/vcm.h 100644
Wyświetl plik

@ -0,0 +1,2 @@
void vcm_init();