Página 1 de 1

Como montar um L.C.D.para seu BrazilFW

MensagemEnviado: Qui Dez 27, 2007 10:20 pm
por reginaldo
Título Original: Como montar um L.C.D.para seu BrazilFW

Autor: Marcelo - Brazil

Revisado em 17/06/2008


Como montar um L.C.D.para seu BrazilFW.
Pegue os softwares e seus links para download no final desta página.

Neste Tutorial você terá tudo o que é necessário para entender, montar e rodar um LCD para o BRAZILFW.

Com um display de cristal liquido no seu BFW, vc terá em tempo real informações como, velocidade de download, upload, carga no processador
uso de memória e até as horas !

Como segunda opção, o lcd4linux também foi disponibilizado, mas na minha opinião, apesar de mais ativo, o lcdstats é mais útil e funcional.

*** Alerta ***

Tenha certesa que você pode lidar com circuitos eletrônicos.
Eu não sou responsável por danos em seu computador ou L.C.D.
Todas as ligações descritas aqui foram testadas.
Entenda que este produto deve ser instalado por um profissional.


1) Escolha seu LCD: (De preferência um compatível com HD44780).
Exemplos de L.C.D.:
Imagem
Imagem

2) Use esta pinagem como referência:

Imagem

Preste atenção redobrada na pinagem do conector da impressora.
(Veja a numeração dos pinos dentro do plástico)
Imagem

3) Placa de Circuito Impresso (Exemplo).

Imagem

4) Use estas ligações (RASA) para um LCD (2x16, 2x20, 4x16, 4x20):

Imagem

5) Use estas ligações (RASA) para dois LCDs: (dois 2x16 ou dois 4x20)

Imagem

6) Use estas ligações (RASA) para três LCDs: (* Não testado ainda*)

Imagem

7) Use estas ligações para controle digital do backlight (Usando o comando --> \033\[b (Backlight LIGA/DESLIGA)

Imagem

8 ) Primeira imagem no LCD = energia e fiação corretos.

Imagem

9) LCD Na bancada e num servidor BFW.

Imagem
Imagem

10) Alternativas.


Se você não possuir um potenciômetro de 100 ohms, pode-se usar um resistor de 50 ohms será necessário na linha positiva +5v.
(Isso previne contra super aquecimento, porque os LEDs do backlight trabalham por volta de +4,2 volts).
Se você não possuir um potenciômetro de 10k para o controle de contraste , coloque este terminal no terra,
assim funcionará no contraste máximo, não é o ideal, mas poderá ser visualizado.
Imagem

11) Outros exemplos : Referência de cores dos fios de força e o LCD funcionando como "Analisador de Espectro" no WinAmp.

Imagem
Imagem

12) Softwares (Sobre o lcd4linux, veja mais abaixo)


Este novo sysinfo.tgz inclui modificações do "Marcio" (MPG, obrigado!) e vários acertos/modificações pelo Claudio, (muito obrigado amigo !).

Instale e divirta-se :)

Instalação:

1) Copie o sysinfo.tgz, lcdstats.tgz e lcd.tgz para seu disquete do BrazilFW, e reboot,

2) Ou boot por um disco de dos e copie estes arquivos para sua hd e reboot,

3) Ou se você não deseja reiniciar, entre no console e faça o seguinte:

Código: Selecionar todos
cd /

Código: Selecionar todos
mount /dev/fd0 /mnt

Código: Selecionar todos
tar zxvf /mnt/sysinfo.tgz

Código: Selecionar todos
tar zxvf /mnt/lcdstats.tgz

Código: Selecionar todos
tar zxvf /mnt/lcd.tgz

Código: Selecionar todos
umount /mnt

Código: Selecionar todos
/etc/rc.d/pkgs/rc.sysinfo



Importante: Se o seu LCD não for do padrão 2x16 ( 2 linhas com 16 caracteres cada) será necessário alterar o arquivo mod.lcd a fim de que os textos sejam exibidos corretamente num LCD fora destes parametros.

Faça o seguinte: com todos os add-ons instalados execute:

Código: Selecionar todos
edit etc/rc.d/pkgs/mod.lcd


Você terá a seguinte tela:

Código: Selecionar todos
#Instaling Parallel Port Support
insmod /lib/parport/parport.o
insmod /lib/parport/parport_pc.o

#Installing LCD Support

#You must enable only one of the tree modules below
#If you want to save some space you can delete the unused modules
#from the folder /lib/lcd

#insmod /lib/lcd/lcd.o       io=0x378 disp_rows=2 disp_cols=16 # Standard Wiring
insmod /lib/lcd/lcd-rasa.o io=0x378 disp_rows=2 disp_cols=16 # Rasa Wiring
#insmod /lib/lcd/lcd-8bit.o io=0x378 disp_rows=2 disp_cols=16 # 8 Bits Wiring

#You can change the parameters above if your lcd display
#is not a 2X16 caracters or is not pluged to the first parallel port



Altere no arquivo a quantidade de linhas (rows) e colunas (cols)
Caso for usado uma outra porta paralela, mude o endereço 378.


4) No Webadmin veja Bandwidth Usage Statistics, gráficos bonitos sobre o volume de tráfego em tempo real e histórico de até 24 horas.

Imagem

13) Lcdstats & Bwmon rodando

Imagem
Imagem


Como você pode ver, seu link é mostrado no LCD como DOWN no caso de queda ou o valor de "downstream" no momento.
Configuração original: D = Download, U= Upload, Men = Uso de memória em %
e Ld = Carga no processador ( 1.00 = 100%, 0.10 = 10%)


14) Linux Scripts


Você pode mudar estas informações editando o lcdstats.tgz


No console digite :
Código: Selecionar todos
 edit /usr/bin/lcdstats

O Script do Lcdstats é mostrado abaixo.

#!/bin/sh

while [ 1 ] ; do
BW_IN=DOWN
BW_OUT=DOWN

LOADAVG_1MIN=`cat /proc/loadavg | cut -f 1 -d ' '`
MEMTOTAL=`free | grep Mem | sed s/\ */#/g | cut -f 3 -d '#'`
MEMUSED=`free | grep Mem | sed s/\ */#/g | cut -f 4 -d '#'`
PERCUSED=$((MEMUSED*100/MEMTOTAL))

. /tmp/netsubsys.state
if [ "$INET_UP" = "UP" ] ; then
if [ -e /tmp/bwmon.log ] ; then
bwstats > /tmp/bwstats.log
if [ $? = 0 ] ; then
if [ -e /tmp/bwstats.log ] ; then
. /tmp/bwstats.log
BW_IN=$BW_CUR_DOWN_K
BW_OUT=$BW_CUR_UP_K
fi
fi
fi
fi

# And send it to the LCD
echo -ne "\033[H\033[J" > /dev/lcd
echo -ne "D:${BW_IN} U:${BW_OUT}\r\n" > /dev/lcd
echo -ne "Mem:$PERCUSED% Ld:$LOADAVG_1MIN" > /dev/lcd

# Wait a bit
sleep 3
done




15) Lcd4linux

Imagem

Sim , ajustamos o lcd4linux para o BrazilFW.
Esta parte está em construção, mas pegue o lcd4linux.tgz
aqui:
lcd4linx.tgz


*** Observação, o lcd4linux não pode ser instalado junto com o lcdstats. ***


O gif abaixo dá a exata imagem de como é ativo este software.
Imagem

Abaixo algumas imagens do Lcd4linux rodando.
Imagem
Imagem

Abaixo o script de configuração original de criação de "icones" do lcd4linux
Display HD44780 {
Driver 'HD44780'
Model 'generic'
Port '/dev/parport0'
Size '16x2'
Icons 5
Wire {
RW 'AUTOFD'
RS 'INIT'
ENABLE 'STROBE'
ENABLE2 'GND'
GPO 'GND'
}
}

Widget OS {
class 'Text'
expression '*** '.uname('sysname').' '.uname('release').' ***'
width 20
align 'M'
speed 100
update tick
}

Widget CPU {
class 'Text'
expression uname('machine')
prefix 'CPU '
width 9
align 'L'
update tick
}


Widget RAM {
class 'Text'
expression meminfo('MemTotal')/1024
postfix ' MB RAM'
width 11
precision 0
align 'R'
update tick
}

Widget Busy {
class 'Text'
expression proc_stat::cpu('busy', 500)
prefix 'Busy'
postfix '%'
width 10
precision 1
align 'R'
update tick
}

Widget BusyBar {
class 'Bar'
expression proc_stat::cpu('busy', 500)
expression2 proc_stat::cpu('system', 500)
length 10
direction 'E'
update tack
}

Widget Load {
class 'Text'
expression loadavg(1)
prefix 'Load'
postfix loadavg(1)>1.0?'!':' '
width 10
precision 1
align 'R'
update tick
}

Widget LoadBar {
class 'Bar'
expression loadavg(1)
max 2.0
length 10
direction 'E'
update tack
}


Widget Disk {
class 'Text'
# disk.[rw]blk return blocks, we assume a blocksize of 512
# to get the number in kB/s we would do blk*512/1024, which is blk/2
# expression (proc_stat::disk('.*', 'rblk', 500)+proc_stat::disk('.*', 'wblk', 500))/2
# with kernel 2.6, disk_io disappeared from /proc/stat but moved to /proc/diskstat
# therefore you have to use another function called 'diskstats':
expression diskstats('hd.', 'read_sectors', 500) + diskstats('hd.', 'write_sectors', 500)
prefix 'disk'
postfix ' '
width 10
precision 0
align 'R'
update tick
}

Widget DiskBar {
class 'Bar'
#expression proc_stat::disk('.*', 'rblk', 500)
#expression2 proc_stat::disk('.*', 'wblk', 500)
# for kernel 2.6:
expression diskstats('hd.', 'read_sectors', 500)
expression2 diskstats('hd.', 'write_sectors', 500)
length 14
direction 'E'
update tack
}

Widget Eth0 {
class 'Text'
expression (netdev('eth0', 'Rx_bytes', 500)+netdev('eth0', 'Tx_bytes', 500))/1024
prefix 'eth0'
postfix ' '
width 10
precision 0
align 'R'
update tick
}

Widget Eth0Bar {
class 'Bar'
expression netdev('eth0', 'Rx_bytes', 500)
expression2 netdev('eth0', 'Tx_bytes', 500)
length 14
direction 'E'
update tack
}

Widget PPP {
class 'Text'
expression (ppp('Rx:0', 500)+ppp('Tx:0', 500))
prefix 'PPP'
width 9
precision 0
align 'R'
update tick
}

Widget Temp {
class 'Text'
expression i2c_sensors('temp_input3')*1.0324-67
prefix 'Temp'
width 9
precision 1
align 'R'
update tick
}

Widget TempBar {
class 'Bar'
expression i2c_sensors('temp_input3')*1.0324-67
min 40
max 80
length 10
direction 'E'
update tack
}


Widget Uptime {
class 'Text'
expression uptime('%d days %H:%M:%S')
width 20
align 'R'
prefix 'Up '
update 1000
}


Widget BarTest {
class 'Bar'
# test::bar(barno,maxval,startval,delta) - move a test value between 0 and max.
# delta= step to change value by each time it's read.
# barno - ten different test bar values can be set up, with barno=0..9
# if delta=0, just returns the value of bar n instead of changing it.
expression test::bar(0,30,25,1)
expression2 test::bar(1,30,0,1)
length 6
max 50
direction 'E'
update 10
}

Widget BarTestVal {
class 'Text'
expression test::bar(0,100,50,0)
prefix 'Test '
width 9
update 200
}

Widget LightningTest {
class 'icon'
speed 500
visible test::onoff(0)
bitmap {
row1 '...***'
row2 '..***.'
row3 '.***..'
row4 '.****.'
row5 '..**..'
row6 '.**...'
row7 '**....'
row8 '*.....'
}
}


# Icons

Widget Heartbeat {
class 'Icon'
speed 800
Bitmap {
Row1 '.....|.....'
Row2 '.*.*.|.*.*.'
Row3 '*****|*.*.*'
Row4 '*****|*...*'
Row5 '.***.|.*.*.'
Row6 '.***.|.*.*.'
Row7 '..*..|..*..'
Row8 '.....|.....'
}
}

Widget EKG {
class 'Icon'
speed 50
Bitmap {
Row1 '.....|.....|.....|.....|.....|.....|.....|.....'
Row2 '.....|....*|...*.|..*..|.*...|*....|.....|.....'
Row3 '.....|....*|...*.|..*..|.*...|*....|.....|.....'
Row4 '.....|....*|...**|..**.|.**..|**...|*....|.....'
Row5 '.....|....*|...**|..**.|.**..|**...|*....|.....'
Row6 '.....|....*|...*.|..*.*|.*.*.|*.*..|.*...|*....'
Row7 '*****|*****|****.|***..|**..*|*..**|..***|.****'
Row8 '.....|.....|.....|.....|.....|.....|.....|.....'
}
}
Widget Karo {
class 'Icon'
speed 200
Bitmap {
Row1 '.....|.....|.....|.....|..*..|.....|.....|.....'
Row2 '.....|.....|.....|..*..|.*.*.|..*..|.....|.....'
Row3 '.....|.....|..*..|.*.*.|*...*|.*.*.|..*..|.....'
Row4 '.....|..*..|.*.*.|*...*|.....|*...*|.*.*.|..*..'
Row5 '.....|.....|..*..|.*.*.|*...*|.*.*.|..*..|.....'
Row6 '.....|.....|.....|..*..|.*.*.|..*..|.....|.....'
Row7 '.....|.....|.....|.....|..*..|.....|.....|.....'
Row8 '.....|.....|.....|.....|.....|.....|.....|.....'
}
}
Widget Heart {
class 'Icon'
speed 250
Bitmap {
Row1 '.....|.....|.....|.....|.....|.....'
Row2 '.*.*.|.....|.*.*.|.....|.....|.....'
Row3 '*****|.*.*.|*****|.*.*.|.*.*.|.*.*.'
Row4 '*****|.***.|*****|.***.|.***.|.***.'
Row5 '.***.|.***.|.***.|.***.|.***.|.***.'
Row6 '.***.|..*..|.***.|..*..|..*..|..*..'
Row7 '..*..|.....|..*..|.....|.....|.....'
Row8 '.....|.....|.....|.....|.....|.....'
}
}
Widget Blob {
class 'Icon'
speed 250
Bitmap {
Row1 '.....|.....|.....'
Row2 '.....|.....|.***.'
Row3 '.....|.***.|*...*'
Row4 '..*..|.*.*.|*...*'
Row5 '.....|.***.|*...*'
Row6 '.....|.....|.***.'
Row7 '.....|.....|.....'
Row8 '.....|.....|.....'
}
}
Widget Wave {
class 'Icon'
speed 100
Bitmap {
Row1 '..**.|.**..|**...|*....|.....|.....|.....|.....|....*|...**'
Row2 '.*..*|*..*.|..*..|.*...|*....|.....|.....|....*|...*.|..*..'
Row3 '*....|....*|...*.|..*..|.*...|*....|....*|...*.|..*..|.*...'
Row4 '*....|....*|...*.|..*..|.*...|*....|....*|...*.|..*..|.*...'
Row5 '*....|....*|...*.|..*..|.*...|*....|....*|...*.|..*..|.*...'
Row6 '.....|.....|....*|...*.|..*..|.*..*|*..*.|..*..|.*...|*....'
Row7 '.....|.....|.....|....*|...**|..**.|.**..|**...|*....|.....'
Row8 '.....|.....|.....|.....|.....|.....|.....|.....|.....|.....'
}
}
Widget Squirrel {
class 'Icon'
speed 100
Bitmap {
Row1 '.....|.....|.....|.....|.....|.....'
Row2 '.....|.....|.....|.....|.....|.....'
Row3 '.....|.....|.....|.....|.....|.....'
Row4 '**...|.**..|..**.|...**|....*|.....'
Row5 '*****|*****|*****|*****|*****|*****'
Row6 '...**|..**.|.**..|**...|*....|.....'
Row7 '.....|.....|.....|.....|.....|.....'
Row8 '.....|.....|.....|.....|.....|.....'
}
}

Widget Lightning {
class 'icon'
speed 100
visible cpu('busy', 500)-50
bitmap {
row1 '...***'
row2 '..***.'
row3 '.***..'
row4 '.****.'
row5 '..**..'
row6 '.**...'
row7 '**....'
row8 '*.....'
}
}

Widget Rain {
class 'icon'
speed 200
bitmap {
row1 '...*.|.....|.....|.*...|....*|..*..|.....|*....'
row2 '*....|...*.|.....|.....|.*...|....*|..*..|.....'
row3 '.....|*....|...*.|.....|.....|.*...|....*|..*..'
row4 '..*..|.....|*....|...*.|.....|.....|.*...|....*'
row5 '....*|..*..|.....|*....|...*.|.....|.....|.*...'
row6 '.*...|....*|..*..|.....|*....|...*.|.....|.....'
row7 '.....|.*...|....*|..*..|.....|*....|...*.|.....'
row8 '.....|.....|.*...|....*|..*..|.....|*....|...*.'
}
}

Widget Test {
class 'Text'
expression '1234567890123456789012345678901234567890'
#expression '|'
width 40
}


Layout L16x2 {
Row1 {
Col1 'Busy'
Col11 'BusyBar'
}
# Row2 {
# Col1 'Disk'
# Col11 'DiskBar'
# Col11 'BarTest'
# }
Row2 {
Col1 'Heartbeat'
Col2 'EKG'
Col3 'Karo'
Col4 'Heart'
Col5 'Blob'
# Col6 'Wave'
# Col7 'Squirrel'
}
}

Display 'HD44780'

Layout 'L16x2'

Variables {
tick 500
tack 100
minute 60000
}


Tópico sobre scripts modificados para o lcdstats: Clique aqui

Tópico sobre scripts modificados para o lcd4linux; Clique aqui

Quer mostrar seu CASE BFW para o pessoal do fórum ?

Tópico de imagens de CASE MOD no BFW: Clique aqui

====================================================
Softwares: (click no nome do arquivo p/download)

lcdstats.tgz
lcd.tgz
sysinfo.tgz
lcd4linux.tgz

Cuidado, o Internet Explorer pode renomear .tgz para.tar, se acontecer, renomeie novamente para .tgz

Qualquer dúvida estou no fórum, Marcelo - Brazil

Título Original: Como montar um L.C.D.para seu BrazilFW

Autor: Marcelo - Brazil

Revisado em 17/06/2008