UP BOX 3DP-25-4A
Всем привет. Поступил очередной клиент, китаец, принтер пишет ошибку SD карты.
Осматриваем принтер.






Осматриваем с зади, открываем крышку и смотрим что стоит внутри.

Все заметили что обдува нет, электроники.






Печатающая голова съемная на трех магнитах. И прикольно и полная фигня, висит один вентилятор обдув термобарьера , если он умирает , то голове кранты.








Еще таково не было пациента.

Всем привет.
Принесли еще одного пациента, проблема у него в перегреве платы. При конфигурировании этого принтера поставили 12 вольтовый блок питания, нагрев стола происходит через плату, на мощность 172 вата, из этого выходит что через плату проходит 12 ампер 12 вольт. Последствия видны на фото. Вылетел предохранитель на плате 15 ампер, почти расплавленная колодка где стоял предохранитель.

Лечение пациента будет через, вынос нагрузки с материнской платы. Докупаем внешний модуль с полевиком на 25 ампер.

Чистим колодку под новый предохранитель

Впихиваем туда модуль, места там просто нет, из-за этого мы выкручиваемся прикрутив на подложке к блоку питания модуль.

затягиваем винты на крышке. И делаем настройку механики. Ну вот пациент снова в строю и теперь ему нестрашны перегревы и перегрузки.

UniFi AP точка доступа для создания исключительно производительных сетевых систем практически не ограниченного радиуса действия

Ремонтируем венчик для взбивания.
DW2 Sonoff Wifi Беспроводной датчик
Логический элемент. (Logic)

Всем привет.
Делаю обзор данного устройства, в основном для того чтобы помнить, что было сделано такое устройство.
Встретился мне хороший человек, которому нужна была помощь. Помощь ему нужна была в плане сопряжения несколько устройств. В помещении стоит умная мойка для машин, которая моет машины и по завершению мытья машин нужно отрыть ворота. Вся загвоздка была в том, что электроника для ворот понимала определённый длинный импульс для открывания или закрывания ворот. А сама мойка выдавала просто короткий сигнал по завершению. На тот момент я принял решение пока поставить что было под рукой, это был (Авто ресет или можно назвать watch dogs). Само устройство выглядело как флэшка, но выполняла два условия, принимала входящий определенный сигнал и посылала дальше этот сигнал немного изменённый. После выполненной работы я решил взяться за своё придуманное устройство. Устройство должно было отвечать некоторым условиям:
- Быстро настроить на входящие сигналы
- Интуитивно понятный интерфейс
- Входное питание для устройства в большом диапазоне, не имея полярности
- Устойчивое к статике
- Устойчивое к перепадам влажности и температуры
- И высоким условиям стабильности
И высокие условия стабильности.
В устройстве применяется котроллер PIC18F914. Гарвардская архитектура восьмиразрядных микроконтроллеров PIC. Архитектурой вычислительного устройства называют совокупность свойств и характеристик, определяющих модель вычислительного устройства с точки зрения пользователя. Архитектура ВУ включает в себя его внутреннюю структуру и систему команд. Гарвардская архитектура означает разделение памяти на память программ и память данных, которые имеют свое адресное пространство. Высокая скорость выполнения команд в PIC-контроллерах достигается за счет использования двухшинной гарвардской архитектуры вместо традиционной одношинной фон-неймановской. Даже на личном опыте сам помню, когда начинал первые разработки своих устройств 20 лет назад, контроллеры этого семейства, выносили такие мои многочисленные ошибки что сам поражаюсь как это все работало.
Устойчивое к перепадам влажности и температуры
Покрываю плату лаком и стараюсь устанавливать обвязку, которая работает в большом диапазоне температуре окружающей среды.
Устойчивое к статике
На входе была использована схема с гальванической развязкой и защищена супрессором (SMBJ6V5CA).
Входное питание для устройства в большом диапазоне, не имея полярности
По питанию было применена схема на модуле LM2596 которая работает в диапазоне от 0 до 40 вольт.
Интуитивное понятный интерфейс.
Здесь все просто, использовал только кнопки с разной цветовой маркировкой. И последующим нажатием кнопок.
Корпус разрабатывал в solidworks под DIN реку, для удобства установки.


Печатал PET пластиком.
Разработка платы.
Разработку устройства поделил на две части:
- Процессор, интерфейс управления, входящий сигнал, исходящий сигнал
- Питание, и возможно в будущем разработка на RS485 интерфейсе связи.
Разработку оформлял DIPTRACE, кстати скачивая последнюю версию 15.01.2023, наткнулся на вирус на русификации, но старый русификатор прекрасно установился.

Конечно не обошлось без косяков, можно увидеть провод припаянный.

Обзор работы данного прибора будет в следящей статье.
Свой способ избавиться от пробки в принтере , на горячую.
Всем здравствуйте. Недавно для себя я нашел новый способ избавиться от пробки в принтере.
Все знают что пробка состоит из грязи или мусора в пластике в фильере , но избавиться от неё можно только разобрав принтер и заметить фильеру. Или попытаться проколоть иглой из набора, но грязь все равно остаётся там. Я немного поразмыслив и пришел к выводу что нужно что-то чем можно было достать остатки грязи. Это должно быть металлическое и гибкое. Что то что должно пройти через экструдер но не игла , я уже пробовал.
И нашел, это тросик металлический , от велосипедного тормоза. Процесс такой. Нагреваем сопло до 200 попугаев, проталкиваем тросик до носика фильеры через экструдер, и начинаем крутить тросик пальцами по часовой стрелке.
Так как тросик имеет винтовое закручивание металлических волокон , он начинает раскручиваться и распушаться внутри фильеры и получается эффект, кода мы чистим фильеру с наружи латунной щеткой. На холодный метал тросика когда налипает пластик он остывает и начинает прилипать . И мы тут же через несколько поворотов по часовой стрелке , крутим обратно и вытаскиваем все что налипло на тросик.
Извиняюсь за объяснения, я не писатель.
Снова экономический кризис снами, все в порядке. Microchip запретили продавать.
Решил в тяжелые времена поднять свои закрома, И как оказалось они есть . Нашел не хилую такую стопку PIC18F25J10 в размере 80 шт. И оформил для них платки на JLCPCB. Вот и решил их запаять все сразу. Фотографию прилагаю , как я на утюге и усаживаю на платы.
MP3 TF 16P Кодим. с++\pascal
Всем привет. Недавно столкнулся с тем что нужно было управлять звуками, подключил модуль , а кода нет чтоб управлять. Начал искать для Микропаскаля для PIC . Нашёл только для С++ , пришлось переделать , делюсь кодом со всеми.
PASCAL
Пример использования.
DFplayer(track, 0x0101); // 01 — папка 01-трэк
delay_ms(100); // выдержка
DFplayer(volume,30); // установка звука
delay_ms(100);// выдержка
DFplayer( play ,0);// команда проигрывание
- PROCEDURE DFplayer (F: WORD; DAT : WORD );
- PROCEDURE write_comand ( VAR _CMD :array[10] of char);
{
// FF+06+03+00+00+01=0109
// 0-0109=FE F7
// Sample #2: In case of the play command it would be:
// 0 1 2 3 4 5 6 7 8 9
// 0X7E, 0xFF, 0x06, 0X0D, 00, 00, 00, 0xFE, X, 0XEF
// 0x06+0X0D+0xFE= 100010001 (binary) ---> negate 011101110 =0xEE
// So your checksum for byte 8 is 0xEE
// 7E FF 06 0F 00 01 01 xx xx EF
// 0 -> 7E is start code
// 1 -> FF is version
// 2 -> 06 is length
// 3 -> 0F is command
// 4 -> 00 is no receive
// 5~6 -> 01 01 is argument
// 7~8 -> checksum = 0 - ( FF+06+0F+00+01+01 )
// 9 -> EF is end code
}
unit MP3_DF_PLAER;
CONST track = 0x03;//PARA DEFINIR EL NURO DE LA PISTA A REPRODUCIR DE 0 A 2999
CONST pause = 0x0E;//PAUSAR REPRODUCCION
CONST play = 0x0D;//REPRODUCIR
CONST next = 0X01;//SIGUIENTE PISTA
CONST previus = 0X02;//PISTA ANTERIOR
CONST volume = 0x06;//VOLUMEN DE AUDIO DESDE 0 HASTA 30
CONST volume_up = 0x04;//SUBIR VOLUMEN UN PASO A LA VES
CONST volume_down = 0x05;//BAJAR VOLUMEN UN PASO A LA VES
CONST USB_SD = 0x09;//ESPECIFICA DISPOSITIVO A LEER USB - SD
CONST EQ = 0x07;//Normal : Pop : Rock : Jazz : Classic : Bass
CONST repeat_track = 0X08;//REPITE LA PISTA INDICANDO CUAL DE 0 A 2999
CONST repeat_all_tr = 0X11;//REPITE TODAS PISTA
CONST sleep = 0x0A;//MODULO A DORMIR
CONST reset = 0x0C;//RECETEO DEL DFplayer mini
CONST randon = 0x18;//PISTAS ALEATORIAS
CONST stop = 0x16;//DETENER
CONST set_DAC = 0x1A;// SALIDA DAC ENCENDER - APAGAR
CONST set_repeat = 0x19;//REPRODUCCION REPETIDA DE LA PISTA ACTUAL ENCENDER - APAGAR
CONST _ON = 0x0000;//ENCENDER
CONST _OFF = 0x0001;//APAGAR
CONST _SD = 0x0002;//MEMORIA SD
CONST USB = 0x0001;//MEMORIA USB
CONST Normal = 0x0000;//EQUALIZADOR NORMAL
CONST Pop = 0x0001;//EQUALIZADOR POP
CONST Rock = 0x0002;//EQUALIZADOR ROCK
CONST Jazz = 0x0003;//EQUALIZADOR JAZZ
CONST Classic = 0x0004;//EQUALIZADOR CLASSIC
CONST Bass = 0x0005;//EQUALIZADOR BASS
const comandoDFplayer : array[10] of char = (0x7E,0xFF,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0xEF);
PROCEDURE write_comand ( VAR _CMD : array[10] of char);
PROCEDURE DFplayer (F: WORD; DAT : WORD );
VAR
comDF : array[10] of char;
implementation
PROCEDURE DFplayer (F: WORD; DAT : WORD );
BEGIN
comDF[0]:=0x7E;
comDF[1]:=0xFF;
comDF[2]:=0x06;
comDF[3]:=F;//0x00;
comDF[4]:=0x00;
comDF[5]:=hi(dat);//0x00;
comDF[6]:=lo(dat);//0x00;
comDF[7]:=0x00;
comDF[8]:=0x00;
comDF[9]:=0xEF;
write_comand(comDF);
END;
PROCEDURE write_comand ( VAR _CMD :array[10] of char);
VAR
checksum: WORD ;
i : BYTE ;
BEGIN
checksum := 0;
for i:=1 TO i<7 DO
BEGIN
checksum :=checksum+_cmd[i];
UART1_Write(_cmd[i]);
END;
checksum := 0xFFFF - checksum + 1;
_cmd[7] := hi(checksum);
_cmd[8] := lo(checksum);
for i:=0 to i<10 do
UART1_Write(comDF[i]);
END;
end.
С++
Это писал не я.
- void write_comand (unsigned char *cmd); //Funcion de comunicacion
- void DFplayer(unsigned char funcion, unsigned int dato);//Funcion
//***DEFINICIONES***********************************************************************
#define track 0x03//PARA DEFINIR EL NUMERO DE LA PISTA A REPRODUCIR DE 0 A 2999
#define pause 0x0E,0x0000//PAUSAR REPRODUCCION
#define play 0x0D,0x0000//REPRODUCIR
#define next 0X01,0x0000//SIGUIENTE PISTA
#define previus 0X02,0x0000//PISTA ANTERIOR
#define volume 0x06//VOLUMEN DE AUDIO DESDE 0 HASTA 30
#define volume_up 0x04,0x0000//SUBIR VOLUMEN UN PASO A LA VES
#define volume_down 0x05,0x0000//BAJAR VOLUMEN UN PASO A LA VES
#define USB_SD 0x09//ESPECIFICA DISPOSITIVO A LEER USB - SD
#define EQ 0x07//Normal : Pop : Rock : Jazz : Classic : Bass
#define repeat_track 0X08//REPITE LA PISTA INDICANDO CUAL DE 0 A 2999
#define repeat_all_tr 0X11//REPITE TODAS PISTA
#define sleep 0x0A,0x0000//MODULO A DORMIR
#define reset 0x0C,0x0000//RECETEO DEL DFplayer mini
#define randon 0x18,0x0000//PISTAS ALEATORIAS
#define stop 0x16,0x0000//DETENER
#define set_DAC 0x1A// SALIDA DAC ENCENDER - APAGAR
#define set_repeat 0x19//REPRODUCCION REPETIDA DE LA PISTA ACTUAL ENCENDER - APAGAR
#define ON 0x0000//ENCENDER
#define OFF 0x0001//APAGAR
#define SD 0x0002//MEMORIA SD
#define USB 0x0001//MEMORIA USB
#define Normal 0x0000//EQUALIZADOR NORMAL
#define Pop 0x0001//EQUALIZADOR POP
#define Rock 0x0002//EQUALIZADOR ROCK
#define Jazz 0x0003//EQUALIZADOR JAZZ
#define Classic 0x0004//EQUALIZADOR CLASSIC
#define Bass 0x0005//EQUALIZADOR BASS
////////////////////////////////////////////////////////////////////////////////////////
//***Variables**************************************************************************
static unsigned char comandoDFplayer[10] = {0x7E,0xFF,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0xEF};
//*************************************************************************************
////////////////////////////////////////////////////////////////////////////////////////
//***Procedimientos**************************************************************************
void write_comand (unsigned char *cmd); //Funcion de comunicacion
void DFplayer(unsigned char funcion, unsigned int dato);//Funcion control DFplayer
//**************************************************************************************
///////////////////////////////////////////////////////////////////////////////////////
//***Funciones**************************************************************************
void write_comand(unsigned char *cmd){
unsigned int checksum = 0;
unsigned short i = 0;
checksum = 0;
for(i=1; i<7; i++){
checksum += cmd[i];
}
checksum = 0xFFFF - checksum + 1;
cmd[7] = (unsigned char) (checksum >> 8);
cmd[8] = (unsigned char) checksum;
for(i=0; i<10; i++){
UART1_Write(cmd[i]);
}
}
//--------------------------------------------------------------------------------------
void DFplayer(unsigned char funcion, unsigned int dato){
comandoDFplayer[3] = funcion;
comandoDFplayer[5] = (unsigned char) (dato >> 8);
comandoDFplayer[6] = (unsigned char) dato;
write_comand(comandoDFplayer);
}
////////////////////////////////////////////////////////////////////////////////////////