ELEMENTUS.RU | Micropascal

Posts tagged Micropascal

Авторесет.

0
Представляю вам свой новый проект. Авто ресет или можно назвать watch dogs.

Устройство предназначено для удержания ПК в активном состоянии , то есть при зависании или сбое ПК прибор сделает РЕСТАРТ ПК.

Устройство состоит из коробки с проводом USB и индикаторами обозначающими состояние прибора и еще провод для подключения к плате на ПИН (RESET). Сделана кнопка для эмуляции самой кнопки РЕСЕТ и для связи прибора с программой, у кнопки двойное предназначение в зависимости от текущего состояния прибора.

Всё устройство делалось под заказ , для одной организации которая занимается продажей комплектующих для ПК и соответственно еще и занимается сборкой ферм для майнинга. И требовалось устройство для удержания ПК в активном состоянии, но китайские поделки были не только дорогими но и неудобными по подключению. И нужно было сделать устройство чтоб было просто подключить к ПК и не запариваться с драйверами. Что и было сделано.

Начну по подробней.

Есть дополнение к прибору , это программа для WINDOSW.

Программа выполняет связь с прибором по USB шнуру , при подключении прибора, активируется и начинает синхронизацию с прибором.

В закладке СТАТИСТИКА можно посмотреть время перезагрузок которые были записаны в самом приборе , записи о перезагрузках не хранятся на ПК эти записи хранит само устройство в своей памяти. Есть возможность записи удалить полностью или сохранить копию в файл на ПК.


В закладке  НАСТРОЙКИ можно увидеть установки для программы и прибора.
  1. Прятать (AR) при загрузке WINDOWSданная опция делает запись в конфигурационный файл программы на ПК, что программа должна спрятаться в трэй при запуске WINDOWS.
  2. Запуск (AR) при запуске WINDOWS — данная опция делает запись в файл реестр WINDOSW , что программа будет загружаться автоматически при запуске операционной системы.
  3. Удержание компьютера включенным (Прибор) — данная опция делает запись в самом приборе , и при синхронизации прибора с программой устройство начинает отслеживать связь с программой. Если связь теряется то устройство начинает обратный отсчет для перезагрузки ПК.
  4. Установлен звуковой сигнал (Прибор) — данная опция делает запись в самом приборе что все действия сопровождаются звуковым сигналом из прибора ,  в приборе установлен зуммер который будет оповещать о обратном отсчете , перезагрузке ПК.
  5. Время для обратного отсчета перед перезагрузкой — предоставлено  для индивидуальной установки обратного отсчета времени перед перезагрузкой ПК 

 

В закладке Обновление  можно увидеть версию самой программы и версию прибора к которому подключено. При нажатии кнопки (Последние обновления программы) можно почитать последние новости  обновлении программы.

Запуск и работа прибора с программой.

 

При подключении прибора первый раз к WINDOWS , вам нужно подождать некоторое время , для  определения операционной системы данного устройства. Драйвера вам не нужно устанавливать, контроллер на котором сделан прибор определяется операционной системой как HID устройство и работает отлично  на стандартных драйверах которые заложены в WINDOWS.

После можно запускать программу и делать индивидуальные настройки для своего пк.

Работа прибора и индикация .
    1. Зеленый индикатор — 
      1. индикатор гори постоянно это означает синхронизация с программой установлена
      2. индикатор не гори это означает синхронизация с программой не установлена или программа просто не запущена
      3. индикатор моргает это означает синхронизация с программой установлена и включен режим удержания ПК включенным , если при обрыве в этот момент произойдет обрыв синхронизации прибора с программой будет запущен обратный отсчет для перезагрузки
    2. Красный индикатор — моргает это означает запущен обратный отсчет для перезагрузки 
    3. Синий индикатор — горит тогда когда есть питание на приборе
    4. Желтый индикатор — горит это означает что в приборе есть записи о последних перезагрузках, их можно просмотреть во вкладке статистика.
Кнопка на приборе .

Кнопкой на приборе можно

  • отменить режим удержания ПК, когда зеленый индикатор моргает
  • закрыть программу для синхронизации , когда зеленый индикатор горит постоянно
  • с эмулировать нажатие кнопки РЕСЕТ , когда зеленый индикатор и красный индикатор не горит
  • отменить обратный отсчет для перезагрузки , когда моргает красный индикатор

PIC Bootloader для PIC18F45K22 от www.mikroe.com

0
Всем привет.
Продолжаю рассказывать про развитие моей идеи с PIC18F45K22 и дешевыми цифровыми передатчиками NRF24L01.  Существует программа загрузчик от компании mikroe.com .
Если присутствует загрузчик в процессоре , то не требуется программатор для перепрограммирование данного устройства , то есть идет удешевлении самого устройства.
pic_bootloader_v102.zip

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

0
Рассказываю про панель удавленного доступа к системе умный дом по радиоканалу.

 

ПК + RS485 + РЕЛЕ

0

Выкладываю новую поделку свою.

Пишем программу для PICBOT.

0

По пожелания читателей изменил свойства страницы, поставил растягивающую.

Продолжаю писать про PICBOT.

Первые действия, устанавливает на загрузку библиотеки,  которые нам нужны.

ФОТО

Есть основные несколько процедур для управления двигателями.

procedure   Change_Duty(speedA,speedB:byte;);// ************* ИСМЕНЕНИЕ СКОРОСТИ ДВИГАТЕЛЕЙ**********

begin

motor_duty_A:=speedA; // Save for old speed

motor_duty_B:=speedB;

PWM1_Set_Duty(speedA); // Motor A

PWM2_Set_Duty(speedB); // Motor B

end;

procedure Start_motor; //********** Motor START ********/

begin

PWM1_Start();

PWM2_Start();

end;

procedure Stop_motor; //********** Motor STOP ********/

begin

PWM1_Stop();

PWM2_Stop();

end;

procedure Motor_A_FWD;                 //********** Motor A Forward ********/

begin

Pwm1_Start();

PORTD.0 :=0;

PORTD.1 :=1;

end;

procedure Motor_B_FWD;           //********** Motor B Forward ********/

begin

Pwm2_Start;

PORTB.1 :=0;

PORTB.2 :=1;

end;                //************************************/

procedure  Motor_A_BWD; //********** Motor A Backward *******/

begin

Pwm1_Start;

PORTD.0 :=1;

PORTD.1 :=0;

end;                //************************************/

procedure  Motor_B_BWD ; //********** Motor B Backward *******/

begin

Pwm2_Start;

PORTB.1 :=1;

PORTB.2 :=0;

end;                //************************************/

procedure Motor_A_Off;                //********** Motor A Off ************/

begin

Pwm1_Stop;

PORTD.0 :=0;

PORTD.1 :=0;

end;                //************************************/

procedure Motor_B_Off;                //********** Motor B Off ************/

begin

Pwm2_Stop;

PORTB.1 :=0;

PORTB.2 :=0;

end;                //************************************/

procedure Motor_Forward(speedA,speedB:byte);                //********** Go Forward ************/

begin

Motor_Init;

Change_Duty(speedA,speedB);

Motor_A_FWD;

Motor_B_FWD;

end;                //************************************/

procedure Motor_Backward(speedA,speedB:byte);                //********** Go Backward ************/

begin

Motor_Init;

Change_Duty(speedA,speedB);

Motor_A_BWD;

Motor_B_BWD;

end;                //************************************/

procedure Motor_S_Right(speedA,speedB:byte);                //********** Spin Left *************/

begin

Motor_Init;

Change_Duty(speedA,speedB);

Motor_A_FWD;

Motor_B_BWD;

end;                //************************************/

procedure Motor_S_Left(speedA,speedB:byte);                //********** Spin Right ************/

begin

Motor_Init;

Change_Duty(speedA,speedB);

Motor_A_BWD;

Motor_B_FWD;

end;                //************************************/

procedure  Motor_Stop;                //********** Stop Motor ************/

begin

Motor_Init;

Change_Duty(0,0);

Motor_A_Off;

Motor_B_Off;

end;                //************************************/

PROCEDURE  ADC_INIT;          // *****************НАСТРАИВАЕМ        GP2D120    ПОД ДАЛЬНОМЕР

BEGIN

INTCON := 0;

OPTION_REG := $80;

ADCON1     := $82;

TRISB.6:=0;                //  НАСТРОЙКА ПОД ФАРЫ КА ВЫХОДЫ

TRISB.7:=0;                //  НАСТРОЙКА ПОД ФАРЫ КА ВЫХОДЫ

TRISA.2    := 1;            // УСТАНАВЛИВАЕМ RA2 КАК ВХОД

ANSEL  := 0x04;              // НАСТРАИВАЕМ ПОРТ  AN2 КАК АНАЛОГОВЫЙ ВХОД

ANSELH := 0;

END; //************************************/

procedure  ADC_READ_GP2D120_PICBOT;    //  ОПРЕДЕЛЯЕМ РАСТОЯНИЕ ДО ПРЕДМЕТА

begin

A:=0;

adc_rd:= ADC_read(2);           // СЧИТЫВАЕМ ИНФОРМАЦИЮ С ДАЛЬНОМЕРА

adc_rd_h := adc_rd div 78 ;          // ПРОДГОНЯЕМ  ВЫХОДНЫЕ ДАННЫЕ

adc_rd_l := (adc_rd mod 78) div 7;  //  С АЦП ПОД ВОЛЬТЫ

A:=byte(adc_rd_h);                // И ПЕРЕВОДИМ В ЧИСЛУЮ ДАННУЮ БАЙТ

IF A>=3 THEN BEGIN PORTB.6:=1; PORTB.7:=0; END //  ЗАЖИГАЕМ ФАРЫ ЗЕЛЁНЫЕ СИНИ ВЫКЛЮЧАЕМ ЕСЛИ ЕСТЬ ПРЕПЯТСТВИЕ

ELSE BEGIN PORTB.6:=0; PORTB.7:=1; END

end;

Вот основной код программы которая двигает робот.

begin

ADC_INIT;   // Устанавливаем настройки АЦП

motor_drive:=0;  //

motor_init_:=0;  //

Motor_Init;      //  устанавливаем настройки на драйвер двигателя

ADC_READ_GP2D120_PICBOT;    //  ОПРЕДЕЛЯЕМ РАСТОЯНИЕ ДО ПРЕДМЕТА

Start_motor;                // ЗАПУСКАЕМ ДВИГАТЕЛИ

error := Soft_UART_Init(PORTC, 7, 6, 1200, 1); // УСТАНАВЛИВАЕМ УАРТ НА ПРИЁМ КОМАНД

Delay_ms(100); // ЗАДЕРЖКА НЕБОЛЬШАЯ

M1:

byte_read := Soft_UART_Read(error);  // СЧИТЫВАЕМ КОМАНДЫ С РАДИОМОДУЛЯ

while TRUE do                            //

begin

ADC_READ_GP2D120_PICBOT; //  ОПРЕДЕЛЯЕМ РАСТОЯНИЕ ДО ПРЕДМЕТА

IF A> 3 THEN              // ЕСЛИ ОПРЕДЕЛЁН ПРЕДМЕТ ТО

CASE motor_drive OF

0:  BEGIN Motor_Backward(255,255);  // ЕСЛИ  СТОИМ НАМЕСТЕ , и есть приближение предмета  ТО ОТЕЖАЕМ И ОСТАНАВЛИВАЕМСЯ

repeat

BEGIN

ADC_READ_GP2D120_PICBOT;

END;

until A <3 ;

Motor_Stop;

END;

5: BEGIN                       // ЕСЛИ ДВИГАЕМСЯ ВПЕРЁД ТО НУЖНО  ОТЪЕХАТЬ НАЗАД И ПОВЕРНУТЬ И СНОВА ЕХАТЬ ВПЕРЁД

Motor_Backward(255,255);

repeat

BEGIN

ADC_READ_GP2D120_PICBOT;

END;

until A <3 ;

Motor_S_Left(255,255);

Delay_ms(300);

IF motor_drive=5 THEN  Motor_Forward(255,255)

ELSE Motor_Stop;

END;

END;

if byte_read <> 230 then goto m1;

byte_read := Soft_UART_Read(error);

if (error = 0) then                 // ЕСЛИ НЕТ ОШИБОК

BEGIN

//————————————————————————

//————————————————————————

CASE byte_read OF

17:BEGIN  Motor_Forward(255,255);motor_drive:=5;    END;

12: BEGIN Motor_Backward(255,255);  motor_drive:=1; END;

15: BEGIN Motor_Stop;               motor_drive:=0; END;

14: BEGIN Motor_S_Left(255,255);    motor_drive:=3; END; // Call Spin Left END;

27: BEGIN Motor_S_Right(255,255);   motor_drive:=4; END;

END;

//————————————————————————————

//————————————————————————

END;

END;

end.

end.

Продолжение следует.
Go to Top