
|  | roboforum.ruТехнический форум по робототехнике. |  | 


 Ты-то научился отслеживать проект, но ты ж хотел популяризации, а я как читатель со стажем ответственно тебе заявляю, что в твоих дефайнах я не одну шею сломал
 Ты-то научился отслеживать проект, но ты ж хотел популяризации, а я как читатель со стажем ответственно тебе заявляю, что в твоих дефайнах я не одну шею сломал

dccharacter писал(а):А ты, дим, учись пользоваться гитом, тогда сборка-разборка программ не будет проблемой

dccharacter писал(а):Ты бы видел, как я на pins.h залезал в прошлых релизах, что твой мышь на кактус


Dmitry__ писал(а):Твоя щенячья радость просто умиляет.
Марлин - полный ацтой как программа, я ее могу в 3 раза, в ТРИ раза, Карл! укоротить, без изменения функционала...

// Returns limit state as a bit-wise uint8 variable. Each bit indicates an axis limit, where 
// triggered is 1 and not triggered is 0. Invert mask is applied. Axes are defined by their
// number in bit position, i.e. Z_AXIS is (1<<2) or bit 2, and Y_AXIS is (1<<1) or bit 1.
uint8_t limits_get_state()
{
  uint8_t limit_state = 0;
  uint8_t pin = (LIMIT_PIN & LIMIT_MASK);
  if (bit_isfalse(settings.flags,BITFLAG_INVERT_LIMIT_PINS)) { pin ^= LIMIT_MASK; }
  if (pin) {  
   uint8_t idx;
   for (idx=0; idx<N_AXIS; idx++) {
     if (pin & get_limit_pin_mask(idx)) { limit_state |= (1 << idx); }
   }
  }
  return(limit_state);
}





uint8_t limits_get_state()
{
  uint8_t limit_state = 0;
#if N_AXIS >0
  if(LIMIT_PIN & (1<<X_LIMIT_BIT)) limit_state |=1;
#endif
#if N_AXIS >1
  if(LIMIT_PIN & (1<<Y_LIMIT_BIT)) limit_state |=2;
#endif
#if N_AXIS >2
  if(LIMIT_PIN & (1<<Z_LIMIT_BIT)) limit_state |=4;
#endif
#if N_AXIS >3
  #error "Ты ку-ку? Определись сколько у тебя осей чайнег!
#endif
  return(limit_state);
}


// Returns limit pin mask according to Grbl internal axis indexing.
uint8_t get_limit_pin_mask(uint8_t axis_idx)
{
  if ( axis_idx == X_AXIS ) { return((1<<X_LIMIT_BIT)); }
  if ( axis_idx == Y_AXIS ) { return((1<<Y_LIMIT_BIT)); }
  return((1<<Z_LIMIT_BIT));
}
 
   
   
   
   
   
   
   
   
  

1<<X_LIMIT_BIT

elmot писал(а):нормальный компилятор превратит это в константу.

// Define homing/hard limit switch input pins and limit interrupt vectors. 
// NOTE: All limit bit pins must be on the same port, but not on a port with other input pins (CONTROL).
#define LIMIT_DDR        DDRB
#define LIMIT_PIN        PINB
#define LIMIT_PORT       PORTB
#define X_LIMIT_BIT      1  // Uno Digital Pin 9
#define Y_LIMIT_BIT      2  // Uno Digital Pin 10
#ifdef VARIABLE_SPINDLE // Z Limit pin and spindle enabled swapped to access hardware PWM on Pin 11.  
  #define Z_LIMIT_BIT      4 // Uno Digital Pin 12
#else
  #define Z_LIMIT_BIT    3  // Uno Digital Pin 11
#endif
#define LIMIT_MASK       ((1<<X_LIMIT_BIT)|(1<<Y_LIMIT_BIT)|(1<<Z_LIMIT_BIT)) // All limit bits
#define LIMIT_INT        PCIE0  // Pin change interrupt enable pin
#define LIMIT_INT_vect   PCINT0_vect 
#define LIMIT_PCMSK      PCMSK0 // Pin change interrupt register

Dmitry__ писал(а):попробуй вытащить алгоритм:
Судя по твоим последним фоткам, я так понял, тебе больше приглянулись мелкие дуины? Типа спарка?
Я пзс также мечтал в печатный корпус заделатьЕще мечтал об проводочках от пзс в печатных каналах прокладывать
Тогда можно перейти на тиньку в дип корпусе и будет совсем удобно и без текстолита...


~/Documents/Arduino/hardware/digistamp/1.6.5/cores/tiny/core_build_options.h
#define FAVOR_PHASE_CORRECT_PWM                   0
~/Documents/Arduino/hardware/digistamp/1.6.5/cores/tiny/wiring.c
#define MS_TIMER_TICK_EVERY_X_CYCLES  1
~/Documents/Arduino/hardware/digistamp/1.6.5/cores/tiny/core_timers.h
в ветке #if defined( __AVR_ATtinyX5__ )
закомментировать
//#define TIMER0_SUPPORTS_PHASE_CORRECT_PWM  (1)
//PB0(MOSI) 5 pin
#if defined(laser_power_via_mcu)
  #define pin_laser_gnd_bit   0
  #define pin_laser_gnd_DDR   DDRB
  #define pin_laser_gnd_PORT  PORTB
#endif //laser_power_via_mcu
void RefrPowerLaser(uint8_t power)
{
  if(power < ConstMax && RegPowLaser < 255)
  {
    RegPowLaser++;
    analogWrite(pin_laser_gnd_bit, (255-RegPowLaser));
  }
  else if(power > ConstMax && RegPowLaser > 0)
  {
    RegPowLaser--;
    analogWrite(pin_laser_gnd_bit, (255-RegPowLaser));
  }
}
  #ifdef pin_laser_gnd_bit
    #define pin_laser_gnd_OUTPUT   pin_laser_gnd_DDR     |= (1<<pin_laser_gnd_bit)
    #define pin_laser_gnd_LOW      pin_laser_gnd_PORT    &=~(1<<pin_laser_gnd_bit)
  #endif
    #if defined(pin_laser_gnd_bit)
      pin_laser_gnd_OUTPUT;
      pin_laser_gnd_LOW;
    #endif

#define DDR_SET_OUTPUT(DDR,PIN)   DDR |= (1<<PIN)
#define PIN_SET_LOW(PORT,PIN)   PORT &= ~(1<<PIN)
#define PIN_SET_HIGH(PORT,PIN)   PORT |= (1<<PIN)
#define PIN_TOGGLE(PORT,PIN)   PORT ^= (1<<PIN)
#define LASER_PIN   0
#define LASER_DDR   DDRB
#define LASER_PORT  PORTB
в коде ...
DDR_SET_OUTPUT(LASER_DDR,LASER_PIN);
PIN_SET_LOW(LASER_PORT,LASER_PIN);
#define LASER_PIN   0
#define LASER_DDR   DDRB
#define LASER_PORT  PORTB
#define GET_DDR(x) x ## _DDR
#define GET_PORT(x) x ## _PORT
#define GET_PIN(x)  x ## _PIN
#define PIN_OUTPUT(PIN)   GET_DDR(PIN) |= (1<<GET_PIN(PIN))
#define PIN_LOW(PIN)   GET_PORT(PIN) &= ~(1<<GET_PIN(PIN))
#define PIN_HIGH(PIN)   GET_PORT(PIN) |= (1<<GET_PIN(PIN))
#define PIN_TOGGLE(PIN)   GET_PORT(PIN) ^= (1<<GET_PIN(PIN))
в коде ...
PIN_OUTPUT(LASER);
PIN_LOW(LASER);

linvinus писал(а):А как вам такой вариант на definaх?

setar писал(а):Дима, скинь кусок кода инициализации FAST PWM для digispark


Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0