Электроника

Домашняя поделка 2

0
Всем здрасти.
Продолжение, домашняя поделка 2 , пришлось заменить экран на другой, принцип тот же, только клавиатуру оставил старую. Также пик стоит, также улавливает сигнал от клавиатуры и рисует цифры.

Домашняя поделка.

3

Домашняя поделка.

И вот, наконец, я снова добрался до компьютера. Выкладываю свою новую рукодельную поделку.

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

В голову сразу же полезло, что нужно сделать на графическом дисплее  — это просто, но цена за устройство, которая была установлена маленькая, не стал просто выпендриваться и сообразил, что подешевле.

Прикинув схему, нашел решение в 74HC164 , DI HALT  подсказал, что она неплохо работает со SPI интерфейсом. И вот на  каждую цифру поставил 74HC164 в планаре снизу, всё это подключил вместе на одну линию от пика. То есть пик принимает по UATR(у) команды от клавиатуры и запихивает по SPI  интерфейсу в логику. В отображении цифр действия такие: выключаю полевиком минус у всех знаков, забиваю цифры по SPI  интерфейсу в логику (это для того чтоб не моргали цифры) и полевиком включаю разом все, и ничего получилось даже невидно как моргает дисплей.

Вид печатной платы дисплея сзади.

Тут  начинаю крепить цифры.

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

Полный вид дисплея со всеми цифрами.

Первый тест. Перед ним сидел, рисовал карту два часа для шестизначного дисплея, чтоб можно было по SPI интерфейсу забивать цифры. Мне понравилось, потому что сразу всё получилось и заработало: «блин с первого раза не накосячил!» .

Здесь полый вид как подключил к своей плате. Ещё раз порадовался ей, что я её давно купил и вспомнил, как был рад.

Тут уже почти готовая клавиатура, снизу прячется пик, который принимает команды от клавиш и пересылает в UART  по шнуру дисплею.

Вид снизу клавиатуры.

Здесь начинаю декорировать клавиатуру.

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

Соединил всё.

Первый тест в готовом виде.

Есть ещё видео.

Минимизация.

0

Сделали мне заказ на мой модуль питания, ну что надо так надо, пятнадцать модулей конечно не партия, но всё же мне пришлось над ним попыхтеть и сделать маленьким. Убрал из него микросхему мониторинга напряжения дорогая она почти 70 рублей, да и она там не нужна так сказали. И вот что получилось

Оценил свой модуль в 260р.

Бестеневая оптическая система Quick-228

0

Настал день варенье у меня на днях. От друзей и родственников поздравления принимал, а на работе подарили подарок Quick-228. Чтоб глаза не ломал по вечерам, в тот же вечер сидел до часа ночи, качественная веешь, глазами почувствовал, что есть разница между простым светильником и специализированной лампы для работы с мелкими компонентами.

Мне очень понравилось лампа.

Вот что пишут про неё в интернете.

Бестеневая оптическая система Quick-228 с отличной обзорностью и яркой подсветкой предназначена для работы с микро и мини электронными компонентами или печатными платами с плотным монтажом.

Устойчивая конструкция пантографа с максимальным размахом 1,0 м и пружинным механизмом стабилизации пантографа.

Круглая линза диаметром 125мм из высококачественного стекла с кратностью увеличения 5 диоптрий и большим фокусным расстоянием для комфортной работы оператора.

Одна круговая энергосберегающая люминесцентная лампа 22Вт для бестеневого освещения с электронным управлением не мерцает при включении и не создаёт стробоскопического эффекта при работе (схема управления лампы работает на частоте свыше 40 кГц).

Струбцинное крепление к столу, цвет белый.

Мельница — Дорога сна

0



Электроника МС1504.

2

Подарили мне ноут, называется Электроника МС1504.

Он такой древний что рассыпается в руках, но работает. Из дисплея вытащил много пыли. Дисплей похоже ещё EGA, подсветка работает, там стоит лампа газовая.

Самое обидно что там кроме корпуса там советского ещё пару микросхем, остальное всё ЖАПАН.

Винчестер дохлый , но по крайней мере он  пытается с него что то загрузить, в обще мне сказали что там когда то стоял DOS .Аккумуляторы просто там вскипели , только отчего так и непонятно.

Фотки выкладываю.

Пишем программу для 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.

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

Подключение GP2D120 к PIСBOT *ПРОДОЛЖЕНИЕ*

0

Подключение GP2D120 к PIСBOT.

Программное обеспечение взято из фирмы Mikroelektronika  mikroPascal PRO for PIC 2009.

http://www.mikroe.com/en/compilers/mikropascal/pro/pic/

Для того чтоб подключить дальномер нам потребуется найти АЦП вход у  микроконтроллера  PIC 16F887.

Они у контролера PIC 16F887 обозначены (AN – номер входа), их присутствует четырнадцать входов , длина АЦП десять бит.

На схеме они показаны.

Далее нам нужно выбрать вход и сконфигурировать как АЦП.

Для этого нам нужны регистры ADCON0, ADCON1.

Регистр ADCON0 предназначен для управления АЦП

Детальное описание каждого бита регистра ADCON0 показано ниже:

  • 7-6 биты для выбора частоты преобразования

00=FOSC/2

01=FOSC/8

10=FOSC/32

11= FRC (частота, получаемая от специализированного внутреннего генератора = 500 kHz максимум)

  • 5-2  биты для выбора аналогового канала

0000=AN0 (вывод RA0)

0001=AN1 (вывод RA1)

0010=AN2 (вывод RA2)

0011=AN3 (вывод RA3)

0100=AN4 (вывод RA5)

0101=AN5 (вывод RE0)

0110=AN6 (вывод RE1)

0111=AN7 (вывод RE2)

1000=AN8 (вывод RB2)

1001=AN9 (выход RB3)

1010=AN10 (вывод RB1)

1011=AN11 (вывод RB4)

1100=AN12 (вывод RB0)

1101=AN13 (вывод RB5)

  • 1 бит  состояния АЦП

1= чикл аналого-цифрового преобразования в процессе выполнения. Установка этого бита запускает цикл аналого-цифрового преобразования. Этот бит автоматически очищается микроконтроллером после окончания цикла аналого-цифрового преобразования.

0= цикл аналого-цифрового преобразования / не запущен

  • 0 бит разрешения работы АЦП

1=работа АЦП разрешена

0=работа АЦП не разрешена

Регистр ADCON1 предназначен для управления АЦП

Детальное описание каждого бита регистра ADCON1 показано ниже:

  • Бит 7 = бит выбора формата результата преобразования АЦП

1=Правое выравнивании

0=Левое выравнивание

  • Бит 6 = не задействован
  • Бит 5: бит выбора источника опорного напряжения

1=вывод VREF —  (RA2)

0= напряжение питания Vss

  • Бит 4: бит выбора источника опорного напряжения

1=вывод VREF+

0=общий провод VDD

  • Биты от 3 до 0 – Не задействованы

Конфигурирование АЦП.

Для использования модуля, АЦП микроконтроллера PIC16F887 необходимо рассмотреть следующие действия:

  • Конфигурирование порта
  • Выбор канала
  • Выбор источника опорного напряжения для АЦП
  • Выбор источника частоты преобразования
  • Выбор способа форматирования результата преобразования

Конфигурирование порта.

АЦП можно использовать для преобразования как аналоговых, так и цифровых сигналов. При преобразовании аналоговых сигналов, линии ввода/Вывода необходимо сконфигурировать как аналоговые входы, установив соответствующие биты регистра TRIS.

Выбор канала

Биты регистра ADCON0 определяют какой из каналов будет подключен ко входу

схемы выборки-хранения. После выбора канала, перед выполнением следующего преобразования, требуется некоторая задержка.

Выбор источника опорного напряжения для АЦП.

Биты 4,5 регистра ADCON1 обеспечивают независимое управление источниками

положительного и отрицательного опорного напряжения. В качестве источника положи-

тельного опорного напряжения можно использовать либо напряжение источника питания

Vdd, либо внешний источник стабильного напряжения. Точно так же, в качестве источника

отрицательного опорного напряжения, можно использовать напряжение источника пита-

ния Vss, либо внешний источник стабильного напряжения.

Для платы управления Роботом PICBOT будет выбрано напряжение питания +5 В

в качестве источника положительного опорного напряжения и напряжение Vss или общая

шина устройства в качестве источника отрицательного опорного напряжения.

Выбор источника частоты преобразования.

Источник частоты преобразования выбирается программно посредством c 6-7 бит

регистра ADCON0. Существует 4 варианта такого выбора:

•• FOSC/2: для тактовой частоты 20 МГц, TAD = 100 нсек

•• FOSC/8: для тактовой частоты 20 МГц, TAD = 400 нсек

•• FOSC/32: для тактовой частоты 20 МГц, TAD = 1,6 мксек

•• FRC (специальный внутренний генератор): TAD = 2…6 мксек

Время, необходимое для получения одного разряда преобразования, обозначено как

TAD. На один полный цикл 10-разрядного преобразования требуется 11 TAD периодов.

Форматирование результата преобразования

Результат аналого-цифрового преобразования возвращается процедурой

ADC_read(). Форма размещения результата преобразования будет зависеть от установки бита c 6-7

регистра ADCON0.

Процедура Аналого-Цифрового преобразования.

Рассмотрим пример процедуры использования АЦП для выполнения аналого-цифрового

преобразования микроконтроллером PIC16F887:

1. Конфигурирование порта:

•• Отключить выходной драйвер вывода

•• Сконфигурировать вывод как аналоговый вход, записав необходимое значение в

регистр ADCON1.

2. Конфигурирование модуля АЦП (используя регистр ADCON0):

••Выбрать частоту преобразования АЦП

••Сконфигурировать источник опорного напряжения

••Выбрать входной канал АЦП

••Выбрать формат результата преобразования, используя регистр ADCON1

••Включить модуль АЦП

Приступаем к практике.

Общий план что сейчас есть из модулей

Подключаем дальномер ко входу AN2 (выход RA2).

Питание подключаем k модулю питания.

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

Ох, не лёгкая.

0

 

Затянула меня игра , сижу уже третий месяц за ней, не могу оторваться.

Хоть полчаса но вечером посижу, надо героя своего прокачивать. Что то на подобие WOW, только она русская

.

http://www.allods.ru/index.php

Подключил GP2D120.

2


Ну вот, наконец-то я сделал, то что хотел, подключил GP2D120.

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

Всё остальное как я написал программу и подключил, я пока делаю.

Go to Top