Want your own Fotopage?

|
|
Arao's FotoPage Eletrônica na bancada By: Arao Hayashida Filho
[Recommend this Fotopage] |
[Share this Fotopage]
| [Track this Fotopage]
|
|
[<< < [1] 2 3 4 > >>] [Archive]
|
|
|
|
| Sunday, 16-May-2010 04:11 |
Email | Share | | Bookmark |
|
De mudança
|
|
Bom pessoal, as postagens novas farei no blogspot, principalmente porquê dá mais liberdade de formatar o blog, não têm uns problemas como carregar fotos, o google analytics consegue me dar mais dados sobre os visitantes aqui, e postar lá é melhor e com muitas opções como a de seguidores e tudo mais que tem por aquelas bandas, o meu novo endereço para o blog é:
http://zorktronics.blogspot.com/
Vejo vocês lá, ainda estou arrumando a casa, e já tenho 4 posts novos!
|
|
|
|
|
|
| Wednesday, 12-May-2010 03:43 |
Email | Share | | Bookmark |
|
Osciloscópio Rigol DS1052E
|
|
Comprei esse osciloscópio da China, preço bom, depois que vi a desmontagem no eevblog vi que era muito bem feito e era possível chegar na taxa de amostragem anunciada.
http://www.eevblog.com/2009/10/12/eevblog-37-rigol-ds1052e-oscilloscope-teardown/
Na placa dá pra ver que tem um FPGA da Altera, um Cyclone III e um CPLD da Lattice, muito curioso o fato de também não ser um CPLD da Altera.
Também há uma SRAM muito rápida, 200MHz, 256k 36 bits, ou seja esta é a ram onde são armazenadas as amostras na hora de fazer o storage do sinal, como sempre o FPGA e o CPLD fazem a parte rápida da coisa enquanto a CPU faz a interface com o usuário e a lógica.
E a CPU não é qualquer porcaria não, um dsp da Analog Devices, Blackfin, que vai até 400MHz, com direito a SDRAM e alguma coisa me diz que ele roda um uclinux (já portado para o Blackfin).
O lcd dele é muito bom, a interface idêntica à dos digitais da Agilent baratos, tanto que é praticamente certeza de que um modelo de Agilent que eu trabalhei na verdade parece ser um osciloscópio Rigol remarcado (DSO3062), logo não é uma marca ruim.
http://circuitben.net/dso3000/index.php
http://www.home.agilent.com/agilent/product.jspx?cc=BR&lc=por&nid=-536902749.536905607&pageMode=OV
Nos testes, abaixo um sobre o Trigger, um circuito LC paralelo, L=10uH. C=15nF, com um 555 nesse circuito, a idéia é medir o valor desconhecido do indutor descobrindo a freqüência de ressonância, um teste para o trigger, já que a amplitude é muito baixa, passou muito bem pelo teste, o trigger atua em alguns mV apenas.
Outro teste foi utilizando um CXO de 46.6MHz ,como se pode ver, não há degraus entre as amostras, já que a taxa de amostragem é muito maior que os 46.6MHz, o amplificador vertical também corresponde ao esperado.
Mais um teste foi para ver como o trigger se comporta com um sinal digital (serial 300bps), tudo perfeito, me surpreendeu essa ótima performance!
Além de tudo isso você pode salvar as formas de onda num pendrive, na frente há uma USB, também há uma USB na parte de trás, onde se pode fazer também a visualização das formas de onda, além uma porta serial.
O osciloscópio além dos modos básicos XY, YT também tem um "canal" MATH, onde se faz FFT, soma, subtração e multiplicação dos canais. também é possível usar uma persistência virtual, como no caso do teste com a serial, e também há filtros digitais na entrada, incluindo um filtro de média móvel, tudo configurável pelo painel!
Além de tudo isso, ele também mostra valor pico a pico, pico, rms, overshoot, frequência, período... tudo sobre o seu sinal, sem precisar fazer uma conta nem contar quadradinhos na tela!
Sem contar que o esquema de cores da tela pode ser trocado também.
As pontas de provas são ótimas, qualidade bem acima das chinesas que se compra por aí nas lojinhas, com muitos anéis coloridos pra se distinguir qual ponta é qual cor na tela.
Os únicos problemas que eu consegui achar foi o fato de as pontas de prova usarem um gancho em forma de L, não em forma de J como era esperado, algumas vezes escapando do fio onde está sendo feita a medida..uma coisa que faltou aqui foi o encaixe para a kensington lock, prendi a minha de forma improvisada, um detalhe que faltou.
Comente, não custa nada!!!
|
|
|
|
|
|
| Wednesday, 5-May-2010 01:51 |
Email | Share | | Bookmark |
|
Consertando um cabo de programação AVRISP
|
|
Pra quem não sabe fazem mais de 4 anos que desenvolvo pojetos com microcontroladores AVR, já conhecia a Atmel há tempos, desde o primeiro microcontrolador que trabalhei, na época era um 8051, AT89S51, há mais de 10 anos atrás.
Esse cabo apesar da aparência externa ser idêntica ao AVRISP original da Atmel, é mais um produto xingling, da Sure electronics.
Quando chegou aqui até funcionou direitinho, mas fiz a besteira de mandar atualizar o firmware dele pela versão mais nova, daí o negócio morreu aqui, mas era um risco a se correr, já que a versão mais nova suportava mais dispositivos..
Encostei esse cabo e continuei os trabalhos com um velho cabo paralelo STK200 que montei, passaram mais de 6 meses até que abri ele pra dar uma olhada..
O AVRISP nada mais é que um PL2303, conversor usb-serial, um ATMEGA8535 que está com o ISP conectado diretamente à saída do cabo e um ATTINY2313 (omitido nesse cabo baratinho), que pelo que tudo indica é o responsável por fazer o update do ATMEGA8535.
No flat de saída estão quase todos os sinais de isp do ATMEGA8535, só falta o RESET, mas ele é uma ilha escrita 2 na placa, há ilhas 1 a 4, a 4 é o GND da placa.
Ligando o cabo paralelo no isp+reset e a alimentação da usb dá pra se programar o microcontrolador fácil..só que cadê o firmware?
A Atmel assim como a microchip (microshit?) coloca o arquivo na distribuição da sua ide, no caso aqui o AVRStudio, lá no meio dos programas está o arquivo STK500.ebn.
Vi esse ebn e pensei, "deve ser bin", programei no uc e nada, baixei até uma versão antiga aqui e nada, sem resposta..
Depois de quebrar a cabeça descobri que ebn não é bin, mas sim um formato de arquivo estranho, mas para convertê-lo para algo mais "normal" descobri o programinha ebn2hex.exe ,baixei o tal e converti para hex, gravei isso na flash do AVR e pronto, funcionou!
O interessante era que em vários fóruns se falava para gravar o stk500.ebn, mas em só um deles diziam para utilizar o tal conversor.
Bom, até a próxima, enquanto isso um artigo meu vai sair na revista Saber Eletrônica, envie seu feedback para mim ao ler o artigo!
|
|
|
|
|
|
| Thursday, 11-Mar-2010 21:56 |
Email | Share | | Bookmark |
|
Conserto do Analizador lógico PM3632 (arium ML4100)
|
|
Depois de ligar o Analizador Logico (AL) na tomada e um estouro dos grandes (bem fedido por sinal), pela cara da situação, algum capacitor estourou,
Abri o AL e logo vejo um capacitor de tântalo 10uF 16V torrado, que tinha um monte aqui no "estoque" trocando o tal tudo se solucionou rápido!
Essas placas do AL são muito interessantes, um 8085 da toshiba comanda tudo, enquanto as partes rápidas de aquisição do dado são feitas por lógica 74F, onde o 8085 muda os parâmetros de trigger, clock interno e etc usando alguns 8155 na placa...
O negócio é rapido, aquisição de até 100MHz em 4 bits ou até 25MHz em 32 bits, pra esse tipo de especificação, em 1985 só lógica 74F ou ECL..
O AL já está no seu 23 aniversario, troquei a maioria dos eletrolíticos dele, só esse de tântalo que escapou, como era de se esperar depois de tanto tempo ele iria falhar logo.
Fotos em resolução melhor em:
http://img379.imageshack.us/gal.php?g=dsc01415m.jpg
Manual do AL:
http://www.4shared.com/file/227129631/e9a261cd/ml4100_manual.html
|
|
|
|
|
|
| Thursday, 17-Dec-2009 22:54 |
Email | Share | | Bookmark |
|
Inicada uma nova tgimboej
|
 |
|
Parte do conteúdo da Brasil_II
|
|
|
Como estavam sobrando algumas coisas interessantes aqui, resolvi juntar algumas delas e iniciar uma nova tgimboeg.
O nome dela é Brasil II, e o link é: http://www.tgimboej.org/Box_Code:_Brazil_II
A caixa foi enviada para o Maurício Júnior ,de Catanduva-SP, onde será recebida dentro de alguns dias.
A foto (desfocada pra diabo) mostra somente alguma coisa do conteúdo da caixa, abaixo listo mais alguns ítens adicionados por mim:
-Muitas peças (placas) e uma hp 620lx inteira
-Teclado de 200lx
-Placa de impressora E210 Lixmark
-Bateria de notebook compaq precário 1200
-Tiras resistores SMD
-3 tiras de igbt IRG4RC10SD (novos)
-2 AT89s51 no pedaço de régua (novinhos)
-2 XC9536XL no pedaço de régua (novinhos)
-Soquetes PLCC44
-Cartão PCMCIA de modem 9600bps com XJACK (mega raridade)
-Muitos diodos, separados em saquinhos
-Motorzinho de passo bipolar
-Uns eletrolíticos
-Bateria de 620lx
-Saquinho com saquinhos dentro, pra ajudar quem vai ser o próximo a receber a caixa
E outras coisas que não já lembro mais...
Tudo isso foi embalado numa caixa da ~(incrivel, adorável, amável) Farnell junto com um envelope velho que tinha aqui, contendo a lista de assinaturas e foi enviado por PAC para o destinatário.
Enfim, espero receber alguma TGIMBOEJ também, quem sabe...
|
|
|
|
|
|
| Friday, 6-Nov-2009 02:50 |
Email | Share | | Bookmark |
|
Projetinho de fim de semana: Reloginho VFD
|
|
Comprei no ebay uns displays VFD IV-8, resolvi fazer um reloginho com eles, eles foram escolhidos porque trabalhar.
Daí foi começar a desenhar a placa e esquema enquanto a encomenda não chegava da Rússia..
O resultado do esquema e placas está nas fotos 1 e 2.
A idéia era usar um AT89s52 e depois de umas horinhas de trabalho o negócio funcionou muito bem!
O programa ocupa só 1kB da Flash e foi compilado no SDCC, deixo o código para quem quiser fazer o seu próprio reloginho!
Poutz e não é que essa nhaca de fotopage detonou a minha identação!
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <at89x52.h>
#define Desabilita_INT IE=0x0
#define Habilita_INT IE=0x1
// Prototipos
void inicializa_timer2(void) ;
void enviacharvfd (unsigned char disp1,unsigned char disp2, unsigned char disp3, unsigned char disp4);
void delay_ms(unsigned char ms);
// Variaveis globais
unsigned char ms100=0;
//ISR's
void Timer2_ISR(void) interrupt 5
{
ms100++;
TF2 = 0; // Apago o flag de interrupcao
}
void main(void)
{
unsigned char segundos, min1, min2, hor1, hor2;
segundos=0;
ms100=0;
min1=0;
min2=0;
hor1=0;
hor2=0;
enviacharvfd(hor2, hor1, min2, min1);
inicializa_timer2();
while (1)
{
P2_7=1;
if (P2_7==0)
{
min1++;
enviacharvfd(hor2, hor1, min2, min1);
delay_ms(30);
}
//ms100++;
if (ms100>9)
{
ms100=0;
segundos++;
enviacharvfd(hor2, hor1, min2, min1);
}
if (segundos>59)
{
segundos=0;
min1++;
}
if (min1>9)
{
min1=0;
min2++;
}
if (min2>5)
{
hor1++;
min2=0;
}
if (hor1>9)
{
hor2++;
hor1=0;
}
if (hor2==2 && hor1>3)
{
hor1=0;
hor2=0;
}
}
}
// Modo 0 com auto reload
void inicializa_timer2(void)
{
T2MOD &= 0xFC; // T2OE=0;DCEN=1;
T2MOD |= 0x01;
EXF2=0; //apago o flag
TCLK=0;RCLK=0; // desabilita o BRG
EXEN2=0; //ignora T2ex
TH2=0x7D; //Valores de inicializacao: 100ms (4MHz) - descontos das intrucoes executadas no ISR
TL2=0xC8;
RCAP2H=0x7D; // Valores do reload
RCAP2L=0xC8;
C_T2=0; // Modo timer
CP_RL2=0; // Reload
EA=1;
ET2=1; // Habilita int do timer 2
TR2=1; // Habilito contagem do timer 2
}
// Disp1,2=horas Disp2,3=minutos
void enviacharvfd (unsigned char disp1,unsigned char disp2, unsigned char disp3, unsigned char disp4)
{
// Horas 2
//if (disp1==0x00) P0=0xA0;
if (disp1==0x00) P0=0xFF; // Não mostra nada no primeiro dígito se 0, ex 02:59 -> 2:59
if (disp1==0x01) P0=0xF3;
if (disp1==0x02) P0=0xC4;
if (disp1==0x03) P0=0xC0;
if (disp1==0x04) P0=0x93;
if (disp1==0x05) P0=0x81;
if (disp1==0x06) P0=0x88;
if (disp1==0x07) P0=0xE3;
if (disp1==0x08) P0=0x80;
if (disp1==0x09) P0=0x83;
// Horas 1
if (disp2==0x00) P1=0x82;
if (disp2==0x01) P1=0xE7;
if (disp2==0x02) P1=0x91;
if (disp2==0x03) P1=0xC1;
if (disp2==0x04) P1=0xE4;
if (disp2==0x05) P1=0xC8;
if (disp2==0x06) P1=0x88;
if (disp2==0x07) P1=0xE3;
if (disp2==0x08) P1=0x80;
if (disp2==0x09) P1=0xE0;
// Minutos 2
if (disp3==0x00) P3=0x82;
if (disp3==0x01) P3=0xE7;
if (disp3==0x02) P3=0x91;
if (disp3==0x03) P3=0xC1;
if (disp3==0x04) P3=0xE4;
if (disp3==0x05) P3=0xC8;
if (disp3==0x06) P3=0x88;
if (disp3==0x07) P3=0xE3;
if (disp3==0x08) P3=0x80;
if (disp3==0x09) P3=0xE0;
// Minutos 1
if (disp4==0x00) P2=0x82;
if (disp4==0x01) P2=0xE7;
if (disp4==0x02) P2=0x91;
if (disp4==0x03) P2=0xC1;
if (disp4==0x04) P2=0xE4;
if (disp4==0x05) P2=0xC8;
if (disp4==0x06) P2=0x88;
if (disp4==0x07) P2=0xE3;
if (disp4==0x08) P2=0x80;
if (disp4==0x09) P2=0xE0;
}
void delay_ms(unsigned char ms) // delay pra lá de aproximado!
{
unsigned char i;
while (ms> 1)
{
ms--;
for (i=0; i < 200; i++)//era 200
{
_asm
nop // o DJNZ é 2 Machine Cycles (12x4 clocks) ,NOP é 1 Machine Cycle
nop // conferir as contas e adicionar/reduzir a enrolacao da rotina ao se fazer a mudanca de cristal!
nop
_endasm; // cada machine cycle é 12 clocks!!! (que lerdeza) .. 12 MHz
}
}
}
|
|
|
|
|
|
| Sunday, 12-Jul-2009 04:35 |
Email | Share | | Bookmark |
|
STM32
|
 |
|
Nem bêbado tira foto pior!!!
|
|
|
Terminando mais uma semana com outro post, agora tratando sobre um microcontrolador no core ARM cortex-M3, vindo de uma recente aquisição de uma placa de desenvolvimento adquirida na fururelec.
O fabricante da placa mandou junto com a mesma um cabo serial de 3 fios e um cd lotado de exemplos, que podem ser baixados do site da st, a primeira idéia era ter um contato inicial com o microcontrolador compilando os exemplos.
O primeiro exemplo foi o de fazer os leds piscar...muito idiota, pra deixar o negócio mais emocionante a idéia era fazer algumas funções pra lidar com o famoso lcd feito a partir do KS0070B, mas agora em 4 bits, o sistema em 8 bits já tinha feito com sucesso anteriormente.
Após errar ligação do LCD uma vez e quebrar um pouco a cabeça como de costume cheguei nas seguintes funções com testes indicando o total funcionamento:
void Inicializa_LCD(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 |
GPIO_Pin_1 |
GPIO_Pin_2 |
GPIO_Pin_3 |
GPIO_Pin_4 |
GPIO_Pin_5 |
GPIO_Pin_6 |
GPIO_Pin_7;
GPIO_Init(GPIOC, &GPIO_InitStructure);
DelaymS(400);
Envia_comando_LCD(0x02); // 4 bits mode
Envia_comando_LCD(0x02); // 4 bits mode
Envia_comando_LCD(0x08); // 5x7 2 lines
DelaymS(5);
Envia_comando_LCD(0x00);
Envia_comando_LCD(0x0F); // Display on/cursor on part 1
DelaymS(5);
Envia_comando_LCD(0x00); // Display on/cursor on part 2
Envia_comando_LCD(0x01); // Moving direction part 1
DelaymS(5);
Envia_comando_LCD(0x08); // Moving direction part 2
Envia_comando_LCD(0x00); // Moving direction part 1
clrLCD();
}
void Envia_comando_LCD(u8 comando)
{
u16 GPIOC_saida_atual,GPIOC_saida_proxima;
comando=comando &0x0F;
GPIO_WriteBit(GPIOC,GPIO_Pin_6,Bit_RESET); // RS=0, command mode
GPIO_WriteBit(GPIOC,GPIO_Pin_7,Bit_RESET); // E=0
GPIOC_saida_atual=GPIO_ReadOutputData(GPIOC) & 0xFF00;
GPIOC_saida_proxima=GPIOC_saida_atual | (u16)comando;
GPIO_Write(GPIOC,GPIOC_saida_proxima);
GPIO_WriteBit(GPIOC,GPIO_Pin_7,Bit_SET); // E=1
DelayuS(500);
GPIO_WriteBit(GPIOC,GPIO_Pin_7,Bit_RESET); // E=0
}
void Envia_dado_LCD(u8 dado)
{
u16 GPIOC_saida_atual,GPIOC_saida_proxima;
u8 dadol, dadoh;
dadol=dado;
dado=dado&0xF0;
dadoh=dado/16;
dadoh=dadoh & 0x0F;
dadol=dadol & 0x0F;
GPIO_WriteBit(GPIOC,GPIO_Pin_7,Bit_RESET); // E=0
GPIO_WriteBit(GPIOC,GPIO_Pin_6,Bit_SET); // RS=1
DelayuS(500);
GPIOC_saida_atual=GPIO_ReadOutputData(GPIOC) & 0xFFF0;
GPIOC_saida_proxima=GPIOC_saida_atual | (u16)dadoh;
GPIO_Write(GPIOC,GPIOC_saida_proxima);
GPIO_WriteBit(GPIOC,GPIO_Pin_7,Bit_SET); // E=1
DelayuS(500);
GPIO_WriteBit(GPIOC,GPIO_Pin_7,Bit_RESET); // E=0
GPIOC_saida_atual=GPIO_ReadOutputData(GPIOC) & 0xFFF0;
GPIOC_saida_proxima=GPIOC_saida_atual | (u16)dadol;
GPIO_Write(GPIOC,GPIOC_saida_proxima);
GPIO_WriteBit(GPIOC,GPIO_Pin_7,Bit_SET); // E=1
DelayuS(500);
GPIO_WriteBit(GPIOC,GPIO_Pin_7,Bit_RESET); // E=0
DelayuS(500);
}
u8 addressLCD;
void putcharLCD(u8 entrada)
{
u8 terminated;
terminated=0x0;
if (addressLCD<15)
{
addressLCD++;
terminated=0xFF;
}
if ((addressLCD==15) && (terminated==0x0))
{
Envia_comando_LCD(0x0C); // DDRAM 0x40 address part 1
Envia_comando_LCD(0x00); // DDRAM 0x40 address part 2
addressLCD=64;
terminated=0xFF;
}
if ((addressLCD>63) && (terminated==0x0)) // 64
{
addressLCD++;
}
if (addressLCD>79)
{
Envia_comando_LCD(0x08); // DDRAM 0x0 address part 1
Envia_comando_LCD(0x00); // DDRAM 0x0 address part 2
addressLCD=0;
}
Envia_dado_LCD(entrada);
}
Vale ressaltar que estas funções foram feitas em cima do exeplo do led, e por exemplo os tipos u8, u16 são definidos de lá.
Depois acabei o dia testando e modificando um exemplo utilizando a USB do micro com o exemplo da virtual com port, que cria uma porta serial virtual, a idéia nesse caso foi utilizar o terminal e o display pra exibir os caracteres....
Enfim, mais um pouco de obstáculos e considerações erradas antes de se concluir essa modificação.
A idéia é conseguir amanhã trabalhar com a comunicação no sentido de transferir dados pro pc usando a usb e aquele mesmo exemplo...mais trabalho e um pouco de aprendizado pela frente!
|
|
|
|
|
|
| Sunday, 5-Jul-2009 02:36 |
Email | Share | | Bookmark |
|
Mau contato no conector do k550i
|
|
Outro dia estava ouvindo música no celular aqui e o som estava ficando estranho certas horas, como se o pino comum do fone estivesse com mau contato.
Como sobrou um tempinho aqui vi melhor ,o fone estava ok, o adaptador também, olhando no celular o conector estava se movendo mais do que deveria, achei muito estranho isso e resolvi abrir aqui.
Depois de baixar o manual de serviço vi que era tranqulo abrir, coloquei alguns passos importantíssimos pra abrir o celular e poder ajudar quem não trabalha com esse modelo.
Depois de abrir vi um negócio muito estranho, os pinos responsáveis por prender o conector a placa, nao os de sinal, estavam soltos..
Como o problema era nos pinos de sinal comecei ressoldando eles, como fazia um bom tempo que eu não soldava ci smd e o fluxo meu acabou demorei um pouco, mas o que deu trabalho foram os pinos que suportam mecanicamente o conector, sem fluxo foi muito chato, várias tentativas antes de conseguir um bom resultado.
O mais estranho foi que não vi solda nenhuma nesses furos...a não ser que na fabricação escorreu pra dentro da via...
Depois foi só fechar ele, o único detalhe foi que eu pra variar esqueci de colocar um parafuso lá de dentro (pra variar é sempre aquele do pior lugar possível), mas enfim, posso conferir 1000 vezes que sempre sobra alguma coisa pra fora.
Fora isso o celular é muito bom, já tive 4 antes desse e na minha opinião esse é o melhor celular que já tive a respeito de qualidade do material, outros dois eram v220, c975 e me deram muita canseira, fiquei com um f3 por uns tempos e achei muito bom, o outro era da época do tdma ainda e nem conta hehehe
A idéia desse conector é muito boa, já que ele nunca vai dar mal contato como aqueles que se utilizam de força de mola nos contatos do celular, como os p2, que acabam ficando ruins com o uso.
|
|
|
|
|
|
| Friday, 3-Jul-2009 23:22 |
Email | Share | | Bookmark |
|
Teste com o picoblaze
|
|
Outro dia achei esse interessante "soft-processor" no site da xilinx, o melhor ainda é que é disponibilizado de graça os fontes tanto em VHDL como em Verilog.
Vendo os manuais que achei, e o core dele vi que tinha até uma versão mais compacta feita para cpld, olhando os fontes não foi difícil entender o funcionamento, é realmente bem compacto.
Baixei o assembler dele disponibilizado pela xilinx e uma ide bem simples, daí estava tranquilo aqui outro dia e resolvi testar ele, imprimi o set de instruções e pensei num programa bem idiota pra fazer alguns testes.
Como já tinha feito e testado a interface do display resolvi fazer um somador em loop infinito que enviasse periodicamente o resultado da soma para o display, abaixo o fonte:
CONSTANT portaled,01
CONSTANT portabotao,02
CONSTANT contagem,FF
NAMEREG S0,contador1
NAMEREG S1,contador2
NAMEREG S2,contador3
NAMEREG S3,estado_s
ADDRESS 000
DISABLE INTERRUPT
LOAD estado_s, 00
ini:
LOAD contador1, 00
LOAD contador2, 00
LOAD contador3, 00
ini_cont:
ADD contador1, 01
COMPARE contador1, contagem
JUMP Z, fim_cont
contad2:
ADD contador2, 01
contad3: ADD contador3, 01
COMPARE contador3, FF
JUMP NZ, contad3
COMPARE contador2, FF
JUMP NZ, contad2
JUMP ini_cont
fim_cont:
ADD estado_s, 05
OUTPUT estado_s, portaled
JUMP ini
fim:
JUMP fim
Chutei 24 bits de contagem aqui, porque o picoblaze está rodando num clock
de 40MHz, foi o que eu usei pra piscar uns leds outro dia aqui quando eu testava o kit
novo do spartan 3A que me chegou aqui.
Esse código meu ficou meio ruim, até porque faz muito tempo que eu só estou trabalhando com C, mas enfim, funcionou.
A única surpresa que eu tive aqui foi quanto ao fato de que a minha ide utilizada ,o pblazeide utiliza mnemonicos diferentes dos utilizados pelo assembler da xilinx, no pblazeide a instrução COMPARE vira COMP, no conjunto de instruções tem COMP entre parenteses, só depois em outro documento vi que existe essa diferença de nomenclatura.
Isso causou uma perda de tempo para compilar o programinha, mas depois
consegui ver que era esse o problema.
É tudo muito tranquilo, o próprio assembler gera um arquivo VHDL com a ROM do processador, sem erros...
O processador é muito util, apesar de ter no máximo 1kB endereçável, o que já é mais que suficiente pra muitas aplicações, ainda mais com toda a lógica disponível de um FPGA para poder fazer determinadas funções que seriam feitas por software em um microcontrolador normal.
Outra coisa mais legal ainda foi o fato de que a área ocupada, considerando o core para interface do display, rom e processador foi menos de 2% do FPGA instalado aqui, o que dá um pouco menos que o meu projeto de interface serial publicado no opencores.
Vendo uma matéria que saiu na revista da xilinx há uns tempos, sobre o projeto de um painel publicitário, lá diz que foram usados mais de 1000 desses picoblaze.
http://www.xilinx.com/publications/xcellonline/xcell_51/xc_pdf/xc_es-tsquare51.pdf
E realmente parece uma boa escolha quando não precisamos de muita velocidade e quando simplesmente não dá tempo de se trabalhar em VHDL, já que fazer um programa é muitas vezes mais simples que projetar um hardware específico para se fazer tal função.
Bom fim de semana!
|
|
|
|
|
|
| Wednesday, 17-Jun-2009 23:43 |
Email | Share | | Bookmark |
|
Placa nova para display
|
|
Na hora de testar o que faço em VHDL e é bom ter alguma coisa pra ver o que está acontecendo com determinados sinais, às vezes alguns leds é pouco...daí a idéia de usar displays.
Tinha um monte de tipos de displays aqui nas sucatas, até uns de 14 segmentos, fiquei perdido aqui de tanta opção...o escolhido foi o com maior número de dígitos, já que é interessante ter mais informações pra ver...
Achei aqui um motorola PT550 e uns dpc650 na sucata, abri o maior e o display estava soqueteado...como pode, um display soqueteado num celular..ocupa o dobro de espaço...
Pra variar datasheet desse display nem em sonho, tive que pegar o multímetro analógico aqui e ver como estava ordenado os pinos, estavam os 7 dígitos multiplexados e os segmentos em anodo comum.
Depois de pensar aqui resolvi colocar um ULN2003 nos comuns dos digitos, como eram 7,cabia perfeito, também foram colocados alguns optoacopladores pra ajudar a controlar cargas que precisam de isolação.
A placa que desenhei fiz com trilhas bem largas pra prevenir problemas na transferencia de toner, o desenho foi feito no eagle, um programa fácil de mexer e que tem muitas bibliotecas.
O percloreto estava muito fraco, demorou mais de 4 horas o processo de corrosão, que na falta de tempo foi feito a noite num frio de doer...
Depois de umas horas de trabalho saiu o componente VHDL que faz o controle do display, pegando o dado de 28 bits e escrevendo nele por varredura...ou seja, vc acha que a imagem está parada mas...
Interessante que como a varredura desses celulares era muito rápida eu nunca percebi que o acionamento dos dígitos não era estático...
Enfim...um bom uso pras sucatas aqui de casa!
Um abraço pros que acompanham o blog aqui!
|
|
|
|
|
|
|
[<< < [1] 2 3 4 > >>] [Archive]
|
|
 |
|