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

Проект представляет собой счетчик с отображением данных на LCD-экранчике и передачей данных через USB-интерфейс. Я к примеру использовал данное устройство как счетчик посещений для вебсайта.

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

В проекте используется микроконтроллер AVR ATtiny25, в качестве драйвера LCD-дисплея используется микросхема MAX7219. Для отображения данных используется обычный 7-ми сегментный индикатор на 8 знакомест.
Принципиальная схема устройства приведена на рисунке ниже:

Принципиальная схема USB счетчика

 

Для связи микроконтроллера и микросхемы 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 Кб)

Теги: