Pesquisar

Currículo e bio do autor Casal de artigos relacionados com o meu hobby - robótica
Minhas impressões sobre a imigração para a Austrália. Em russo apenas. Receitas para resolver problemas cotidianos
Linux lugares ligados Windows lugares ligados
Software lugares ligados Um monte de informações sobre hardware
Diferentes ferramentas podem ser úteis Mensagens sobre tecnologias web vários
Tudo o que não se encaixa no resto do menu RSS feed para este blog

Tag Cloud

Arquivo

Links

Blog do Andrey Mikhalchuk

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

Technoblog sobre a vida

23 de junho de 2011 RGB Controlar LED usando PICAXE-08: Noções básicas de software PWM

Driving RGB LED with PICAXE-08M

Driving LED RGB com PICAXE-08M

Eu estou trabalhando em um novo episódio RTFMs que envolve a embalagem de um LED RGB e um microcontrolador em um espaço muito apertado. O microcontrolador eu decidi usar é PICAXE-08. Eu escolhi-o por três razões:
- Eu tinha um na caixa
- Eu não tinha outros planos para ele como parecia não ser muito adequado para o que eu peguei para (um projeto de balão de alta altitude)
- Usá-lo para diminuir RGB LED é um desafio


Eu pesquisei um pouco e não encontraram nenhuma solução para fazer RGB LED e PICAXE-08M trabalho em conjunto, como eu planejei. Durante a troca entre três diferentes cores do LED não é um problema de todos com, mistura de cores não é trivial com este chip. Eu queria controlar cada cor separadamente com 256 gradações de luminosidade / escurecimento de modo que o LED pode produzir mix RGB verdade. Isto é tipicamente obtido com largura de impulso (PWM), e não um problema com Arduino por exemplo. ATmega328 tem 6 canais PWM, para que ele possa conduzir dois LEDs RGB. Mas PICAXE08 tem apenas um canal de PWM para a missão pode parecer impossível. Eu resolvi o problema através da implementação de software PWM que funcionou surpreendentemente bem dando PICAXE08 desempenho limitado. Aqui está o meu código:

# Rem
Simples PICAXE programa 08M básico que controla de forma aleatória e independente
o brilho de todas as 3 cores em um LED RGB
criar patterms calmantes (como em uma lâmpada de humor).
Ver o meu http://andrey.mikhalchuk.com blog para mais detalhes

Você é livre para fazer o que quiser com este código, basta mencionar o meu blog de http://andrey.mikhalchuk.com
nos comentários, para que as pessoas podem encontrar o código atualizado. Obrigado!

Este é o meu primeiro programa para PICAXE, peço desculpas se este código não atende a sua qualidade
expectativas e prejuízos de seus sentimentos sobre o código como é bom deve ser semelhante :)
# Endrem

# PICAXE 08M
setfreq m4

; Configuração
símbolo de velocidade = 3; quanto menor for o valor, maior a velocidade de mudança de cor
SPEED_VARIATIONS símbolo = 7; define quantas velocidades diferentes mudanças de cor que deveria usar

; Nos pinos dos mapas
símbolo RED0_PIN = 0
símbolo GREEN0_PIN = 1
símbolo BLUE0_PIN = 2

; Mapas valores pinos para mem
; Valor pino é o brilho corrente do LED
símbolo red0 = b0
símbolo green0 = b1
símbolo blue0 b2 =

; Pin_deltas mapa para mem
; Delta é a velocidade da mudança de brilho
símbolo red0_delta = b3
símbolo green0_delta = b4
símbolo blue0_delta b5 =

; Valores temporários para a sub-rotina
símbolo delta_w = w3
tmp símbolo b7 =

; Parâmetros de subrotinas
símbolo pin = b8
símbolo val = B9
símbolo delta = b10

; Inicializar tudo
red0 = 0
green0 = 70
blue0 = 200
red0_delta = 1
green0_delta = 5
blue0_delta = 9

; Iniciar o modo de servo
; Notar que "servopos RED0_PIN, 255" torna LED desligado!
; "Servopos RED0_PIN, 0" torna muito fraca, mas iluminado. É que um bug no PICAXE?
RED0_PIN servo, 255
GREEN0_PIN servo, 255
BLUE0_PIN servo, 255

; Esse código é como loop () em arduino
principal:
; Emulando chamada de função em função de meio ambiente menos
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 main

; Este sub ajusta o brilho do LED e do delta
set_color_val:
val = val + delta
se delta <128 e val <delta, em seguida, fwd
delta_w aleatória
ô = delta SPEED_VARIATIONS% + 1
delta = 255 - delta
val = 255
elseif delta> = 128 e val> = delta, em seguida, reverso
delta_w aleatória
ô = delta SPEED_VARIATIONS% + 1
val = 0
endif
tmp = val - 1; solução bug servopos
; Sim, servopos toma única constante como o primeiro argumento: (
se o pino = RED0_PIN então
servopos RED0_PIN, tmp
elseif pin = GREEN0_PIN então
servopos GREEN0_PIN, tmp
elseif pin = BLUE0_PIN então
servopos BLUE0_PIN, tmp
endif
VELOCIDADE pausa
voltar

; Ver o meu outro blog e http://rtfms.com RTFMs blog de vídeo no youtube para demonstração
; Isto é tratado no episódio # 7: Microcontrolador Atende Jóias

Algumas notas sobre este código:
- Ele implementa "lâmpada humor RGB". Sinta-se livre para alterá-lo para suas necessidades
- Desde PICAXE mantém looping todo o tempo eu suspeito que o consumo de energia é horrível. Ainda é bom para pelo menos uma hora quando a energia por duas pilhas pequenas, como mostrado no episódio video blog RTFMs # 7
- Desempenho de PICAXE08 é assim-assim. Como você pode ver no vídeo RTFMs a luz é um pouco cintilante. Você provavelmente não vai notar que no mesmo tempo olhando para o LED em pessoa, mas câmera de vídeo torna o efeito perceptível. De fato, em lâmpada humor que eu gosto mesmo :)
- O tamanho do programa é 146 byte (de 256 disponível em 08). Você provavelmente pode otimizá-lo um pouco.
- O vídeo RTFMs sobre o projeto da lâmpada humor aqui mencionado é para ser lançado um pouco mais tarde

Este post foi publicado em Hardware , Como , Outros .

Sem comentários

Nenhum comentário até o momento

Deixe uma resposta

Mapa do Site (C) Andrey Mikhalchuk, 2005-2008