Índice:

Matriz de exibição de LED 5x4 usando um carimbo básico 2 (bs2) e Charlieplexing: 7 etapas
Matriz de exibição de LED 5x4 usando um carimbo básico 2 (bs2) e Charlieplexing: 7 etapas

Vídeo: Matriz de exibição de LED 5x4 usando um carimbo básico 2 (bs2) e Charlieplexing: 7 etapas

Vídeo: Matriz de exibição de LED 5x4 usando um carimbo básico 2 (bs2) e Charlieplexing: 7 etapas
Vídeo: Decimal to Hexadecimal Converter using Arduino 2024, Julho
Anonim
Matriz de exibição de LED 5x4 usando um carimbo básico 2 (bs2) e Charlieplexing
Matriz de exibição de LED 5x4 usando um carimbo básico 2 (bs2) e Charlieplexing

Você tem um Basic Stamp 2 e alguns LEDs extras por aí? Por que não brincar com o conceito de charlieplexing e criar uma saída usando apenas 5 pinos.

Para este instrutível estarei usando o BS2e, mas qualquer membro da família BS2 deve funcionar.

Etapa 1: Charlieplexing: O quê, por quê e como

Vamos entender o porquê primeiro. Por que usar charlieplexing com Basic Stamp 2? --- Prova de conceito: Aprenda como funciona o charlieplexing e aprenda algo sobre o BS2. Isso pode ser útil para mim mais tarde, usando chips de 8 pinos mais rápidos (apenas 5 deles serão i / o).--- Razão útil: Basicamente, não há nenhum. O BS2 é muito lento para exibir sem cintilação perceptível. O que é charlieplexing? --- Charlieplexing é um método de acionar um grande número de LEDs com um pequeno número de pinos de i / o do microprocessador. Eu aprendi sobre charlieplexing em www.instructables.com e você também pode: Charlieplexing LEDs- A teoria Como controlar muitos LEDs de alguns pinos de microcontrolador. Também na wikipedia: CharlieplexingComo posso dirigir 20 leds com 5 pinos de i / o? --- Por favor, leia os três links em "O que é charlieplexing?". Isso explica tudo melhor do que eu jamais poderia. O Charlieplexing é diferente do multiplexing tradicional, que precisa de um pino de E / S para cada linha e cada coluna (isso seria um total de 9 pinos de E / S para uma tela 5/4).

Etapa 2: Hardware e esquema

Hardware e esquemático
Hardware e esquemático

Lista de materiais: 1x - Basic Stamp 220x - diodos emissores de luz (LEDs) do mesmo tipo (cor e queda de tensão) 5x - resistores (veja abaixo o valor do resistor) Auxiliar / Opcional: Método de programação do seu botão de pressão BS2Momentary como um switch de reset6v -9v Fonte de alimentação dependendo da sua versão do BS2 (leia o seu manual) O Esquema: Este esquema é montado com o layout mecânico em mente. Você verá a grade de LEDs configurada à esquerda, esta é a orientação para a qual o código BS2 foi escrito. Observe que cada par de LEDs tem o ânodo conectado ao cátodo do outro. Eles são então conectados a um dos cinco pinos de E / S. Valores do resistor: Você deve calcular seus próprios valores de resistor. Verifique a folha de dados para seus LEDs ou use a configuração de LED em seu multímetro digital para encontrar a queda de tensão de seus LED. Vamos fazer alguns cálculos: Tensão de alimentação - Queda de tensão / Corrente desejada = Valor do resistor O BS2 fornece energia regulada de 5 V e pode fornecer 20ma de atual. Meus LEDs têm uma queda de 1,6 V e operam a 20ma.5v - 1.6v /.02amps = 155ohmsPara proteger seu BS2 você deve usar o próximo valor de resistor mais alto do que você obteve com o cálculo, neste caso eu acredito que seria 180ohms. Usei 220 ohms porque minha placa de desenvolvimento tem esse valor de resistor embutido para cada pino de E / S. NOTA: Eu acredito que como há um resistor em cada pino, isso efetivamente dobra a resistência em cada led, já que um pino é V + e o outro é Gnd. Se for esse o caso, você deve reduzir os valores do resistor pela metade. O efeito adverso de um valor de resistor muito alto é um LED mais escuro. Alguém pode verificar isso e me deixar um PM ou comentário para que eu possa atualizar essas informações? Programação: Tenho usado uma placa de desenvolvimento que tem um conector DB9 para programar o chip direto na placa. Eu também uso este chip na minha placa de ensaio sem solda e incluí um cabeçalho ICSP (In Circuit Serial Programming). O conector tem 5 pinos, os pinos 2 a 5 se conectam aos pinos 2 a 5 em um cabo serial DB9 (o pino 1 não é usado). Observe que para usar este cabeçalho ICSP, os pinos 6 e 7 no cabo DB9 devem ser conectados um ao outro. Reset: Um botão de reset momentâneo é opcional. Isso apenas puxa o pino 22 para o solo quando empurrado.

Etapa 3: breadboarding

Breadboarding
Breadboarding
Breadboarding
Breadboarding

Agora é hora de construir a matriz em uma placa de ensaio. Usei uma tira de terminais para conectar uma perna de cada par de led e um pequeno fio de ligação para conectar as outras pernas. Isso é detalhado na foto do close up e é explicado em detalhes aqui: 1. Oriente sua placa de ensaio para corresponder à imagem maior2. Coloque o LED 1 com o ânodo (+) voltado para você e o cátodo (-) afastado de você.3. Coloque o LED 2 na mesma orientação com o ânodo (+) na barra de terminais de conexão do cátodo do LED 1.4. Use um pequeno fio de ponte para conectar o ânodo do LED 1 com o cátodo do LED 2.5. Repita até que cada par de LEDs tenha sido adicionado à placa. Eu uso o que normalmente seriam as faixas do barramento de força da placa de pão como faixas de barramento para os pinos de E / S do BS2. Como existem apenas 4 faixas de barramento, eu uso uma faixa de terminais para P4 (a quinta conexão de E / S). Isso pode ser visto na imagem maior abaixo.6. Conecte a régua de terminais para o cátodo LED 1 à régua de barramento P0. Repita para cada LED de numeração ímpar, substituindo o P * adequado para cada par (consulte o esquema).7. Conecte a barra de terminais para o cátodo LED 2 à barra de barramento P1. Repita para cada LED de numeração ímpar, substituindo o P * adequado para cada par (consulte o esquema).8. Conecte cada barra de barramento ao pino de E / S apropriado no BS2 (P0-P4).9. Verifique todas as conexões para garantir que correspondem ao esquema. Comemore. NOTA: No close-up, você verá que não parece que segui a etapa 7, pois a conexão com o segundo pino de E / S está no ânodo dos LEDs de numeração ímpar. Lembre-se de que o cátodo dos LEDs pares está conectado ao ânodo dos LEDs ímpares, de modo que a conexão é a mesma de qualquer maneira. Se esta nota o confundir, simplesmente ignore.

Etapa 4: Noções básicas de programação

Para que o charlieplexing funcione, você liga apenas um led de cada vez. Para que isso funcione com nosso BS2, precisamos de duas etapas básicas: 1. Defina os modos de saída para os pinos usando o comando OUTS.2. Diga ao BS2 quais pinos usar como saídas usando o comando DIRS. Isso funciona porque o BS2 pode ser informado sobre quais pinos deve ser acionado alto e baixo e vai esperar para fazer isso até que você especifique quais pinos são saídas. Vamos ver se as coisas estão conectadas corretamente por apenas tentando piscar o LED 1. Se você olhar no esquema você pode ver que P0 está conectado ao cátodo (-) do LED 1 e P1 está conectado ao ânodo desse mesmo LED. Isso significa que queremos direcionar P0 baixo e P1 alto. Isso pode ser feito da seguinte forma: "OUTS =% 11110" que leva P4-P1 alto e P0 baixo. (% Indica um número binário a seguir. O dígito binário mais baixo está sempre à direita. 0 = BAIXO, 1 = ALTO) O BS2 armazena essa informação, mas não agirá sobre ela até que declaremos quais pinos são saídas. Esta etapa é fundamental, pois apenas dois pinos devem ser produzidos ao mesmo tempo. O resto deve ser entradas, o que define esses pinos para o modo de alta impedância para que não absorvam nenhuma corrente. Precisamos acionar P0 e P1, portanto, definiremos esses como saídas e o restante como entradas, como: "DIRS =% 00011". (% Indica que um número binário deve seguir. O dígito binário mais baixo está sempre à direita. 0 = INPUT, 1 = OUTPUT) Vamos juntar isso em algum código útil: '{$ STAMP BS2e}' {$ PBASIC 2.5} DO OUTS =% 11110 'Drive P0 baixo e P1-P4 alto DIRS =% 00011' Definir P0- P1 como Saídas e P2-P4 como Entradas PAUSE 250 'Pausa para LED permanecer aceso DIRS = 0' Ajuste todos os pinos para Entrada. Isso desligará o LED PAUSE 250 'Pausar para que o LED permaneça desligado LARGA

Etapa 5: O Ciclo de Desenvolvimento

Agora que vimos um pino funcionar para garantir que todos funcionem.20led_Zig-Zag.bseEste código anexado deve acender cada um dos 20 LEDS em um padrão de zigue-zague. Você notará que depois que cada pino acende, eu uso "DIRS = 0" para transformar todos os pinos de volta em entradas. Se você alterar os OUTS sem desligar os pinos de saída, você pode obter alguns "fantasmas" onde um led que não deveria estar aceso pode piscar entre os ciclos. Se você alterar a variável W1 no início deste código para "W1 = 1" aqui haverá apenas uma pausa de 1 milissegundo entre cada piscar de LED. Isso causará um efeito de persistência da visão (POV) que fará com que pareça que todos os LEDs estão acesos. Isso tem o efeito de tornar os LEDs mais escuros, mas é a essência de como exibiremos os caracteres nesta matriz. 20led_Interpreter_Proto.bse. Nesse ponto, decidi que precisava desenvolver algum tipo de código de interpretador para transformar as combinações malucas necessárias para iluminar o LEDs em um padrão utilizável. Este arquivo é minha primeira tentativa. Você verá que na parte inferior do arquivo os caracteres são armazenados em quatro linhas de um binário de 5 dígitos. Cada linha é lida, analisada e uma sub-rotina é chamada cada vez que um led precisa ser aceso. Este código funciona alternando entre os numerais 1-0. Se você tentar executá-lo, observe que ele é afetado por uma taxa de atualização muito lenta, fazendo com que os caracteres pisquem devagar demais para serem reconhecidos. Este código é ruim por vários motivos. Em primeiro lugar, cinco dígitos do binário ocupam tanto espaço na EEPROM quanto 8 dígitos do binário, pois todas as informações são armazenadas em grupos de quatro bits. Em segundo lugar, o SELECT CASE usado para decidir qual pino precisa ser aceso requer 20 casos. O BS2 é limitado a 16 casos por operação SELECT. Isso significa que tive que contornar essa limitação com uma instrução IF-THEN-ELSE. Deve haver uma maneira melhor. Depois de algumas horas coçando a cabeça, descobri.

Etapa 6: Um melhor intérprete

Cada linha da nossa matriz é composta por 4 LEDs, cada um pode estar ligado ou desligado. O BS2 armazena informações em sua EEPROM em grupos de quatro bits. Essa correlação deve tornar as coisas muito mais fáceis para nós. Além desse fato, quatro bits correspondem aos números decimais 0-15 para um total de 16 possibilidades. Isso torna ou SELECCIONAR CASO muito mais fácil. Aqui está o numeral 7 conforme armazenado na EEPROM: '7% 1111,% 1001,% 0010,% 0100,% 0100, cada linha tem um equivalente decimal de 0-15, portanto, lemos um linha da memória e alimente-a diretamente para a função SELECIONAR CASO. Isso significa que a matriz binária legível por humanos usada para fazer cada caractere (1 = led aceso, 0 = led apagado) é a chave para o intérprete. Para usar o mesmo SELECT CASE para cada uma das 5 linhas, usei outro select case para definir DIRS e OUTS como variáveis. Eu li primeiro em cada uma das cinco linhas do personagem as variáveis ROW1-ROW5. O programa principal então chama a sub-rotina para exibir o caractere. Esta sub-rotina pega a primeira linha e atribui as quatro combinações OUTS possíveis à variável outp1-outp4 e as duas combinações DIRS possíveis a direc1 e direc2. Os LEDs piscam, o contador de linhas é incrementado e o mesmo processo é executado para cada uma das outras quatro linhas. Isso é muito mais rápido do que o primeiro programa de intérprete. Dito isso, ainda há cintilação perceptível. Dê uma olhada no vídeo, a câmera faz a cintilação parecer muito pior, mas essa é a ideia. Portar esse conceito para um chip muito mais rápido, como um picMicro ou um chip AVR, permitiria a exibição desses caracteres sem uma oscilação perceptível.

Etapa 7: para onde ir a partir daqui

Eu não tenho um moinho cnc ou suprimentos de gravação para fazer placas de circuito, então não irei fazer a fiação deste projeto. Se você tem uma usina e tem interesse em colaborar para seguir em frente daqui, me mande uma mensagem. Eu ficaria feliz em pagar pelos materiais e frete ainda mais feliz em mostrar um produto acabado para este projeto.

Outras possibilidades: 1. Transfira para outro chip. Este projeto de matriz pode ser usado com qualquer chip que tenha 5 pinos de i / o disponíveis com capacidade tri-state (pinos que podem ser altos, baixos ou de entrada (alta impedância)). 2. Usando um chip mais rápido (talvez AVR ou picMicro), você pode aumentar a escala. Com um chip de 20 pinos, você pode usar 14 pinos para fazer o charlieplex de uma tela 8x22 e usar os pinos restantes para receber comandos seriais de um computador ou outro controlador. Use mais três chips de 20 pinos e você pode ter uma tela de rolagem de 8x88 para um total de 11 caracteres de uma vez (dependendo da largura de cada caractere, é claro). Boa sorte se divirta!

Recomendado: