void ModbusSpindleControl::on_module_loaded()
{

    spindle_on = false;
    PinName rx_pin;
    PinName tx_pin;
    PinName dir_pin;
    
    // preparing PinName objects from the config string
    {
        Pin *smoothie_pin = new Pin();
        smoothie_pin->from_string(THEKERNEL->config->value(spindle_checksum, spindle_rx_pin_checksum)->by_default("nc")->as_string());
        smoothie_pin->as_input();
        rx_pin = port_pin((PortName)smoothie_pin->port_number, smoothie_pin->pin);
        
        smoothie_pin->from_string(THEKERNEL->config->value(spindle_checksum, spindle_tx_pin_checksum)->by_default("nc")->as_string());
        smoothie_pin->as_input();
        tx_pin = port_pin((PortName)smoothie_pin->port_number, smoothie_pin->pin);
        
        smoothie_pin->from_string(THEKERNEL->config->value(spindle_checksum, spindle_dir_pin_checksum)->by_default("nc")->as_string());
        smoothie_pin->as_input();
        dir_pin = port_pin((PortName)smoothie_pin->port_number, smoothie_pin->pin);

        delete smoothie_pin;
    }

    // setup the Modbus interface
    modbus = new Modbus(tx_pin, rx_pin, dir_pin);

    // register for events
    register_for_event(ON_GCODE_RECEIVED);
}
  void HD_reset () {
   // LCD Reset
	  port_pin(0,0, disable, high);// reset=1;
	  delay(10);
	  port_pin(0,0, disable, low);// reset=0;
	  delay(100);
	  port_pin(0,0, disable, high);// reset=1;
	  delay(120);
}
void  write_command(uint8_t hexa)
{
	port_pin(4,9, disable, low);//cs=0
	port_pin(4,10, disable, low);//dc=0
    xf_setup.length = sizeof(hexa);
	xf_setup.rx_data = Rx_Buf;
    xf_setup.rx_cnt = xf_setup.tx_cnt = 0;
    xf_setup.tx_data= hexa;
    Chip_SSP_Enable(LPC_SSP);
    Chip_SSP_RWFrames_Blocking(LPC_SSP, &xf_setup);
    port_pin(4,9, disable, high);//cs=1

}
Пример #4
0
void port_dir(port_t *obj, PinDirection dir) {
    uint32_t i;
    obj->direction = dir;
    for (i = 0; i < 16; i++) { // Process all pins
        if (obj->mask & (1 << i)) { // If the pin is used
            if (dir == PIN_OUTPUT) {
                pin_function(port_pin(obj->port, i), STM_PIN_DATA(GPIO_Mode_OUT, GPIO_OType_PP, GPIO_PuPd_NOPULL, 0xFF));
            } else { // PIN_INPUT
                pin_function(port_pin(obj->port, i), STM_PIN_DATA(GPIO_Mode_IN, 0, GPIO_PuPd_NOPULL, 0xFF));
            }
        }
    }  
}
Пример #5
0
void port_mode(port_t *obj, PinMode mode) {
    uint32_t i;  
    for (i = 0; i < 16; i++) { // Process all pins
        if (obj->mask & (1 << i)) { // If the pin is used
            pin_mode(port_pin(obj->port, i), mode);
        }
    }
}
void rele_off(uint8_t rele_n)
{
    switch(rele_n)
    {
    case DOUT0:
        port_pin(4,4, disable, low);
        break;
    case DOUT1:
        port_pin(4,5, disable, low);
        break;
    case DOUT2:
        port_pin(4,6, disable, low);
        break;
    case DOUT3:
        port_pin(2,1, disable, low);
        break;
    }
}
void open_drain_off(uint8_t drain_n)
{
    switch(drain_n)
    {
    case DOUT4:
        port_pin(4,8, disable, high);
        break;
    case DOUT5:
        port_pin(4,9, disable, high);
        break;
    case DOUT6:
        port_pin(4,10, disable,high);
        break;
    case DOUT7:
        port_pin(1,5,  disable,high);
        break;
    }
}
Пример #8
0
void port_mode(port_t *obj, PinMode mode) {
    uint32_t i;
    // The mode is set per pin: reuse pinmap logic
    for (i=0; i<32; i++) {
        if (obj->mask & (1<<i)) {
            pin_mode(port_pin(obj->port, i), mode);
        }
    }
}
Пример #9
0
void port_dir(port_t *obj, PinDirection dir)
{
    uint32_t i;
    // The mode is set per pin: reuse gpio logic
    for (i=0; i<32; i++) {
        if (obj->mask & (1<<i)) {
            pin_dir(port_pin(obj->port, i), dir);
        }
    }
}
Пример #10
0
void port_init(port_t *obj, PortName port, int mask, PinDirection dir)
{
    obj->port = port;
    obj->mask = mask;
    obj->reg_out = &MXC_GPIO->out_val[port];
    obj->reg_in  = &MXC_GPIO->in_val[port];

    /* Ensure that the GPIO clock is enabled */
	MXC_CLKMAN->sys_clk_ctrl_6_gpio = MXC_S_CLKMAN_CLK_SCALE_DIV_1;

    uint32_t i;
    // The function is set per pin: reuse gpio logic
    for (i=0; i<32; i++) {
        if (obj->mask & (1<<i)) {
            gpio_set(port_pin(obj->port, i));
            pin_dir(port_pin(obj->port, i), dir);
        }
    }
}
Пример #11
0
void port_mode(port_t *obj, PinMode mode)
{
    /* Set mode for pins given by mask */
    uint32_t pin;
    for (pin = 0; pin < PORT_NUM_PINS; pin++) {
        if (obj->mask & (1 << pin)) {
            pin_mode(port_pin(obj->port, pin), mode);
        }
    }
}
Пример #12
0
void port_mode(port_t *obj, PinMode mode)
{
    uint32_t i;
    
    for (i = 0; i < GPIO_PIN_MAX; i++) {
        if (obj->mask & (1 << i)) {
            pin_mode(port_pin(obj->port, i), mode);
        }
    }
}
void rele_init(void)
{
    /*Inicializo salidas a relé*/
    port_pin(4,4, MD_PUP,init_out);
    port_pin(4,5, MD_PUP,init_out);
    port_pin(4,6, MD_PUP,init_out);
    port_pin(2,1,MD_PUP,init_out);

    /*desenergizo las bobinas de los relés*/
    port_pin(4,4, disable, low);
    port_pin(4,5, disable, low);
    port_pin(4,6, disable, low);
    port_pin(2,1,disable,  low);
}
void open_drain_init(void)
{
    /*inicializo salidas open drain*/
    port_pin(4,8, MD_PUP,init_out);
    port_pin(4,9, MD_PUP,init_out);
    port_pin(4,10, MD_PUP,init_out);
    port_pin(1,5,MD_PUP,init_out);

    /*salidas open drain OFF*/
    port_pin(4,8, disable, high);
    port_pin(4,9, disable, high);
    port_pin(4,10, disable,high);
    port_pin(1,5,disable,  high);
}
Пример #15
0
void port_init(port_t *obj, PortName port, int mask, PinDirection dir)
{
    obj->port = port;
    obj->mask = mask;

    // The function is set per pin: reuse gpio logic
    for (uint32_t i = 0; i < 32; i++) {
        if (obj->mask & (1 << i)) {
            gpio_set(port_pin(obj->port, i));
        }
    }

    port_dir(obj, dir);
}
Пример #16
0
void port_init(port_t *obj, PortName port, int mask, PinDirection dir)
{
    obj->port      = port;
    obj->mask      = mask;
    obj->direction = dir;

    uint32_t i;
    obj->direction = dir;
    for (i = 0; i < GPIO_PIN_MAX; i++) {
        if (obj->mask & (1 << i)) {
            gpio_set(port_pin(port, i));
        }
    }
    
    port_dir(obj, dir);
}
Пример #17
0
void port_init(port_t *obj, PortName port, int mask, PinDirection dir) {
    obj->port = port;
    obj->mask = mask;
    
    LPC_GPIO_TypeDef *port_reg = ((LPC_GPIO_TypeDef *) (LPC_GPIO0_BASE + (port * 0x10000)));
    
    obj->reg_data  = &port_reg->DATA;
    obj->reg_dir = &port_reg->DIR;
    
    uint32_t i;
    // The function is set per pin: reuse gpio logic
    for (i=0; i<12; i++) {
        if (obj->mask & (1<<i)) {
            gpio_set(port_pin(obj->port, i));
        }
    }
    
    port_dir(obj, dir);
}
Пример #18
0
void port_init(port_t *obj, PortName port, int mask, PinDirection dir) {
    obj->port = port;
    obj->mask = mask;
    
    LPC_GPIO->MASK[port] = ~mask;
    
    obj->reg_mpin = &LPC_GPIO->MPIN[port];
    obj->reg_dir = &LPC_GPIO->DIR[port];
    
    uint32_t i;
    // The function is set per pin: reuse gpio logic
    for (i=0; i<32; i++) {
        if (obj->mask & (1<<i)) {
            gpio_set(port_pin(obj->port, i));
        }
    }
    
    port_dir(obj, dir);
}
Пример #19
0
void port_init(port_t *obj, PortName port, int mask, PinDirection dir) {
    obj->port = port;
    obj->mask = mask;

    GPIO_Type *reg = (GPIO_Type *)(PTA_BASE + port * 0x40);

    obj->reg_out = &reg->PDOR;
    obj->reg_in  = &reg->PDIR;
    obj->reg_dir = &reg->PDDR;

    uint32_t i;
    // The function is set per pin: reuse gpio logic
    for (i=0; i<32; i++) {
        if (obj->mask & (1<<i)) {
            gpio_set(port_pin(obj->port, i));
        }
    }

    port_dir(obj, dir);
}
Пример #20
0
void port_init(port_t *obj, PortName port, int mask, PinDirection dir) {
    obj->port = port;
    obj->mask = mask;

    CMSDK_GPIO_TypeDef *port_reg =
        (CMSDK_GPIO_TypeDef *)(CMSDK_GPIO0_BASE + ((int)port * 0x10));

    obj->reg_in = &port_reg->DATAOUT;
    obj->reg_dir = &port_reg->OUTENABLESET;
    obj->reg_dirclr = &port_reg->OUTENABLECLR;

    uint32_t i;
    // The function is set per pin: reuse gpio logic
    for (i=0; i<16; i++) {
        if (obj->mask & (1<<i)) {
            gpio_set(port_pin(obj->port, i));
        }
    }

    port_dir(obj, dir);
}
Пример #21
0
void port_init(port_t *obj, PortName port, int mask, PinDirection dir) {
    obj->port = port;
    obj->mask = mask;
    
    LPC_GPIO_TypeDef *port_reg = (LPC_GPIO_TypeDef *)(LPC_GPIO0_BASE + ((int)port * 0x20));
    
    port_reg->MASK = ~mask;
    
    obj->reg_out = &port_reg->PIN;
    obj->reg_in  = &port_reg->PIN;
    obj->reg_dir  = &port_reg->DIR;
    
    uint32_t i;
    // The function is set per pin: reuse gpio logic
    for (i=0; i<32; i++) {
        if (obj->mask & (1<<i)) {
            gpio_set(port_pin(obj->port, i));
        }
    }
    
    port_dir(obj, dir);
}
Пример #22
0
void port_init(port_t *obj, PortName port, int mask, PinDirection dir) {
    obj->port = port;
    obj->mask = mask;
    
    LPC_GPIO_T *port_reg = (LPC_GPIO_T *)(LPC_GPIO_PORT_BASE);
    
    // Do not use masking, because it prevents the use of the unmasked pins
    // port_reg->MASK[port] = ~mask;
    
    obj->reg_out = &port_reg->PIN[port];
    obj->reg_in  = &port_reg->PIN[port];
    obj->reg_dir = &port_reg->DIR[port];
	
    uint32_t i;
    // The function is set per pin: reuse gpio logic
    for (i=0; i<32; i++) {
        if (obj->mask & (1<<i)) {
            gpio_set(port_pin(obj->port, i));
        }
    }

    port_dir(obj, dir);
}
Пример #23
0
void port_init(port_t *obj, PortName port, int mask, PinDirection dir) {
    obj->port = port;
    obj->mask = mask;
    
    LPC_GPIO_TypeDef *port_reg = (LPC_GPIO_TypeDef *)(LPC_GPIO0_BASE + ((int)port * 0x20));
    
    // Do not use masking, because it prevents the use of the unmasked pins
    // port_reg->FIOMASK = ~mask;
    
    obj->reg_out = &port_reg->FIOPIN;
    obj->reg_in  = &port_reg->FIOPIN;
    obj->reg_dir  = &port_reg->FIODIR;
    
    uint32_t i;
    // The function is set per pin: reuse gpio logic
    for (i=0; i<32; i++) {
        if (obj->mask & (1<<i)) {
            gpio_set(port_pin(obj->port, i));
        }
    }
    
    port_dir(obj, dir);
}
Пример #24
0
void led_off(uint8_t led_n)
{
  switch(led_n)
  {

    case LED1      : port_pin(2,10, disable, low);
                     break;
    case LED2      : port_pin(2,11, disable, low);
                     break;
    case LED3      : port_pin(2,12, disable, low);
                     break;
    case LED_RGB_R : port_pin(2,0, disable, low);
                     break;
    case LED_RGB_G : port_pin(2,1, disable, low);
                     break;
    case LED_RGB_B : port_pin(2,2, disable, low);
                     break;
  }
}
void wr_com16(uint8_t hexa1,uint8_t hexa2)
{

	port_pin(4,9, disable, low);//cs=0
	port_pin(4,10, disable, high);//dc=1
	xf_setup.length = sizeof(hexa1);
	xf_setup.rx_data = Rx_Buf;
	xf_setup.rx_cnt = xf_setup.tx_cnt = 0;
	xf_setup.tx_data = hexa1;
	Chip_SSP_RWFrames_Blocking(LPC_SSP, &xf_setup);

	port_pin(4,9, disable, high);//cs=0
    port_pin(4,9, disable, low);//cs=1
	port_pin(4,10, disable, high);//dc=1

	xf_setup.length = sizeof(hexa2);
    xf_setup.rx_data = Rx_Buf;
	xf_setup.rx_cnt = xf_setup.tx_cnt = 0;
	xf_setup.tx_data= hexa2;
	Chip_SSP_RWFrames_Blocking(LPC_SSP, &xf_setup);
    port_pin(4,9, disable, high);//cs=1
}
int main(void)
{
// NOTA: El siguiente código se programó sin la capa de abstracción: leds.c y
	//	pulsadores.c para mostrar un ejemplo de la forma de acceso a un pin de un
	//	puerto con la función puerto_pin(...);


	port_pin(2,0, MD_PUP,init_out);
	port_pin(2,1, MD_PUP,init_out);
	port_pin(2,2, MD_PUP,init_out);
	port_pin(2,10,MD_PUP,init_out);
	port_pin(2,11,MD_PUP,init_out);
	port_pin(2,12,MD_PUP,init_out);

	port_pin(2,0, disable, low);
	port_pin(2,1, disable, low);
	port_pin(2,2, disable, low);
	port_pin(2,10,disable, low);
	port_pin(2,11,disable, low);
	port_pin(2,12,disable, low);

	port_pin(1,0, MD_PUP|MD_EZI|MD_ZI,init_in);
	port_pin(1,1, MD_PUP|MD_EZI|MD_ZI,init_in);
	port_pin(1,2, MD_PUP|MD_EZI|MD_ZI,init_in);
	port_pin(1,6, MD_PUP|MD_EZI|MD_ZI,init_in);

	while(1){
		if(!port_pin(1,0,disable,state_in))
		{ port_pin(2,0, disable, high);
		  port_pin(2,1, disable, high);
		  port_pin(2,2, disable, high);
	    }
		else{port_pin(2,0, disable, low);
			 port_pin(2,1, disable, low);
			 port_pin(2,2, disable, low);
		    }
	    if(!port_pin(1,1,disable,state_in))
		{
			port_pin(2,10, disable, high);
		}
	    else{port_pin(2,10, disable, low);
				            }
		if(!port_pin(1,2,disable,state_in))
		{
			port_pin(2,11, disable, high);
		}
		else{port_pin(2,11, disable, low);
				            }
		if(!port_pin(1,6,disable,state_in))
		{
		  port_pin(2,12, disable, high);
		}
		else{
		  port_pin(2,12, disable, low);
		    }
	}

    return 0;
}
Пример #27
0
void Spindle::on_module_loaded()
{
    last_time = 0;
    last_edge = 0;
    current_rpm = 0;
    current_I_value = 0;
    current_pwm_value = 0;
    time_since_update = 0;
    spindle_on = true;

    if (!THEKERNEL->config->value(spindle_enable_checksum)->by_default(false)->as_bool()) {
        delete this; // Spindle control module is disabled
        return;
    }

    pulses_per_rev = THEKERNEL->config->value(spindle_pulses_per_rev_checksum)->by_default(1.0f)->as_number();
    target_rpm = THEKERNEL->config->value(spindle_default_rpm_checksum)->by_default(5000.0f)->as_number();
    control_P_term = THEKERNEL->config->value(spindle_control_P_checksum)->by_default(0.0001f)->as_number();
    control_I_term = THEKERNEL->config->value(spindle_control_I_checksum)->by_default(0.0001f)->as_number();
    control_D_term = THEKERNEL->config->value(spindle_control_D_checksum)->by_default(0.0001f)->as_number();

    // Smoothing value is low pass filter time constant in seconds.
    float smoothing_time = THEKERNEL->config->value(spindle_control_smoothing_checksum)->by_default(0.1f)->as_number();
    if (smoothing_time * UPDATE_FREQ < 1.0f)
        smoothing_decay = 1.0f;
    else
        smoothing_decay = 1.0f / (UPDATE_FREQ * smoothing_time);

    // Get the pin for hardware pwm
    {
        Pin *smoothie_pin = new Pin();
        smoothie_pin->from_string(THEKERNEL->config->value(spindle_pwm_pin_checksum)->by_default("nc")->as_string());
        spindle_pin = smoothie_pin->as_output()->hardware_pwm();
        output_inverted = smoothie_pin->is_inverting();
        delete smoothie_pin;
    }

    if (spindle_pin == NULL) {
        THEKERNEL->streams->printf("Error: Spindle PWM pin must be P2.0-2.5 or other PWM pin\n");
        delete this;
        return;
    }

    int period = THEKERNEL->config->value(spindle_pwm_period_checksum)->by_default(1000)->as_int();
    spindle_pin->period_us(period);
    spindle_pin->write(output_inverted ? 1 : 0);

    // Get the pin for interrupt
    {
        Pin *smoothie_pin = new Pin();
        smoothie_pin->from_string(THEKERNEL->config->value(spindle_feedback_pin_checksum)->by_default("nc")->as_string());
        smoothie_pin->as_input();
        if (smoothie_pin->port_number == 0 || smoothie_pin->port_number == 2) {
            PinName pinname = port_pin((PortName)smoothie_pin->port_number, smoothie_pin->pin);
            feedback_pin = new mbed::InterruptIn(pinname);
            feedback_pin->rise(this, &Spindle::on_pin_rise);
            NVIC_SetPriority(EINT3_IRQn, 16);
        } else {
            THEKERNEL->streams->printf("Error: Spindle feedback pin has to be on P0 or P2.\n");
            delete this;
            return;
        }
        delete smoothie_pin;
    }

    THEKERNEL->slow_ticker->attach(UPDATE_FREQ, this, &Spindle::on_update_speed);
    register_for_event(ON_GCODE_RECEIVED);
}
Пример #28
0
void leds_init(void){

	/*inicializo leds*/
	port_pin(2,0, MD_PUP,init_out);
	port_pin(2,1, MD_PUP,init_out);
	port_pin(2,2, MD_PUP,init_out);
	port_pin(2,10,MD_PUP,init_out);
	port_pin(2,11,MD_PUP,init_out);
	port_pin(2,12,MD_PUP,init_out);
	/*los apago*/
	port_pin(2,0, disable, low);
	port_pin(2,1, disable, low);
	port_pin(2,2, disable, low);
	port_pin(2,10,disable, low);
	port_pin(2,11,disable, low);
	port_pin(2,12,disable, low);
}
  main()
{
leds_init();

	// delay(500);

	 port_pin(4,10, SCU_MODE_INACT ,init_out);
    port_pin(4,9, SCU_MODE_INACT ,init_out);
    port_pin(0,0, SCU_MODE_INACT ,init_out);
//////////////////////////////////////////////////////////////////////////////////////////////////////
  //  Board_SSP_Init();

    //Chip_SSP_Init(LPC_SSP);

   // ssp_format.frameFormat = SSP_FRAMEFORMAT_SPI;
    //ssp_format.bits = SSP_DATA_BITS;
    //ssp_format.clockMode = SSP_CLOCK_CPHA0_CPOL0  ;
   // Chip_SSP_SetFormat(LPC_SSP,ssp_format.frameFormat, ssp_format.bits,  ssp_format.clockMode);
   // Chip_SSP_SetMaster(LPC_SSP, SSP_MODE_TEST);
   // Chip_SSP_Enable(LPC_SSP);
   // Buffer_Init();


//////////////////////////////////////////////////////////////////////////////////////////////////////


    Board_SSP_Init();


	Board_SSP_config(SSP_DATA_BITS,SSP_CLOCK_CPHA0_CPOL0 ,800000 );


    HD_reset ();
    Delay_ms (50) ;// delay 50ms
    lcd_initial_adafruitIIL9341();//lcd_initial();//////////Initial_ILI9340C();
    Delay_ms (300);
    // Test to enter / exit sleep



    //LCD_Sleep_ILI9340C ();
    //Delay_ms (300);
    //LCD_ExitSleep_ILI9340C ();
    //Display a black screen
    LCD_TEST_SingleColor (0xFF,0xE0);
    led_on(LED1);
    delay(50);

        dsp_single_colour(0xF8,0x1F);//rosa
        led_on(LED2);
        delay(50);

    while(1)
  {

   // Disp_gradscal(); //»Ò½×
    delay(5);
   LCD_Sleep_ILI9340C();
delay(500);
	LCD_ExitSleep_ILI9340C();
//# define Red 0xf800
		//LCD_TEST_SingleColor (Red);
		write_command(0x2C);



   dsp_single_colour(0x07,0xE0);//verde
   delay(50);


   dsp_single_colour(0xF8,0x00);//rojo
    delay(50);

    dsp_single_colour(0x07,0xE0);//verde


    dsp_single_colour(0x00,0x1F);//azul
   delay(50);


    }


  }