quinta-feira, 25 de março de 2010

LED Scope com R8C/1A


Bem meus caros visitantes, eu estava precisando de um scope light para medir algumas coisas em campo e tive a idéia de montar um protótipo simplificado ... ou um Draft de um Scope usando uma matriz de leds e um R8C/1A ... deu certo... apesar de ter ainda que fazer um monte de ajustes ...
Bom aí vai um passo-a-passo do brinquedo:

Primeiro selecionamos os LEDs de 3mm, como eu não tinha 100 leds de uma cor só eu misturei verdes e vermelhos....


Começando a soldagem dos componentes...



Notem a forma de amarração da matriz de leds pelo lado de traz ...


Aqui a matriz já quase completa...


A matriz completa ...


Soldando um soquete e um 4017 para chavear as colunas....


Conferindo as pontes e as ligações em busca de imperfeições ...



Fixando a placa do R8C/1A na placa da matriz de leds...



Fazendo as primeiras ligações para os Positivos dos Leds, ligando do 4017 para os transistores, que estão ligados a 5V...


Uma Visão dos transistores... Usei o já famoso BC548B ... tem de penca na gaveta! ;-)


Feitas todas as ligações dos pinos do 4017 para os transistores, ligamos também as linhas do 5V e do GND...


E finalmente a ligação das linhas negativas da Matriz para os pinos correspondentes do R8C/1A ...
Com esta configuração, nível lógico 0 acende o led e nível lógico 1 apaga o mesmo...


Ligando agora o fio amarelo que faz o clock do R8C para o 4017...




Tudo ligado ... pronto ... conectando o E8 para fazermos o programa ...



Primeiro ligando todos os leds... tiveram 2 que falharam e foram substituidos ...


E agora o programa rodando com um audio na entrada AD do R8C ...


Vejam também o vídeo ...


E por fim... segue o código fonte:

==========================
#include "sfr_r81b.h"

void main(void);

char sample[10];

void initializeCPU(void) {
int t;
asm("FCLR I");                           //Interrupt disable
prc0=1;                                  //Protect off
//**************************************
// CPU Clock Setting
//**************************************
//Note: Include asm("nop")for oscillator's stabilization period after clock setting is done.
//User may set on-chip oscillator to off when Main Clock is selected.(cm14=1)
cm05=0;cm13=1;cm14=0;                    //Main Clock selected(cm0 bit 5, cm1 bit 3 and 4, ocd bit 2)
for(t=0; t<10; t++);
cm15=1;                                  //High Drive Capacity selected(CM1 bit 5)
ocd2=0;                                  //Main Clock selected(ocd bit 2)
cm16=0;cm17=0;cm06=0;                    //No division selected(cm0 bit 6,cm1 bit 6 and 7)
prc0=0;                                  //Protect on
asm("FSET I");           //Interrupt enabled
}

void initializeIO(void) {
// Column OUT LEDs
pd3_4 = 1;
pd3_3 = 1;
pd1_0 = 1;
pd1_1 = 1;
pd1_2 = 1;
pd1_4 = 1;
pd1_5 = 1;
pd1_6 = 1;
pd1_7 = 1;
pd4_5 = 1;
// Setting Initial Logic levels
p3_4 = 0;
p3_3 = 0;
p1_0 = 0;
p1_1 = 0;
p1_2 = 0;
p1_4 = 0;
p1_5 = 0;
p1_6 = 0;
p1_7 = 0;
p4_5 = 0;
// Clock for 4017
pd3_5 = 1;
}

void initializeAD(void) {
//**************************************
// ADC Setting
//**************************************
//When using the repeat mode, use the undivided XIN clock as the CPU clock
//Note:For 8-bit resolution, when conversion finished, read AD result at AD register(00C0H).
//Note:For 10-bit resolution, when conversion finished, read AD result at AD register(00C0H,00C1H).
//Set AN11 pin to input port direction
vcut=1;adgsel0=1;ch0=1;ch1=1;ch2=1;      //Port P1 group: AN11 is selected(adcon0 bit 0-3)
md=0;                                    //One-shot mode selected(adcon0 bit 3)
cks1=0; cks0=0;                          //f4 selected(adcon1 bit 4 and adcon0 bit 7)
bits=1;                                  //10-bit mode selected(adcon1 bit 3)
smp=1;                                   //With sample and hold selected(adcon2 bit 0)
adst=1;                                  //A/D conversion starts(adcon0 bit 6)
adic=0x00;                               //Set interrupt piority level 0(adic)
}

void SetAmplitude(char amplitude) {
p3_4 = 1;
p3_3 = 1;
p1_0 = 1;
p1_1 = 1;
p1_2 = 1;
p1_4 = 1;
p1_5 = 1;
p1_6 = 1;
p1_7 = 1;
p4_5 = 1;
switch (amplitude) {
case 0: p3_4 = 0; break;
case 1: p3_3 = 0; break;
case 2: p1_0 = 0; break;
case 3: p1_1 = 0; break;
case 4: p1_2 = 0; break;
case 5: p1_4 = 0; break;
case 6: p1_5 = 0; break;
case 7: p1_6 = 0; break;
case 8: p1_7 = 0; break;
case 9: p4_5 = 0; break;
}
}

void Wait(void) {
int t;
int t2;
for(t2=0; t2<1; t2++) {
for(t=0; t<1; t++) {
asm("nop");
}
}
}

void ClockPulse(void) {
p3_5 = 0;
Wait();
p3_5 = 1;
Wait();
p3_5 = 0;
}

void AddSample(char samp) {
int t;
for(t=1;t<=9;t++) {
sample[t-1]=sample[t];
}
sample[9]=samp;
}

void RenderScreen(void) {
int t;
for(t=0;t<=9;t++) {
SetAmplitude(sample[t]);
ClockPulse();
}
}

void main(void) {
int t=0;
int pulseWidth=80;
int pulseCount=0;
initializeCPU();
initializeIO();
initializeAD();
adst=1;
for(;;) {
adst=1;
while(adst==1);
t=(9*ad)/128;
if(pulseCount==pulseWidth) {
AddSample(t);
pulseCount=0;
}
pulseCount++;
RenderScreen();
}
}

==========================

terça-feira, 23 de março de 2010

Apple IIe como terminal Lixux






Todos sabem que eu acho linux um saco, e toda a ladainha que deixa os defensores de código aberto e toda essa palhaçada de GNU, GPB, PQP não me sobe na cabeça. Já fui LINUXEIRO de carteirinha... hoje sou Microsoft até a medula! Tenho minhas razões... mas deixa isso pra lá!

Quero deixar bem claro que este post é mais pelo Apple IIe, de passagem o melhor computador que eu já tive, em pé de quase igualdade com os lindos MSX, Apple IIgs e TRS-80 Model III da Radio Shack.


O cidadão deste site denominado DataSwamp fez um trabalho de gente e botou um Apzinho pra falar serial com um lixux gentoo, detalhe para o cartão 80 colunas e outras cositas masss...

Vai lá: http://www.dataswamp.net/apple2eserialterm/

Esta notícia eu lí no BrikoGeek, só que eu acho que os caras não entenderam muito bem o que houve, lá eles falaram que o lixux foi instalado no Apzinho...

Vale perder um tempo vendo o que o cara fez! muito bom trabalho!

Olha o vídeo da prova do crime!

segunda-feira, 22 de março de 2010

Making Of - Chute a Gol - Parte 1

Caros amigos interneteiros e principalmente Reneseiros (nossa essa doeu! André vai querer me matar!)... Vou postar algumas fotos do Making Of do trabalhao chute a Gol que estou fazendo para um cliente que ainda não posso dizer... na parte dois eu poderei dizer pois o produto já estará lançado !

Este daí é o protótipo funcional, foi feito pequeno para poder ser transportado!


Este é o lado do curcuito, note a placa do R8C/1A, chaveando os Leds a resposta dos sensores IR.


Trabalho e conceito aprovados pelo cliente, começam a chegar as primeiras peças para produção: Serão 15 tablados:

Olha os Leds aí:









Chegaram também as placas do R8C/1A nestas fotos só sairam 14!



Chegaram também os adaptadores USB-Serial ...


Alguns Sensores IR prontos para serem montados nas plaquinhas ...


Algumas plaquinhas sendo montadas, aplica fluxo, solda, aplica fluxo, solda, aplica fluxo, solda, aplica fluxo, solda, aplica fluxo, solda, aplica fluxo, solda ...


Algumas placas somente o led encaixado/soldado ...


Outras placas com led / sensor  encaixados e soldados ...


Bancada de trabalho ...


e finalmente a tarefa concluída, 130 sensores prontinhos para serem usados!


Aparencia final do sensor ...




Enjoy !!!