Posts tagged PIC

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

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

Новая плата , старый проект. ПлатаPIC18F4(3..6)K22

0

nrf24l01

Всем привет ,  недавно заказал изготовление платы для процессоров серии  PIC18F  в корпусе TQFP 44. Проект старый, но давно хотел сделать.
Вот наконец то свершилось, подкопил немного денежек и заказ. Заказывал в  pselectro.ru , я заказываю у них давно уже , и всегда меня не подводили. Качество плат на высоте. Если вам  говорят что надо заполнять сложные формуляр и какие то документы сложные , это полный обман в пользу китайцев. Почему сейчас объясню. Если вы рисуете платы в каких либо таксировщиках, то просто не можете не знать, те термины которые у вас спрашивают  для заполнения  нескольких строк в бланке оформления.

 

img_20161127_162548

 

Вот параметры платы
ustanovki

 

Плата сделана для контроллера PIC18F45K22. Ее можно использовать и для других процессоров из серии PIC18F, она подходит .

img_20161203_131849

Отличительные особенности моей платы:
Отдельное питание для процессора, перемычкой вы сами выбираете какое будет питание у процессора. Можно выбрать внешнее или от стабилизатора который стоит у вас на плате. А также вы этой перемычкой можете отключить процессор от питания платы , для того чтоб запрограммировать внутрисхемно.
os1

 

 

 

 

 

 

 

 

 


os2

Сделаны выходы для UART1 , под плату CP2102  USB-UART.cp2102

 

 

 

 

 

 

 


os3

С лева индикатор питания, и цепочка резистора и конденсатора для процессора.
Посередине кнопка для сброса.
С права кварц с конденсаторами.

 

 

 

 


os4
Сделан разъем для модуля NRF24L01, а также может являться SPI1 разъемом. Питание у этого разъема только от стабилизатора на плате.24l01

 

 

 

 

 


os5Есть разъем для программирования, для программатора PICKIT2/PICKIT3. Пины порта B6/B7 больше нигде не задействованы на внешних выходах.

 

 

 

 

 


os6Стабилизатор питания типа LD1117A33 корпус SOT223, на 3,3 вольта и немного конденсаторов для сглаживания напряжения питания. Можно поставить и любой стабилизатор на 5 вольт, тогда для процессора использовать, только тогда разъем SPI1 для NRF24L01  тоже будет иметь пин питания на 5 вольт, и джампер для выбора питания процессора использовать только для внутреннего питания процессора.
Есть карта обзора на плату.

kartanrf24l01

ПК + RS485 + РЕЛЕ

0

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

GSM Выключатель.

0

Доделал GSM выключатель.

Все рассказы в видео, смотрите и слушайте.

 

Потайная комната на 485 интерфейсе.

0

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

Заметьте, что я использую только свои платы, которые сам придумал, они работают в моем  старом проекте, который называется  (Болванка для домашних поделок на PIC).

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

Объясняю,  что хочу сейчас сделать.

Сеть устройств, связных на протоколе RS485, котороя будет собирать информацию о текущей обстановке квартиры. Наблюдать за температурой, задымления воздуха, хочу привязать управление  за аквариумом, перемещением по комнатам, наблюдение за входной дверью.  И при  случае подавать СМС уведомления, а также хочу привязать управление квартирой через СМС.

Устройство (Мастер)

  • будет управлять нагрузкой на подсветку на светодиодах
  • будет иметь часы реального времени (ds1307 или аналоге)
  • управлять включением кнопки моего основного компьютера ( для удобства)
  • управлять включением кнопки моего хранилища данный (старый винт на 32 гига. туда скидываю важную инфу. иногда приходиться включать)
  • управлять включением кнопки переноски (там висят паяльная станция и ещё куча приборов)
  • принимать команды от GSM модема
  • следить за RFID приставкой (если потребуется закрыть комнату на электронный ключ, а то ребёнок достает уже до ручки и умеет открывать дверь )
Уже собрано устройство  ( SLAVE пульт), весит у меня прямо над монитором, чтобы не тянуться до компа, под стол и в остальные места. 

Тестирую RS-485 и “LV-32MX v6” + “EasyPIC5”

0

И вот я снова со своими бредовыми идеями. По случаю недавней моей покупки платы “ LV-32MX v6 Development System” от фирмы “MikroElektronika”. Я решил соединить две свои платы  “LV-32MX v6” + “EasyPIC5” интерфейсом RS-485. Прикупил AD485, нарисовал плату и всё это запаял. Фотки платы прелогается.

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

 

PIC CHIP Robot Tank

0

Наткнулся тут на одну поделку, блин я тоже хочу так сделать.

И скоро руки у меня дойдут до неё.

Выменял серво привод у DI HALT не давно .

 

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

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

Подключил GP2D120.

2


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

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

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

Go to Top