Матрёшка (ardruino) и Малинка (Raspberry Pi)

Описание: Новости науки и техники. Всё то, о чём раньше Вы могли только мечтать. Магия современности.

dyvniy M
Автор темы, Администратор
Администратор
Аватара
dyvniy M
Автор темы, Администратор
Администратор
Возраст: 41
Репутация: 1
Лояльность: 1
Сообщения: 3579
Зарегистрирован: Ср, 10 октября 2012
С нами: 11 лет 6 месяцев
Профессия: Программист
Откуда: Россия, Москва
ICQ Сайт Skype ВКонтакте

#7 dyvniy » Пт, 17 марта 2017, 18:50:18

GPIO from Python
http://eax.me/raspberry-pi-gpio/
Спойлер
GPIO-пины Raspberry Pi и их использование из Python
14 декабря 2016
В уже довольно не новом посте, посвященном Raspberry Pi, это устройство рассматривалось исключительно, как маленький и очень дешевый компьютер. Бесспорно, Raspberry Pi им и является. Но, помимо этого, у Raspberry Pi есть еще и 26 пинов GPIO (General Purpose Input Output), что очень кстати в свете моего недавнего увлечения электроникой. Почему? Давайте разберемся.
Отмечу, что все написанное ниже справедливо для Raspberry Pi 2 Model B. Если у вас другая малина, то расположение пинов и другие детали могут отличаться. Поэтому обязательно сверьтесь с официальной документацией. В качестве операционной системы я использовал релиз Raspbian от 2016-09-28, который можно скачать здесь. Более поздние релизы мне не нравятся, потому что из соображений безопасности в них решили по умолчанию отключать SSH. Что довольно смешно, потому что в этот же релиз решили включать Adobe Flash.
Итак, расположение пинов описано на официальном сайте:
Номер GPIO-пинов Raspberry Pi
На этой картинке явно изображен один из углов устройства (слева вверху), поэтому по ошибке пронумеровать пины вверх ногами довольно сложно. Очень интересно, что курили ребята, решившие так нумеровать пины. Если кто-нибудь знает ответ, расскажите, пожалуйста, в комментариях. Чтобы окончательно всех запутать, они решили сделать две нумерации. Выше представлена «логическая» нумерация. Под этими номерами пины видны операционной системе. Есть еще и «физическая» нумерация, про которую можно прочитать по приведенной выше ссылке. В рамках данной заметки используется исключительно «логическая» нумерация, изображенная на картинке.
Допустим, мы хотим программно управлять напряжением, подаваемым на 2-й пин. Проще всего это сделать через sysfs.
Первым делом «экспортируем» пин, без этого шага им не получится управлять:
echo 2 > /sys/class/gpio/export
Делаем его out-пином, то есть, он будет либо подавать, либо не подавать напряжение в 3.3 вольта:
echo out > /sys/class/gpio/gpio2/direction
Подаем напряжение:
echo 1 > /sys/class/gpio/gpio2/value
Перестаем подавать напряжение:
echo 0 > /sys/class/gpio/gpio2/value
Узнаем, подается ли сейчас напряжение:
cat /sys/class/gpio/gpio2/value
По завершении работы пину можно сделать unexport:
echo 2 > /sys/class/gpio/unexport
Есть мнение, и не только мое, что 3.3 вольта — как-то маловато. Кроме того, было бы неплохо не только включать и выключать напряжение, но и изменять его в некотором диапазоне. Увы, насколько мне известно, ничего этого Raspberry Pi не умеет. Поговаривают, что умеет Arduino, но опыта использования этого устройства на момент написания этих строк у меня нет.
Можете подключить пин к цепи из светодиода и резистора с сопротивлением 470 Ом и проверить, что описанным выше образом светодиод можно включать и выключать. Для земли (то есть, минуса) можно использовать любой пин, изображенный на приведенной выше схеме черным цветом. Понятно, что работу с sysfs можно автоматизировать на любом языке программирования по вкусу. Можно подключить сразу три светодиода разного цвета и получить программно управляемый светофор. Собственно, это я и сделал, воспользовавшись пинами 3 и 4.
Важно! После загрузки Raspberry Pi некоторые пины по дэфолту могут подавать напряжение. Возможно, это не то, чего вы хотите для вашей цепи. У меня по дэфолту ток был на пинах 2, 3 и 14. Я бы советовал перепроверить эту информацию на вашей конкретной Raspberry Pi и конкретной версии Raspbian. Имейте также ввиду, что написанная вами же программа может оставить пины в неизвестном состоянии (например, если вы прибьете ее kill’ом). Наверное, в общем случае лучше всего проектировать цепь так, чтобы она была готова к любым комбинациям наличия или отсутствия тока на используемых вами пинах.
До сих пор были рассмотрены out-пины. Они как бы «пишут» на макетную плату, но не позволяют узнать ее текущее состояние. Например, нажата ли в настоящих момент какая-то кнопка. Даже если цепь разомкнута, out-пины об этом не знают. Поэтому есть еще и in-пины.
Экспортируем 5-ый пин и делаем его in-пином:
echo 5 > /sys/class/gpio/export
echo in > /sys/class/gpio/gpio5/direction
Этот пин я подключил к цепи из резистора сопротивлением 10 кОм и кнопки, которая в нажатом состоянии замыкает цепь, а в отпущенном размыкает.
«Прочитать» кнопку можно так:
cat /sys/class/gpio/gpio5/value
Считывается 1, если кнопка не нажата, то есть, цепь разомкнута, и 0, если кнопка нажата, то есть, цепь замкнута.
В итоге получилась такая конструкция (иллюстрация про кнопку взята отсюда):
Raspberry Pi, пример использования GPIO
А вот и скрипт на Python, который при нажатии на кнопку тушит текущий светодиод и зажигает следующий за ним:
#!/usr/bin/env python

import RPi.GPIO as GPIO
import time

# Use "logical" pin numbers
GPIO.setmode(GPIO.BCM)

# Disable "This channel is already in use" warnings
GPIO.setwarnings(False)

# Setup LED's: 2 - green, 3 - yellow, 4 - red
for i in range(2,5):
GPIO.setup(i, GPIO.OUT)
GPIO.output(i, False)

current_led = 2
GPIO.output(current_led, True)

# Prepare to read button state
BUTTON = 5
PRESSED_CODE = 0
GPIO.setup(BUTTON, GPIO.IN, pull_up_down=GPIO.PUD_UP)

while True:
# GPIO.wait_for_edge(BUTTON, GPIO.FALLING)
# print("Button pressed")
# GPIO.wait_for_edge(BUTTON, GPIO.RISING)
# print("Button released")
time.sleep(0.05)
if GPIO.input(BUTTON) == PRESSED_CODE:
GPIO.output(current_led, False)
current_led = max(2, (current_led + 1) % 5)
GPIO.output(current_led, True)
time.sleep(0.1)
Опытным путем удалось подобрать временные задержки, при которых светодиоды переключаются в точности так, как ожидает пользователь. Закомментированный в приведенном коде метод wait_for_edge на практике работает совершенно непредсказуемо. Например, если зажать кнопку на несколько секунд, то последующие нажатия будут приводить к зажиганию светодиодов в каком-то почти случайном порядке.
Насколько мне известно, это по большому счету все, что можно сделать с помощью GPIO на Raspberry Pi. Поправьте, если я не прав.
Изображение

dyvniy M
Автор темы, Администратор
Администратор
Аватара
dyvniy M
Автор темы, Администратор
Администратор
Возраст: 41
Репутация: 1
Лояльность: 1
Сообщения: 3579
Зарегистрирован: Ср, 10 октября 2012
С нами: 11 лет 6 месяцев
Профессия: Программист
Откуда: Россия, Москва
ICQ Сайт Skype ВКонтакте

#8 dyvniy » Пт, 17 марта 2017, 18:54:38

alt2{ margin: 0px; padding: 6px; border: 1px inset;}
smallfont{margin-bottom:2px;}
spoil{margin:10px; margin-top:5px;}
Изображение

dyvniy M
Автор темы, Администратор
Администратор
Аватара
dyvniy M
Автор темы, Администратор
Администратор
Возраст: 41
Репутация: 1
Лояльность: 1
Сообщения: 3579
Зарегистрирован: Ср, 10 октября 2012
С нами: 11 лет 6 месяцев
Профессия: Программист
Откуда: Россия, Москва
ICQ Сайт Skype ВКонтакте

#9 dyvniy » Пт, 5 мая 2017, 16:53:37

Альтерантивный тип раоцессоров по типу клеточного автомата
https://geektimes.ru/post/133291/
Спойлер
TM FeedХабрахабрGeektimesТостерМой кругФрилансим Мегапосты: Конкурс стартапов. Грант 650 000 рублей5 сценариев для MS Azure OS Day 2017
Публикации
Пользователи
Хабы
Компании
Песочница

Написать


Анатолий Ализарalizar
Редактор
Написать Подписаться
24 ноября 2011 в 03:56
144-ядерный процессор Чарльза Мура поступил в продажу по $20
Железо
Чарльз Мур, создатель языка программирования Форт (Forth), довёл до стадии промышленного производства уникальную разработку — многоядерный процессор GA144. Чип размером 10х10 мм уже поступил в продажу по цене $20 (при заказе от десяти штук), также доступны материнские платы для него. Фактически, это аппаратное воплощение самого языка программирования Форт.

Крайне необычный процессор по ряду параметров не имеет себе равных среди CPU:
144 независимых ядра, которые активируются только при поступлении инструкции, то есть у этого процессора нет такой характеристики как «тактовая частота»;
скорость выполнения инструкций 1400 пикосекунд (эквивалент 700 МГц);
энергопотребление 7 пикоджоулей на одну инструкцию;
энергопотребление в «спящем» режиме менее 100 нановатт;
Многоуровневое программирование даёт возможность писать очень быстрый и простой микрокод либо использовать высокоуровневый язык программирования, либо сочетать оба этих метода в кластерах вычислительных ядер с указанием среди них «хостов» и «сопроцессоров» на выбор.

Чак разработал этот процессор самостоятельно с помощью им же созданного инструментария OKAD II VLSI. Инструменты для разработки под GA144, включая ассемблер/компилятор и примеры исходных кодов, распространяются бесплатно в пакете под общим названием arrayForth.

Специалисты пытаются понять, каковы целевые области применения GA144. Вариантов много:
робототехника (манипуляторы, протезы, автономные подвижные роботы);
искусственный интеллект и нейронные сети (классификация, распознавание сигналов/образов);
«бортовые системы» (диагностика состояния в реальном времени, контроль движения);
«академическое» применение (аппаратное обеспечение курсов цифровой обработки сигналов, параллельного программирования, архитектуры вычислительных систем);
распознавание и синтез речи;
модуляторы/демодуляторы сигналов.
Сам разработчик процессора дополняет этот список различными энергоэффективными приложениями (модуль беспроводного приёма энергии), портативными устройствами, системами обработки изображений, сложными управляющими системами, криптографией, высокопроизводительной обработкой сигналов, программами симуляции и синтеза и другими приложениями, которые нуждаются в массовом параллелизме.

Архитектура GA144 (PDF)
Руководство по arrayForth (PDF)
GreenArrays, arrayForth, Forth, Форт, встраиваемые системы, массовый параллелизм
Реклама помогает поддерживать и развивать наши сервисы
Изображение


Название раздела: Технокалипсис
Описание: Новости науки и техники. Всё то, о чём раньше Вы могли только мечтать. Магия современности.

Быстрый ответ


Введите код в точности так, как вы его видите. Регистр символов не имеет значения.
Код подтверждения
:) ;) :hihi: :P :hah: :haha: :angel: :( :st: :_( :cool: 8-| :beee: :ham: :rrr: :grr: :* :secret: :stupid: :music: Ещё смайлики…
   

Вернуться в «Технокалипсис»

Кто сейчас на форуме (по активности за 15 минут)

Сейчас этот раздел просматривают: 16 гостей