roboforum.ru

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


Датчик касания оптический, триангуляция

Обсуждение технологии печати на 3D принтерах. Самостоятельное изготовление и приобретение. RepRap и его последователи.

Re: Датчик касания оптический, триангуляция

Сообщение Dmitry__ » 02 фев 2016, 18:59

Собрать, в моем понимании - написать нормально работающую программу. Такшта гиты идут лесом. Все остальное - отслеживание проекта, как-нибудь за 25 лет программирования я научился, без всяких гитов. А гит нужен для совместного ведения проекта. Что в этом датчике не требуется, ибо собрались программеры с совершенно разными стилями и не удосужились даже согласовать правила. И каждый считает, что он единственный ариец. :wink:
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Датчик касания оптический, триангуляция

Сообщение dccharacter » 02 фев 2016, 19:04

Ну если учесть что я не писатель, а читатель, то... :-) Ты-то научился отслеживать проект, но ты ж хотел популяризации, а я как читатель со стажем ответственно тебе заявляю, что в твоих дефайнах я не одну шею сломал
Вот и марлин, кстати, осознали это
В новом релиз кандидате растащили дефайны пинов по бордовым файлам. ВЧЕРА ПИНЫ ЗА 2 МИНУТЫ ПЕРЕОПРЕДЕЛИЛ.
Ты бы видел, как я на pins.h залезал в прошлых релизах, что твой мышь на кактус
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Датчик касания оптический, триангуляция

Сообщение Dmitry__ » 02 фев 2016, 19:09

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


Теперь, со знанием того, что собрать - это не вернуться к старому, а написать новое. :wink:

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

Твоя щенячья радость просто умиляет. :)
Марлин - полный ацтой как программа, я ее могу в 3 раза, в ТРИ раза, Карл! укоротить, без изменения функционала...
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Датчик касания оптический, триангуляция

Сообщение dccharacter » 02 фев 2016, 19:10

Почему? Хороший проект, махонький, удобный, почти сам конфигурячится. Че ты на него взъелся? Меня лично вообще не тревожит, есть ли там какой-то быдлокодинг на этом этапе или нет. Меня тревожит, что датчик не работает.
Надо метрики определить - невозможно оценивать точность этого датчика в отрыве от, например, скорости подачи.

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

И этот человек запрещает нам ковыряться в мэйкфайлах!
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Датчик касания оптический, триангуляция

Сообщение Dmitry__ » 02 фев 2016, 19:18

Я тебе не буду показывать примеры быдлокода марлина, ибо это проще выкинуть, а вот пример grbl (угадай откуда пошел марлин?) тебе покажу:
Код: Выделить всёРазвернуть
// 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);
}


Ты можешь себе представить компиляцию кода с индексацией команд чтения порта, в контроллере который этого не умеет? Посмотри листинг этого кода :)
Да, этот код должен быть таки быстрым...
А знаешь что в этом примере написано? 3 асмовские команды чтения пинов :)
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Датчик касания оптический, триангуляция

Сообщение dccharacter » 02 фев 2016, 19:28

Я честно пытался понять, что там написано, трижды
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Датчик касания оптический, триангуляция

Сообщение Dmitry__ » 02 фев 2016, 19:58

Примерно это :)
Код: Выделить всёРазвернуть
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);
}

Почувствуй разницу, читатель кода марлин :)

Добавлено спустя 1 минуту 42 секунды:
Листинги того и этого давать? :D

Добавлено спустя 5 минут 49 секунд:
А, забыл, знаешь что в get_limit_pin_mask(idx) ???

Код: Выделить всёРазвернуть
// 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));
}


:D :D :D :D :D :D :D :D :D :D
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Датчик касания оптический, триангуляция

Сообщение elmot » 02 фев 2016, 20:31

1<<X_LIMIT_BIT

нормальный компилятор превратит это в константу.
Аватара пользователя
elmot
 
Сообщения: 5691
Зарегистрирован: 10 ноя 2011, 12:02
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья

Re: Датчик касания оптический, триангуляция

Сообщение Dmitry__ » 02 фев 2016, 21:08

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__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Датчик касания оптический, триангуляция

Сообщение setar » 02 фев 2016, 21:43

Dmitry__ писал(а):попробуй вытащить алгоритм:

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

да, десяток для тестов заказал на али, только тех что с microusb разъёмом.
Я пзс также мечтал в печатный корпус заделать :) Еще мечтал об проводочках от пзс в печатных каналах прокладывать :) Тогда можно перейти на тиньку в дип корпусе и будет совсем удобно и без текстолита...

прямо мои мысли читаешь !

Добавлено спустя 7 минут 45 секунд:
кстати в прошивке марлин автоуровень работает неверно, во всех режимах (ошибка не значительна и заметна только на наших датчиках, накапливается от нуля до величины нелинейности стола в конце координат)

я приступил к работе над исправлением кода автоуровня, одновременно с компенсацией кривизны.
начал с алгоритмов, для чего я связался к коллегами математиками, изложил им задачу и получил рекомендации,
сейчас их перевариваю.
Если кто то чувствует желание и силы красиво покодить внутри марлина, я перешлю переписку с рекомендациями.
P.S. а есть умение работать с гит или нет - это не важно, сути не меняет, это лишь инструмент.
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

Re: Датчик касания оптический, триангуляция

Сообщение dccharacter » 03 фев 2016, 00:19

Так вот ПЗС в корпусе, или я че-т не то понимаю?
post343692.html?hilit=%D0%BA%D0%BE%D1%80%D0%BF%D1%83%D1%81#p343692
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Датчик касания оптический, триангуляция

Сообщение setar » 03 фев 2016, 02:06

я думаю о впечатывании электроники внутрь изделия

Добавлено спустя 1 час 42 минуты 43 секунды:
Дима, скинь кусок кода инициализации FAST PWM для digispark
сейчас так:

Код: Выделить всёРазвернуть
~/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


подозреваю что ему про PWM на этой ноге сказать нужно ?
сейчас горит но не регулируется
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

Re: Датчик касания оптический, триангуляция

Сообщение linvinus » 03 фев 2016, 12:07

А как вам такой вариант на definaх?
Код: Выделить всёРазвернуть
#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);

Си код будет такими же, но читаемость луче.

можно и так, но вроде работает только в GCC.

Код: Выделить всёРазвернуть
#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);


Добавлено спустя 19 минут 6 секунд:
Ещё вариант,медленнее чем на чистых дефайнах но больше похоже на код ардуино
http://www.codeproject.com/Articles/732 ... or-Arduino
использует небольшой массив чтобы ассоциировать pin с портом.

Добавлено спустя 1 час 34 минуты 31 секунду:
Вру, ## описан в K&R, так что это стандарт, можно использовать не боясь
есть в М$ https://msdn.microsoft.com/ru-ru/library/09dwwt6y.aspx
R3 forum87/topic15337.html
R2 roboforum.ru/forum102/topic13980.html
R4 roboforum.ru/post336339.html#p336339
Делать надо хорошо - плохо получится само!
Аватара пользователя
linvinus
 
Сообщения: 1672
Зарегистрирован: 29 апр 2011, 12:37
Откуда: Москва
прог. языки: С

Re: Датчик касания оптический, триангуляция

Сообщение Dmitry__ » 03 фев 2016, 20:27

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

Замечательный вариант, и на ## хорошо, я кста, хотел так делать, ну когда б на пенсию вышел с этим датчиком :)
Осталось устаканить форматы всего этого безобразия, чтоб ну всем нравилось, и внести в код...

Добавлено спустя 1 час 17 минут 42 секунды:
setar писал(а):Дима, скинь кусок кода инициализации FAST PWM для digispark

Залил последнюю версию. С регулировкой мощности лазера. Было очень давно, как работает - хз. Другие ветки не отслеживал, в последних улучшениях не в курсе.
https://github.com/DmitLil/RF3Sens
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Датчик касания оптический, триангуляция

Сообщение setar » 03 фев 2016, 20:28

супер, сейчас запилю
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

Пред.След.

Вернуться в 3D печать

Кто сейчас на конференции

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