Sonntag, 2. Dezember 2018

Hardware PWM mit dem Raspberry

Hardware PWM mit dem Raspberry Pi:


Allgemein Hardware:

http://www.codecubix.eu/index.php/2018/05/29/dark-side-of-the-raspberry-pi/

WiringPi:

http://wiringpi.com/
https://www.raspiprojekt.de/anleitungen/10-wiringpi.html?showall=1&limitstart
Erste Erkenntnis: Bei den neueren Versionen von Raspberian ist wiringpi schon vorinstalliert
Test:
In Eingabe-Shell (schwarze Kasten mit blauen Strich und dem Zeichen >_

pi@raspberry:~ $ gpio -v

Nun Kommt Version und Author und so weiter.

Über den folgenden Befehl könnt Ihr Euch den aktuellen Status Euers Ports anschauen:

pi@raspberry:~ $ gpio readall


Ein erste Beschreibungen mit einer LED/Motor findet Ihr unter:


http://blog.simtronyx.de/raspberry-pi-led-mit-ajax-und-pwm-dimmen/
https://raspi.tv/2013/how-to-use-wiringpi2-for-python-with-pull-ups-or-pull-downs-and-pwm
https://www.raspberrypi.org/forums/viewtopic.php?t=25679

Feststellung: Der Scheiß geht nicht so!!!

Nächste Versuch mit GPIO:
Hier ein paar Tutorials (SW-PWM):
https://forum-raspberrypi.de/forum/thread/7193-rgb-led-steuerung-mit-hardware-pwm/
https://www.youtube.com/watch?v=9tActipVqIM



Hinweis: Verlassendes Programms über KeyboardInterrupt mit: Strg+c

So, da es anscheinend nur Mist im Internet gibt, möchte ich das Internet auch mit meinem Mist belästigen:
Was geht, ist eine SW-PWM die mit den Pfeiltasten (oben/unten) im Dutycycle verändert werden kann.
Was nicht geht, eine adäquates verlassen des Programms:

import RPi.GPIO as GPIO
import time
import pygame, sys
from pygame.locals import *

pygame.init()
BLACK = (0,0,0)
WIDTH = 100
HEIGHT = 100
windowSurface = pygame.display.set_mode((WIDTH, HEIGHT), 0, 32)

windowSurface.fill(BLACK)

x = True

GPIO.setmode(GPIO.BCM)

blinkCount = 3
cycle = 50
LEDPin = 18
freq = 50

GPIO.setup(LEDPin, GPIO.OUT)
p = GPIO.PWM(LEDPin,freq)

p.start(cycle)

try:
while x:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
if event.type == KEYDOWN:
key = event.key
if key == pygame.K_DOWN:
cycle = cycle - 1
if cycle < 0:
cycle = 0

p.ChangeDutyCycle(cycle)
print(cycle)
time.sleep(0.2)

if event.type == KEYDOWN:
key = event.key
if key == pygame.K_UP:
cycle = cycle + 1
if cycle > 100:
cycle = 100

p.ChangeDutyCycle(cycle)
print(cycle)
time.sleep(0.2)

if event.type == KEYDOWN:
key = event.key
if key == pygame.K_q:
p.stop()
x = False
except KeyboardInterrupt:
pass

p.stop()
GPIO.cleanup()