Cerca

Curriculum vitae e bio dell'autore Un paio di articoli relativi al mio hobby - robotica
Le mie impressioni circa l'immigrazione in Australia. Solo in russo. Ricette per risolvere i problemi quotidiani
Linux posti legati Windows-posti legati
Software posti legati Un sacco di informazioni su hardware
Diversi strumenti che potrebbe risultare utile Messaggi su tecnologie web vari
Tutto ciò che non rientra nel resto del menu Feed RSS per questo blog

Tag Cloud

Archivio

Links

Blog di Andrey Mikhalchuk

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

Technoblog sulla vita

23 Giugno 2011 Controllo RGB LED usando PICAXE-08: Nozioni di base di software PWM

Driving RGB LED with PICAXE-08M

Driving RGB LED con PICAXE-08M

Sto lavorando a un nuovo episodio che coinvolge RTFMs imballare un LED RGB e un microcontrollore in uno spazio molto stretto. Il microcontrollore ho deciso di utilizzare è PICAXE-08. Ho scelto per tre ragioni:
- Ho avuto uno nella casella
- Non avevo altri progetti per come sembrava non essere molto adatto per quello che ho capito per (ad alta quota progetto palloncino)
- Utilizzo per dim RGB LED è una sfida


Ho cercato su google per un po 'e non ha trovato soluzione per rendere RGB LED e PICAXE-08M lavoro insieme come avevo pianificato. Mentre il passaggio tra tre diversi colori del LED non è un problema a tutti con, mescolando i colori non è semplice con questo chip. Ho voluto controllare ogni colore separatamente con 256 gradazioni di luminosità / dimmer in modo che il LED in grado di produrre vero mix RGB. Questo è in genere realizzato con modulazione di larghezza di impulso (PWM) e non è un problema con Arduino per esempio. ATMega328 ha 6 canali PWM, in modo che possa pilotare due LED RGB. Ma PICAXE08 ha un solo canale PWM in modo che la missione potrebbe sembrare impossibile. Ho risolto il problema implementando software PWM che funzionava sorprendentemente bene dando PICAXE08 prestazioni limitate. Ecco il mio codice:

# Rem
Semplice programma PICAXE 08m di base che controlla in modo casuale e indipendente
luminosità di tutti e 3 i colori in un LED RGB
la creazione di patterms calmanti (come in una lampada d'animo).
Vedere la mia http://andrey.mikhalchuk.com blog per maggiori dettagli

Sei libero di fare quello che vuoi con questo codice, a citare il mio blog http://andrey.mikhalchuk.com
nei commenti, così la gente può trovare il codice aggiornato. Grazie!

Questo è il mio primo programma per il PICAXE, mi scuso se questo codice non soddisfa la vostra qualità
aspettative e danni i tuoi sentimenti su quanto è buono il codice dovrebbe essere simile :)
# Endrem

# PICAXE 08m
setfreq m4

; Config
simbolo SPEED = 3, minore è il valore maggiore è la velocità di cambiamento di colore
SPEED_VARIATIONS simbolo = 7; definisce quanti differenti velocità di cambio colore dovrebbe utilizzare

; Mappa pin
RED0_PIN simbolo = 0
GREEN0_PIN simbolo = 1
BLUE0_PIN simbolo = 2

; Mappa i valori dei pin a mem
; Valore perno è la luminosità corrente del LED
simbolo red0 = b0
simbolo green0 b1 =
blue0 simbolo = b2

; Pin_deltas mappa per mem
, Delta è la velocità del cambiamento di luminosità
simbolo red0_delta = b3
simbolo green0_delta = b4
simbolo blue0_delta = b5

, I valori temporanei per la subroutine
simbolo delta_w = w3
tmp simbolo = b7

; Subroutine parametri
simbolo pin = b8
simbolo val = b9
simbolo delta = b10

; Inizializzare tutto
red0 = 0
green0 = 70
blue0 = 200
red0_delta = 1
green0_delta = 5
blue0_delta = 9

; Avviare la modalità servo
; Notare che "servopos RED0_PIN, 255" rende LED spento!
; "Servopos RED0_PIN, 0" che lo rende davvero scarsa, ma illuminato. È un bug in PICAXE?
servo RED0_PIN, 255
servo GREEN0_PIN, 255
servo BLUE0_PIN, 255

, Questo codice è come loop () in Arduino
principale:
; Emulando chiamata di funzione in funzione-less ambiente
pin = RED0_PIN: val = red0: delta = red0_delta: gosub set_color_val: red0 = val: red0_delta = delta
pin = GREEN0_PIN: val = green0: delta = green0_delta: gosub set_color_val: green0 = val: green0_delta = delta
pin = BLUE0_PIN: val = blue0: delta = blue0_delta: gosub set_color_val: blue0 = val: blue0_delta = delta
goto principale

, Questo sub regola la luminosità del LED e delta
set_color_val:
val = val + delta
se delta <128 e val <delta allora; fwd
casuale delta_w
delta = SPEED_VARIATIONS sulla delta + 1
delta = 255 - delta
val = 255
elseif delta> = 128 e val> = delta allora; inverso
casuale delta_w
delta = SPEED_VARIATIONS sulla delta + 1
val = 0
endif
tmp = val - 1; servopos bug workaround
, Yeah, servopos richiede solo costante come primo argomento: (
Se il codice PIN = RED0_PIN poi
servopos RED0_PIN, tmp
elseif pin = GREEN0_PIN poi
servopos GREEN0_PIN, tmp
elseif pin = BLUE0_PIN poi
servopos BLUE0_PIN, tmp
endif
pausa SPEED
ritorno

; Vedere il mio blog e altri http://rtfms.com RTFMs blog video su youtube per la demo
, Questo è coperto nell'episodio # 7: Microcontroller Meets Jewelry

Alcune note su questo codice:
- Implementa "lampada RGB umore". Sentitevi liberi di modificarlo per le vostre esigenze
- Dal momento che mantiene PICAXE loop per tutto il tempo Ho il sospetto che il consumo di energia è orribile. Eppure è un bene per almeno un'ora quando l'alimentazione da due piccole batterie, come mostrato nell'episodio video blog RTFMs # 7
- Prestazioni di PICAXE08 è così così. Come potete vedere nel video RTFMs la luce è un po 'cangiante. Probabilmente non se ne accorgeranno quando si è guardando il LED di persona, ma telecamera rende l'effetto evidente. Infatti in lampada stato d'animo mi piace anche :)
- La dimensione del programma è 146 byte (su 08 disponibile su 256). Probabilmente può ottimizzare un po '.
- Il video RTFMs sul progetto lampada umore citato qui è quello di essere rilasciato un po 'più tardi

Questo post è pubblicato in Hardware , How To , Altro .

Non ci sono commenti

Non ci sono commenti finora

Lascia un commento

Mappa del sito (C) Andrey Mikhalchuk, 2005-2008