USB лічильник відвідувань на мікроконтролері AVR ATtiny25
Проєкт являє собою лічильник з відображенням даних на 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 Кб)