0
И я за него, правда подванивает то же неплохо. Если платка небольшая и не сильно загрязнена(у меня такое редкость), то просто беру кисточку и изопропил, платка блестит. Еще я давно юзаю Solins-US + деионизованная вода, если нужно мыть в УЗ ванне. Моет круто, не воняет и ко всему 50мл на 1 литр бадяжить можно. А это экономия.
  • avatar
  • Jman
  • 24 августа 2017, 09:47
0
Productivity power tools,
Color Output
Custom document well
CLangFormat
Editor Guidelines
Matchmargin

Была еще тулза, для 2015, для определения «сложности читания и поддержки» написанного кода. На 2017 еще не портирована.

А так, да для С++ есть Resharper, который значительно уступает шарповому решарперу (сорян за тавтологию).
Ну и конечно да, разработка ардуино для студии Arduino micro.
0
Пособие хорошее. В основном уделено внимание расчётам силовых цепей.
Но, увы, совсем без внимания остался вопрос устойчивости преобразователей с включённым контуром обратной связи.

Для меня самой лучшей книгой по силовой электронике является англоязычная книга Роберта Эриксона и Драгана Максимовича «Основы силовой электроники» («Fundamentals of Power Electronics»). Достаточно посмотреть её всего лишь один раз и вы поймёте её настоящую ценность. Там рассмотрены найболее полно все стороны транзисторной силовой электроники. Советую почитать.
  • avatar
  • sw1972
  • 13 декабря 2016, 21:51
0
Переделывал свою станцию Lukey702 под Hakko из-за лучшей динамики нагрева. В начале делал примерно то же что и автор статьи. Но из-за того что терморезистор включен в балансный мост у которого характеристика в отличии от термопары не линейная, а S-образная, то температуру можно точно выставить только в одной точке (например при 290С ). Если вы изменяете температуру, то чем дальше вы от той на которой калибровали тем сильней расхождение (у меня выезжало больше чем на 50С, что неприемлемо). Кстати, терморезистор не 47Ом, а 50 при 0 градусов. По документации в нагреватель встроен Pt50. Было три промежуточных конструкции со своими недостатками, в итоге родилась такая.




Терморезистор питается стабильным током от генератора тока, характеристика стала линейной, точность установки температуры в пределах 2-х градусов на всём диапазоне. Калибровал внешним датчиком прямо в капле припоя на жале. VR1 — установка нуля, VR2 — усиление, на операционниках собран дифференциальный усилитель с установкой рабочей точки. На основную платы впаял разъём PBS-9, а эта просто вставляется в основную.
Паять стало в удовольствие.
+3
Умели же раньше рисовать обложки. Двое разнополых пионеров, крепко сжимая бёдрами недвусмысленный фаллический символ, взлетают с электронной схемы в клубах дыма. Девочка прощальным взором провожает бесплодную пустыню схемы электрической принципиальной, где только бренные останки выводных деталей с куцыми ножками напоминают о былом величии, пока не случилось КЗ по питанию. По экзистенциальности этот рисунок может конкурировать разве что с Linux Administration Handbook с глазастым факом на обложке.
0
Полный набор кажется 80 баксов, но я покупал не полный набор, так как часть деталей у меня уже была. Зовут паренька Сергей. На текущий момент он продает платы и некоторую комплектацию на следующие конструкции:

ESR-C radiokot.ru/forum/viewtopic.php?f=51&t=76620

RLC-2 radiokot.ru/forum/viewtopic.php?f=51&t=98762

PSL-2402 radiokot.ru/forum/viewtopic.php?f=51&t=113321

PSL-3604 radiokot.ru/forum/viewtopic.php?f=55&t=90027

DFS-90 и DSS-90 radiokot.ru/forum/viewtopic.php?f=55&t=111424

NWT-7 radiokot.ru/forum/viewtopic.php?f=51&t=112084
  • avatar
  • ZiB
  • 27 марта 2016, 18:33
0
Я последние разы пользовался L300, но сразу залил туда пигмент InkTec E0013-100MB. Как и с любым другим принтером пришлось повозиться с настройками печати, что бы не переборщить с чернилами, но итоговые шаблоны практически не пропускают УФ и легко допускают переэкспозицию раз в 5-7 (скажем, от нормальных 30 сек и до нескольких минут) при работе с фоторезистом. Они так же отлично годятся для работы с любой маской.
  • avatar
  • evsi
  • 04 марта 2016, 14:51
+2
Человек первый раз пишет программу на С. И у него это неплохо получается (если бы он не спросил «А в чём невнятность моих переменных?» — я бы вообще не делал акцент на читабельности). На данном этапе (ИМХО) у него и так все неплохо получается.
пусть лучше вначале прочитает

пусть лучше прочитает Боба Мартина «Чистый код», но не сейчас, а когда сам придет к необходимости «красивого» кода.
  • avatar
  • e_mc2
  • 16 февраля 2016, 23:51
+2
А тут есть калькуляторы не только для PFC, но и для другит типов импульсных источников питания. Для каждого из типов ещё и теория расписана. Например, вот теория для того же PFC.
  • avatar
  • arhiv_6
  • 16 декабря 2015, 21:48
+2
Я тоже использую подобные делегаты. Несколько рекомендаций:
1. Делегат инициализированный по умолчанию нельзя вызавать — будет доступ по нулевому указателю. Лучше по умолчанию инициализировать делегат пустой функцией, тогда и необходимость проверки отпадет.
2. Нет способа проверить, что делегат пустой и его нельзя вызывать.
3. Вызов функции члена класса по указателю не очень эффективен, порядка 15-30 тактов если без параметров.
4. Чтобы вызвать такой делегат из старого Си-шного кода (а иногда такое надо), придется вручную делать фукнцию обертку.

Есть способ лучше:
#include <iostream>
template<class Result>
class Delegate
{
public:
	typedef Result (*InvokeT)(void *);		// указатель на функцию (Invoke())
	static  Result VoidFunc() { return Result(); }
private:
	void *_object;
	InvokeT _callback;
	template<class ObjectT, Result (ObjectT::* Func)()>
	static Result InvokeObj(void *object){
		return (static_cast<ObjectT*>(object)->* Func)();
	}
	template<Result (* Func)()>
	static Result InvokeFunc(void *){
		return Func();
	}
	Delegate(void *obj, InvokeT func)
		: _object(obj), _callback(func) { }
public:

	Delegate()
		: _object(0), _callback(&InvokeFunc<VoidFunc>)	{ }
	// вызывает конструктор, 
	// для каждой функции класса создаёт свой Invoke (т.к. специализация шаблона!)
	// и передаёт указатель на Invoke как второй параметр ctor"а.
	template<class ObjectT, Result (ObjectT::* Func)()> static Delegate Make(ObjectT * object){
		return Delegate(object, &InvokeObj<ObjectT, Func>);
	}
	template<Result (* Func)()> static Delegate MakeFree(){
		return Delegate(0, &InvokeFunc<Func>);
	}
	// вызов Invoke и передача ему объекта для которого он был создан
	inline Result operator()()const{
		return _callback(_object);
	}
	InvokeT ToCFunction()const{
		return _callback;
	}
	void* Object()const{
		return _object;
	}
};

class Foo
{
public:
	bool Bar(){ std::cout << "Hello" << std::endl; return true;}
};

int main()
{
	Foo foo;
	Delegate<bool> d;
	d();
	d = Delegate<bool>::Make<Foo, &Foo::Bar>(&foo);
	d();
	return 0;
}
  • avatar
  • neiver
  • 09 декабря 2015, 19:17
0
  • avatar
  • skelet
  • 24 ноября 2015, 21:37
0
С нержавейкой да будет вам известно коллега, все до гениального просто! Есть такая штука, называется олеиновая кислота. Вещь незаменимая в качестве СОЖ для обработки нержавейки, оцинкованной стали, нормализованной и улучшенной стали. Говорят еще можно смесью говяжьего и свиного жира. Но я не пробовал. Олеинкой вполне прилично, вместо канифоли можно паять медь. Результат гораздо лучше. А вот для мехобработки меди не подходит. Сверлил давно медь тонкими сверлами, диам. 1мм. Перепробовал все что было под рукой. Лучше всего подошло обычное хозяйственное мыло. Для алюминия вполне годится обычное машинное масло, или тормозная жидкость.
+2
О маркировке мощных пальчиковых аккумуляторов li-ion, например IMR18650, ICR14500, NCR18650. Первые три буквы указывают на базовую конструкцию аккумулятора и его возможности.
  1. Первая буква указывает на осовной химический состав аккумулятора. I означает, что класс батареи — литий-ионная.
  2. Вторая, и наиболее важная буква указывает на материал, из которого изготовлена ячейка.
    • С — кобальт;

    • М — марганец;
    • N — никель;
    • F — железо (ferrum);
    Последняя буква R указывает что батарея перезаряжаемая (rechargeable).
  3. Panasonic проигнорировал тип (мол и так все знают) и гордо сообщил, что у него аккумуляторы никель-кобальтовые. Возможно и правильно. Они относят их к гибридным, используют катод из кобальта, как и ICR аккумуляторы, но они имеют покрытие их того же марганца и никеля как в IMR аккумуляторах.Последующая серия цифр показывает физический размер и конструктивные особенности аккумулятора.
    • две первых цифры -> диаметр в мм;
    • две следующие -> длина в мм;
    • ноль в конце -> цилиндрическая форма;
  • avatar
  • anakost
  • 01 ноября 2015, 17:49
+1
Чтобы не страдать ерундой с таблицами, а потом с приближением, существует формула расчета.
T:=Tn/((Ln(Rt/Rn)*Tn)/B+1)-273.15;
где, T — искомая температура в градусах,
Tn — начальная температура в К, обычно 262,15К (25С)
Ln — натуральный логарифм,
Rt — текущее сопротивление термистора,
Rn — сопротивление термистора при начальной температуре
B — коэффициент из даташита термистора.
Rt может вычисляться по формуле, если стоит в паре с резистором:
Rt:=Ku*R/(1-Ku)

где KU — отношение значения ADC к его разрядности,
R — сопротивление резистора.

Уже приводил кусок программы на паскале, который вычисляет таблицу по всем этим параметрам без танцев с бубном Здесь
  • avatar
  • Mihail
  • 11 августа 2015, 09:40
0
обработка энкодера без таймера и прерываний, с гистерезисом поворота, антидребезгом, и генерацией событий по повороту/нажатию. для нормальной работы хватает частоты опроса 100 Гц.

хедер:
// A/B/button bits
enum { ENC_A=1, ENC_B=2, ENC_AB=3, ENC_C=4 };

// events
enum { ENC_NONE, ENC_FORW, ENC_BACK, ENC_BUTT };

// AB counter reset threshold
#ifndef ENC_AB_RES
	#define ENC_AB_RES 300
#endif

// short press counter
#ifndef ENC_BUTT_SHORT
	#define ENC_BUTT_SHORT 80
#endif

// long press counter
#ifndef ENC_BUTT_LONG
	#define ENC_BUTT_LONG 2000
#endif

struct enc_struct {
	u8  en;                  // disable / enable

	// A/B input
	u8  prev, cur;           // previous/current state
	u8  inv, event;          // =1 direction inversion, current event
	s8  acc, threshold, dec; // step accumulator, threshold, decrement
	u16 cnt;                 // current state counter

	// button input
	struct {
		u8  prev, cur;       // previous/current state
		u16 cnt;             // current state counter
	} butt;
};

u8 enc_update( struct enc_struct *enc, u8 next );


код:
#include "enc.h"

// forward/backward next states
const u8 enc_forw[] = { 0b01, 0b11, 0b00, 0b10 };
const u8 enc_back[] = { 0b10, 0b00, 0b11, 0b01 };

u8 enc_update( struct enc_struct *enc, u8 next ){
	enc->event = ENC_NONE;      // reset event

	// update AB state
	enc->prev  = enc->cur;      // update previous AB state
	enc->cur   = next & ENC_AB; // get current AB state
	if (enc->cur != enc->prev){ // changed ?
		enc->cnt = 0;
		// forward direction
		if (enc->cur == enc_forw[enc->prev]){
			if (enc->inv) enc->acc--; else enc->acc++;
		}
		// backward direction
		else if (enc->cur == enc_back[enc->prev]){
			if (enc->inv) enc->acc++; else enc->acc--;
		}
		// wrong sequence - reset accumulator
		else enc->acc = 0;

		// forward step
		if (enc->acc >= enc->threshold){
			enc->acc -= enc->dec;
			enc->event = ENC_FORW;
		}
		// backward step
		else if (enc->acc <= -enc->threshold){
			enc->acc += enc->dec;
			enc->event = ENC_BACK;
		}
	} else {
		// no change - increment counter
		if (enc->cnt != 0xFFFF) enc->cnt++;
		// reset accumulator
		if (enc->cnt == ENC_AB_RES) enc->acc = 0;
	}

	// update button state
	enc->butt.prev = enc->butt.cur;
	enc->butt.cur  = !(next & ENC_C);
	// button state change - reset counter
	if (enc->butt.cur != enc->butt.prev){
		enc->butt.cnt = 0;
	} else { // not changed - increment counter
		if (enc->butt.cnt != 0xFFFF) enc->butt.cnt++;
		// gnenerate button press event
		if ((enc->event == ENC_NONE) && enc->butt.cur && ((enc->butt.cnt == ENC_BUTT_SHORT)||(enc->butt.cnt == ENC_BUTT_LONG)))
			enc->event = ENC_BUTT;
	}

	return enc->event;
}
  • avatar
  • reptile
  • 10 августа 2015, 23:59
+3
И еще вопрос — где водится МДФ

По моему опыту – для данных целей (если вам нужны небольшие детали, обрезки) проще всего найти ближайшую фирму по запросу «порезка и раскрой мдф и дсп».

Потом туда позвонить. Скорее всего вам ответит девушка-секретарь, в духе «мы занимаемся распилами от N-погонных метров». Попросите девушку дать вам прямотой контакт «оператора станка». Если «девушка» не дает прямой контакт – скажите, что у вас «сложный рез», и вам обязательно нужно проконсультироваться касательно «резки плит на 3 Непера на глубину в 5 Фарад недалеко от точки Кюри»…

Получив прямой контакт оператора – с ним можно очень легко договорится о покупке обрезков за символическую плату (плюс, он могут сильно помочь с обработкой).
  • avatar
  • e_mc2
  • 24 июля 2015, 23:19
0
Да и, к адекватным жалам я отношу:
STTC-046
STTC-047
STTC-017

Как дополнение(на любителя) еще можно взять:
STTC-099
STTC-025

SMTC — тоже есть пара нормальных, но они очень специфичны, и цена ровно в 2 раза выше.
  • avatar
  • shodan
  • 24 июля 2015, 17:38
0
Но я повторюсь, здесь просто надо четко знать что покупать.
Там есть нормальные жала(да их немного совсем, 5 моделек самых адекватных), и паяльник нормальный нужен MX-H1.
Ну а термопинцет просто рекомендую не брать… вообще, никогда, низачто!

За свой старый лукей не сажусь уже даже (ну только когда фен нужен).

Так-что просто надо знать заранее что покупать, и хорошо-бы цена была раза в 2-3 меньше. Вот тогда, тогда да, вещь отличная.

Тот пост на коте я писал прям после покупки, и немного на эмоциях даже температуру подзадрал из за кривой термопары.
  • avatar
  • shodan
  • 24 июля 2015, 17:33
+1
Мало того что книга весьма годна, так еще имеет отсылки к другим не менее стоящим. Так например я открыл для себя учебник Эрцеговича и Ланга (Ercegovac & Lang) «Digital Arithmetic» и «CMOS VLSI Design» Весте и Харриса (Weste & Harris), это все прям что доктор прописал)