Suche

Lebenslauf und Bio des Autors Paar von Artikeln im Zusammenhang mit meinem Hobby - Robotik
Meine Eindrücke über die Einwanderung nach Australien. Nur auf Russisch. Rezepte für alltägliche Probleme zu lösen
Linux-bezogene Beiträge Windows-related posts
Software-related posts Eine Menge Infos über Hard-
Verschiedene Werkzeuge, die Sie nützlich finden könnten Beiträge zu verschiedenen Web-Technologien
Alles, was nicht passt, der Rest der Speisekarte RSS-Feeds für dieses Blog

Tag Cloud

Archiv

Links

Andrey Mikhalchuk Blog

English flagItalian flagKorean flagChinese (Simplified) flagPortuguese flagGerman flagFrench flagSpanish flagJapanese flagRussian flagDanish flagFinnish flagHebrew flag

Technoblog über das Leben

Jun 23, 2011 LED-RGB-Controlling mit PICAXE-08: Grundlagen der Software-PWM

Driving RGB LED with PICAXE-08M

Driving RGB-LED mit PICAXE-08M

Ich arbeite an einer neuen Episode, die Verpackung RTFMs ein RGB-LED und einen Mikrocontroller in einem sehr engen Raum arbeiten geht. Der Mikrocontroller entschied ich mich zu bedienen ist PICAXE-08. Ich wählte es aus drei Gründen:
- Ich hatte einen in der Box
- Ich hatte keine andere Pläne für ihn, wie es sich als nicht sehr geeignet für das, was ich bekam es für (a hochgelegenen Ballon-Projekt) erschienen
- Verwenden Sie zum Dimmen von RGB-LED ist eine Herausforderung


Ich googeln für eine Weile und keine Lösung gefunden, um RGB-LED und PICAXE-08M Arbeit zusammen, wie ich geplant. Beim Umschalten zwischen drei verschiedenen Farben der LED ist kein Problem mit, ist das Mischen von Farben nicht trivial mit diesem Chip. Ich wollte jede Farbe separat zu steuern mit 256 Abstufungen von Helligkeit / dimmen, so dass die LED-RGB-Mix richtig produzieren kann. Dies wird typischerweise mit Pulsweitenmodulation (PWM) und nicht ein Problem mit Arduino z. B. erreicht. ATMega328 hat 6 PWM-Kanäle, so dass es zwei RGB-LEDs treiben. Aber PICAXE08 hat nur einen PWM-Kanal, so dass die Mission scheint unmöglich. Ich löste das Problem durch die Implementierung von Software-PWM, die überraschend gut geben PICAXE08 begrenzte Leistungsfähigkeit gearbeitet. Hier ist mein Code:

# REM
Einfache PICAXE 08m Basic-Programm, zufällig und unabhängig kontrolliert
Helligkeit aller 3 Farben in einem RGB-LED
Erstellen beruhigende Schnitten arbeitet (wie in einer Stimmung Lampe).
Siehe mein Blog http://andrey.mikhalchuk.com für mehr Details

Sie sind frei zu tun, was du mit diesem Code wollen, nur erwähnen, mein Blog http://andrey.mikhalchuk.com
in den Kommentaren, so dass die Leute finden aktualisierten Code. Vielen Dank!

Dies ist mein allererstes Programm für PICAXE, ich entschuldige mich, wenn dieser Code nicht Ihren Qualität
Erwartungen und Harms deine Gefühle darüber, wie gut Code sollte wie aussehen :)
# Endrem

# PICAXE 08m
setfreq m4

; Config
Symbol SPEED = 3, je kleiner der Wert, desto höher die Geschwindigkeit der Farbwechsel
Symbol SPEED_VARIATIONS = 7; legt fest, wie viele verschiedene Farbwechsel Geschwindigkeiten sollte es zu benutzen

; Pins
Symbol RED0_PIN = 0
Symbol GREEN0_PIN = 1
Symbol BLUE0_PIN = 2

; Karte PIN-Werte zu mem
, Pin-Wert ist die aktuelle Helligkeit der LED
Symbol red0 = b0
Symbol green0 = b1
Symbol blue0 = b2

; Karte pin_deltas zu mem
; Delta ist die Geschwindigkeit der Helligkeitsänderung
Symbol red0_delta = B3
Symbol green0_delta = B4
Symbol blue0_delta b5 =

; Temperatur Werte für die Unterroutine
Symbol delta_w = w3
Symbol tmp = B7

; Unterprogramm Parameter
Symbol pin = B8
Symbol val = B9
Symbol delta = B10

; Alles initialisieren
red0 = 0
green0 = 70
blue0 = 200
red0_delta = 1
green0_delta = 5
blue0_delta = 9

; Servo-Modus starten
; Beachten Sie, dass "servopos RED0_PIN, 255" LED rendert off!
; "Servopos RED0_PIN, 0" macht es wirklich dunkel, sondern leuchtet. Ist das ein Bug in PICAXE?
Servo RED0_PIN, 255
Servo GREEN0_PIN, 255
Servo BLUE0_PIN, 255

; Dieser Code ist wie loop () in Arduino
Haupt:
; Emuliert Funktionsaufruf in Funktion weniger Umwelt-
pin = RED0_PIN: val = red0: delta = red0_delta: gosub set_color_val: red0 = val: = Delta red0_delta
pin = GREEN0_PIN: val = green0: delta = green0_delta: gosub set_color_val: green0 = val: = Delta green0_delta
pin = BLUE0_PIN: val = blue0: delta = blue0_delta: gosub set_color_val: blue0 = val: = Delta blue0_delta
Zur Hauptseite

; Diese Untergruppe passt die Helligkeit der LED-und Delta-
set_color_val:
val = val + Delta
wenn delta <128 und Val <delta dann, FWD
Random delta_w
delta = delta + 1% SPEED_VARIATIONS
Delta = 255 - Delta
val = 255
elseif delta> = 128 und Val> = delta dann, Reverse
Random delta_w
delta = delta + 1% SPEED_VARIATIONS
val = 0
endif
tmp = val - 1; servopos Bug Workaround
; Ja, nimmt servopos einzige Konstante als erstes Argument: (
wenn Pin = RED0_PIN dann
servopos RED0_PIN, tmp
elseif pin = GREEN0_PIN dann
servopos GREEN0_PIN, tmp
elseif pin = BLUE0_PIN dann
servopos BLUE0_PIN, tmp
endif
Pause SPEED
zurückkehren

, Siehe meinen anderen Blog http://rtfms.com und Video-Blog auf YouTube RTFMs für Demo
, Dies wird in der Episode # 7 abgedeckt: Microcontroller Meets Schmuck

Ein paar Anmerkungen zu diesem Code:
- Es implementiert "RGB-Laune-Lampe". Fühlen Sie sich frei, um es für Ihre Anforderungen ändern
- Seit PICAXE hält Looping die ganze Zeit Ich vermute, der Stromverbrauch ist schrecklich. Dennoch ist es gut eine Stunde lang zumindest, wenn der Strom durch zwei winzige Batterien wie in der Video-Blog RTFMs Episode # 7 dargestellt
- Leistung der PICAXE08 ist so lala. Wie man auf dem Video sehen kann RTFMs das Licht ist leicht schimmernd. Sie werden wahrscheinlich nicht bemerken es an, während Sie das persönlich geführt, sondern Videokamera macht der Effekt bemerkbar. In der Tat in Stimmung Lampe es gefällt mir sogar :)
- Das Programm beträgt 146 Byte (von 256 auf 08). Wahrscheinlich können Sie es ein bisschen zu optimieren.
- Die RTFMs Video über die Stimmung Lampe Projekt erwähnt ist hier ein wenig später veröffentlicht werden

Dieser Beitrag erscheint in Hardware , How To , Andere .

Noch keine Kommentare

Bisher keine Kommentare

Lassen Sie eine Antwort

Site Map (C) Andrey Mikhalchuk, 2005-2008