Электронный USB счетчик на AVR ATtiny25

Электронный 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

Скачать исходники и прошивки

Оригинал статьи на английском языке (перевод Колтыков А.В. для сайта cxem.net)


Категория: Микроконтроллеры
Метки:

Написать коментарий

*
= 4 + 2

Добавить изображение

Последние статьи