Проект представляет собой счетчик с отображением данных на LCD-экранчике и передачей данных через USB-интерфейс. Я к примеру использовал данное устройство как счетчик посещений для вебсайта.
В проекте используется микроконтроллер AVR ATtiny25, в качестве драйвера LCD-дисплея используется микросхема MAX7219. Для отображения данных используется обычный 7-ми сегментный индикатор на 8 знакомест.
Принципиальная схема устройства приведена на рисунке ниже:
Для связи микроконтроллера и микросхемы MAX7219 используется всего 3 линии. Программа для контроллера написана на AVR-GCC и основана на коде EasyLogger. Также, Christian Starkjohann разработал отличный программный USB-драйвер который называется AVR-USB и с помощью которого реализуется поддержка USB 1.1 (low speed) для атмеловских AVR микроконтроллеров. Т.о. необходимость в специальной USB-микросхеме (к примеру FT232) отпадает, все реализуется программно. Для питная м/с MAX7219 требуется источник питания мощностью не менее 300мА и напряжением 9-12В. Микроконтроллер IC3 питается от USB-шины.
Для экономии памяти микроконтроллера (2к в ATtiny25), MAX7219 использовался режим decode-mode (см. даташит). В этом режиме в памяти МК не нужно хранить таблицу шрифтов для семисегментного индикатора.
Код функции usbFunctionSetup для приема данных от МК:
USB_PUBLIC uchar usbFunctionSetup(uchar data[8])
{
static uchar replyBuf[2];
uchar Dlen;
usbMsgPtr = replyBuf;
switch (data[1]) {
case 0: // data format => data[3]:data[2]:data[5]:data[4]
MAX7219_DisplayChar(1,data[3] >> 4 & 0x0F); // display digit 0
MAX7219_DisplayChar(2,data[3] & 0x0F); // display digit 1
MAX7219_DisplayChar(3,data[2] >> 4 & 0x0F); // display digit 2
MAX7219_DisplayChar(4,data[2] & 0x0F); // display digit 3
MAX7219_DisplayChar(5,data[5] >> 4 & 0x0F); // display digit 4
MAX7219_DisplayChar(6,data[5] & 0x0F); // display digit 5
MAX7219_DisplayChar(7,data[4] >> 4 & 0x0F); // display digit 6
MAX7219_DisplayChar(8,data[4] & 0x0F); // display digit 7
Dlen = 0;
break;
case 1:
MAX7219_Clear();
Dlen=0;
break;
case 2:
MAX7219_Init();
Dlen=0;
break;
default:
Dlen=0;
break;
}
return Dlen;
}
Программа на ПК
Программа для компьютера написана на Delphi 6 с использованием компонента Indy 10. Для данной версии необходима специальная библиотека LibUSB-Win32, которая является портированной версией libusbдля Windows-систем. Библиотека значительно упрощает пользовательскому приложению доступ к USB-устройству. Также, для delphi использованы компоненты CoolTrayIcon и TextTrayIcon. Компоненты позволяют сворачивать приложение в трей, как это показано на картинке ниже.
Данное приложение каждые 10 секунд считывает данные с текстового файла hits.txt (счетчик посещений) и далее перенаправляет данные на USB.
Скрипт на вебсервере
На вебсервере используется файл hits.txt, в который записывается количество посещений странички. Файл должен быть доступен для записи (права 0777). Для записи количества посещений используется простенький PHP-скрипт:
$hitfile = $_SERVER[‘DOCUMENT_ROOT’].»/counter/hits.txt»;
$hits = @ file_get_contents($hitfile);
file_put_contents($hitfile,$hits+1,LOCK_EX);
echo ($hits+1); // используется для отладки
Для прошивки контроллера я использовал AVR ISP программатор и программу PonyProg
Прикрепленные файлы:
- HitCounter.rar (599 Кб)