Эта небольшая заметка демонстрирует некоторые возможности платы расширения ODROID USB IO Board. Ядром которой является микроконтроллер PIC18F45K50-QFN.
Традиционно GPIO контакты имеют низкий ток, поэтому для корректной работы светодиодов, без резисторов ограничивающих уровень тока , подключим светодионы к разным GPIO линиям, в разъемы RA2 (Red), RB4 (Green), RC1 (Blue), RD4 Yellow), RE1 (White) с общим контактом на пине GND.
Ниже представлен код на Python использующий библиотеку hk_usb_io. Класс ParseText парсит входящий текстовой поток и возвращает список символов, являющимися первыми буквами от названия цветов светодиодов. Класс Blink методом blink принимает список символов и в цикле поочередно зажигает соответствующий светодиод. В привиденном коде будет распарсен собственный код программы.
import re, time
import hk_usb_io
class ParseText(object):
""""""
def __init__(self):
self.set_chars(
def set_chars(self, chars):
self._chars=chars
def get_strings(self, filename):
with open(filename) as f:
result=f.read()
return result
def parse_strings(self, strings):
return re.findall(
class Blink(object):
def __init__(self):
self._chars=
self._gpio=((0,2),
(1,4),
(2,1),
(3,4),
(4,1))
self.usb=hk_usb_io.init()
for index, port in self._gpio:
hk_usb_io.sfr_set_regbit(self.usb,0x5b+index,port,1)
hk_usb_io.sfr_set_regbit(self.usb,0x92+index,port,0)
def blink(self, chars):
tmp=list(set(chars))
l=lambda i: 1 if i in tmp else 0
values=[l(x) for x in self._chars]
zip(self._chars, values)
for index,port in self._gpio:
hk_usb_io.sfr_set_regbit(self.usb, 0x80+index, port, values[index])
p=ParseText()
s=p.get_strings(
c=p.parse_strings(s)
b=Blink()
for item in c:
b.blink(item)
time.sleep(0.2)
Видео демонстрирующее результат работы:
Если список символов заменить на следующий
то в результате светодиоды многократно последовательно зажгутся. Видео демонстрирующее это:
Контроллер PIC предоставляет до 25 каналов 10 битного аналого-цифрового преобразователя (АЦП). На плате я буду использовать каналы RA0 и RA1 относительно общего контакта GND. Входной диапазон по напряжению составляет 0 - 800мВ (примерно). Код для чтения значений очень прост:
usb=hk_usb_io.init()
while True:
print hk_usb_io.adc_ra1(usb)
time.sleep(1)
Также контроллер поддерживает 1 канал 5 битного цифрово-аналогого преобразователя (ЦАП). Диапазон выходного напряжения составляет 0 - 2870 мВ, шаг неравномерный и колеблется от 65 до 200 мВ, при расчетном 90мВ. Демонстрационный код sfr_dac.py взят из примеров к самой библиотеке. Результат работы программы отображен в виде следующего графика зависимости выходного напряжения от времени.
0 коммент.:
Отправить комментарий