USB вольтметр своими руками
Для создания USB
Вольтметра своими руками устанавливаем на ПК следующие программы:
- PROTON IDE;
- PROTEUS;
- DELPHI 5.
1. Программирование в PROTON IDE.
Запускаем PROTON IDE. Нажимаем на кнопку EasyHid
(EasyHid
должно быть установлено) (рис.1).
рис. 1
В появившемся окне заполняем поля Company Name
и Product
Name
(рис.2).
рис. 2
Переходим к следующему окну (нажав клавишу NEXT) (рис.3).
рис. 3
Здесь
заполняем окна Vendor ID и Product
ID (можно оставить как есть, по умолчанию). Нажимаем NEXT, ничего не
меняем, снова нажимаем NEXT и переходим на следующую вкладку (рис.4).
рис. 4
На
этой вкладке пишем название проекта и указываем путь к сохраненному проекту (1)
(рис.4). Выбираем микроконтроллер (2) (рис.4). В данном случае выбираем
18F4550. Выбираем компилятор (3) (рис.4). Программу для ПК будем писать в Delphi.
Нажимаем NEXT. Компилируем проект. Нажимаем FINISH. В результате получены
скелеты для PROTON (рис.5) в папке PDS и для Delphi
в папке Delphi.
рис. 5
1 |
В
полученном скелете для PROTON вводим следующие строки кода: |
2 |
Adin_Res 10
'добавляем строку |
3 |
Dim USBBuffer[USBBufferSizeMax]
As Byte |
4 |
Symbol CARRY_FLAG = STATUS.0 |
5 |
Выделяем и удаляем все строки,
начиная со строки GoSub AttachToUSB.
Вместо удаленных строк пишем следующие строки: |
Сохраняем проект (1) и компилируем (2) (рис.6).
рис.
6
2. Работа в PROTEUS
Запускаем PROTEUS и собираем схему (рис.7).
рис.
7
Дважды щелкаем на МК PIC18F4550 и в окне Program File указываем путь к скомпилированной прошивке (BAS или HEX фаил).
3. Работа в DELPHI.
Запускаем Delphi
и загружаем скомпилированный скелет из папки Delphi.
Предварительно в эту папку копируем файл mcHID.dll из папки …/ProtonIDE/Plugin/EasyHid.
В загруженный скелет вводим выделенные красным цветом строки кода:
unit FormMain;
interface
uses
Windows, Messages, SysUtils, Classes,
Graphics, Controls, Forms, Dialogs, StdCtrls;
const
// input and out buffer size constants...
BufferInSize = 8;
BufferOutSize = 8;
type
// input and output buffers...
TBufferIn = array[0..BufferInSize] of
byte;
TBufferOut = array[0..BufferOutSize] of
byte;
// main form
TForm1 = class(TForm)
Label2: TLabel;
Edit1: TEdit;
Edit2: TEdit;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
FBufferIn:TBufferIn;
FBufferOut:TBufferOut;
function USBEvent(var Msg: TMessage):
Boolean;
public
end;
var
Form1: TForm1;
implementation
uses
cUSBInterface,
cUSBInterfaceTypes;
const
// vendor and product ID constants...
VENDOR_ID = 6017;
PRODUCT_ID = 2000;
{$R *.DFM}
{
****************************************************************************
* Name : Create
* Purpose : Create the main form
****************************************************************************
}
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.HookMainWindow(USBEvent);
Connect(Application.Handle);
end;
{
****************************************************************************
* Name : Destroy
* Purpose : Free the main form
****************************************************************************
}
procedure TForm1.FormDestroy(Sender: TObject);
begin
Application.UnHookMainWindow(USBEvent);
end;
{
****************************************************************************
* Name : USBEvent
* Purpose : DLL message handler hook
****************************************************************************
}
function TForm1.USBEvent(var Msg:
TMessage): Boolean;
var
DevHandle:cardinal;
a,b: double;
// TextBuffer:array[0..255] of char;
begin
result := False;
if Msg.Msg = WM_HID_EVENT then
begin
case Msg.WParam of
// a HID device has been plugged in...
NOTIFY_PLUGGED :
begin
// is it our HID device...
DevHandle := Msg.LParam;
// handle of HID device in this message
if (GetVendorID(DevHandle)
= VENDOR_ID) and (GetProductID(DevHandle)
=PRODUCT_ID) then
begin
Label2.Caption:= 'USB вольтметр сейчас подключен';
// add your code here, for example...
// GetProductName(DevHandle, TextBuffer, 256);
// ALabel.Caption :=
string(TextBuffer);
end;
result := true;
end;
// a HID device has been device removed...
NOTIFY_UNPLUGGED :
begin
// is it our HID device...
DevHandle := Msg.LParam;
// handle of HID device in this message
if (GetVendorID(DevHandle)
= VENDOR_ID) and (GetProductID(DevHandle)
= PRODUCT_ID) then
begin
Label2.Caption:= 'USB вольтметр сейчас отключен';
// add you code here
end;
result := true;
end;
// a HID device has been attached or removed. This event is fired
after
// either NotifyPlugged or NotifyUnplugged.
NOTIFY_CHANGED :
begin
// get the handle of the device we are interested
in
// and set it's read notification flag to
true...
DevHandle := GetHandle(VENDOR_ID,PRODUCT_ID);
SetReadNotify(DevHandle,true);
result := true;
end;
// a HID device has sent some data..
NOTIFY_READ :
begin
DevHandle := Msg.LParam; // handle of HID device in this message
if (GetVendorID(DevHandle) = VENDOR_ID) and (GetProductID(DevHandle) = PRODUCT_ID) then
begin
// read the data - remember that first byte is
report ID...
Read(DevHandle,@FBufferIn);
Edit1.Text:= String(@FBufferIn[1]);
a:= StrToFloat(Edit1.Text);
b:= (5/1024*a)*1.00532;
Edit2.Text:= FloatToStr(b);
// process data here...
end;
result := true;
end;
end;
end;
end;
end.
4. Запуск проекта.
Собрав схему в PROTEUS и доработав
программу в DELPHI запускаем проект (рис 8):
1. Запускаем схему в PROTEUS (1);
2. Запускаем программу в DELPHI (2 и 3).
рис. 8
В
текстовом окне (2) выводятся значения полученные из собранной схемы. В
текстовом окне (3) отображаются значения текстового окна (2) пересчитанные
программно в вольты.
5. Монтаж.
После проведения отладки проекта переходим к монтированию рабочей модели.
Приобретаем необходимые детали. Паяем наш вольтметр. МК лучше поместить в
«кроватку». После того, как рабочая модель вольтметра будет готова, переходим к
прошивке МК. Для этого нам понадобится программа IC-Prog
1.06C и программатор, поддерживающий наш МК.
Поместив наш
МК в программатор и запустив IC-Prog
1.06C, загружаем в эту программу скомпилированный HEX файл. Для того, чтобы
наш вольтметр опознался ПК как HID устройство, необходимо изменить конфиги
(рис. 9).
рис. 9
Для
этого в окна конфигурации вписываем следующие конфиги,
всего их четыре:
Config1 – 0230;
Config2 – 1E3D;
Config3 – 00FF;
Config4 – FF81.
Сохраняем изменения в отдельный файл. Для уверенности, что все сделано
правильно, закрываем программу. Загружаем программу снова, и загружаем
сохраненный измененный HEX файл. Снова проверяем конфиги.
Если все конфиги
соответствуют, прошиваем МК. После прошивки помещаем МК в «кроватку» нашего
вольтметра.
НЕОБХОДИМО ПОМНИТЬ, ЧТО МАКСИМАЛЬНОЕ ИЗМЕРЯЕМОЕ
НАПРЯЖЕНИЕ ДОЛЖНО БЫТЬ НЕ БОЛЕЕ 5 V ПОСТОЯННОГО ТОКА. ФАИЛ mcHID.dll ДОЛЖЕН
НАХОДИТЬСЯ В ПАПКЕ
С ПРОГРАММОЙ СКОМПИЛИРОВАННОЙ В DELPHI.
При работе в Windows XP необходимо установить
драйвера для HID устройств. При работе в Windows 7 эти
драйвера не требуются.