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
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7