SdevLab – Hardware | Considere a substituição da bateria?!

Fala Galera!

Depois de um tempinho de inatividade devido a muitas correrias de final de curso, vou dar uma dica de hardware!

Considere a substituição da bateria!

Se o seu computador (laptop) de repente ligou com um X em cima do medidor de bateria, e apresentou a frase -> “Considere a substituição da bateria” e “Há um problema com a bateria, portanto o computador pode desligar inesperadamente”, pode ser que nem tudo esteja perdido.

Antes de partir para a solução mais fácil, que seria comprar outra, eu fiz uma pequena pesquisa e vi que alguem conseguiu arrumar fazendo o procedimento abaixo, que eu também testei e funcionou perfeitamente!

Segue os passos:

Retire o laptop da tomada
Deixe a bateria descarregar completamente
Ligue novamente na tomada e deixe carregar 100% de novo

Fazendo estes 3 passos, a minha voltou a funcionar que é uma beleza! Só pra constar aqui, meu laptop é um Dell Vostro 1520, mas creio que este procedimento vale pra todos.

Até a próxima!
😉

SdevLab – Projeto | Controle de estufa utilizando arquitetura PC e C/C++

Fala Galera!

Segue neste post um projeto que fiz para uma matéria da facul (Arquitetura de Computadores II). Este projeto usava um computador com o Linux Kurumin instalado para gerenciar uma estufa.

Controle de estufa utilizando arquitetura PC e C/C++

Para entender melhor segue o relatório final do projeto:

Introdução
Este projeto simula o monitoramento de uma estufa, para isso faz uso de três chaves, que simulam três sensores. Um sensor de temperatura, um sensor de umidade e um sensor de água no solo.


Condições do Projeto

• Se a chave geral SW estiver desligada, manter a sinalização, a bomba, o irrigador e
o ventilador desligados;
• O sistema só entra em estado de operação se a chave 1 estiver acionada. Então
quando SW for acionada o sistema entra em estado de monitoramento, aguardando a mudança de
estado de algum sensor;
• Se o sensor de temperatura for ativado, significa que a temperatura está acima do
normal e o ventilador deve ser ligado;
• Se o sensor de umidade for ativado significa que a umidade do ar esta muito baixa, e
a bomba (borrifador) deve ser ligada;
• Se o sensor de água no solo for ativado, significa que a quantidade de água no solo é
insuficiente, e o irrigador deve ser ligado e permanecer ligado por um tempo.


Especificação do Projeto

Hardware: Sistema baseado no microcomputador (PC).

Máquina de estado


Código

#include <stdio.h>
#include <sys/io.h>
#define ON 0XFF
#define OFF 0X00
#define PORT_IN 0X379
#define PORT_OUT 0X378
unsigned char sw1,s3,s2,s1;
unsigned int estado;
void entrada(void)
{
ioperm(PORT_IN,1,1);
if((inb(PORT_IN)& 0x80) == 0X80) sw1 = ON;
else sw1 = OFF;
if((inb(PORT_IN)& 0XB0) == 0XB0) s3 = ON;
else s3 = OFF;
if((inb(PORT_IN)& 0XA0)== 0XA0) s2 = ON;
else s2 = OFF;
if((inb(PORT_IN)& 0x90) == 0X90) s1 = ON;
else s1 = OFF;
ioperm(PORT_IN,1,0);
}
void desliga_tudo(void)
{
ioperm(PORT_OUT,1,1);
outb(0x00,PORT_OUT);
ioperm(PORT_OUT,1,0);
}
//sinalizador
void liga_lampada(void)
{
ioperm(PORT_OUT,1,1);
outb(0x80,PORT_OUT);
ioperm(PORT_OUT,1,0);
}
//sensor de temperatura
void trata_s1(void)
{
ioperm(PORT_OUT,1,1);
outb(0x81,PORT_OUT);
ioperm(PORT_OUT,1,0);
}
//sensor de umidade
void trata_s2(void)
{
ioperm(PORT_OUT,1,1);
outb(0x82,PORT_OUT);
ioperm(PORT_OUT,1,0);
}
//sensor de agua no solo
void trata_s3(void)
{
ioperm(PORT_OUT,1,1);
outb(0x84,PORT_OUT);
ioperm(PORT_OUT,1,0);
}
void maquina_estado(void)
{
switch(estado)
{
case 1: //verfica sw1
desliga_tudo();
if(sw1 == ON) estado = 2;
break;
case 2:
liga_lampada();
ioperm(PORT_IN,1,1);
if((inb(PORT_IN)& 0X90) == 0X90) estado = 3;
ioperm(PORT_IN,1,0);
ioperm(PORT_IN,1,1);
if((inb(PORT_IN)& 0XA0) == 0XA0) estado = 4;
ioperm(PORT_IN,1,0);
ioperm(PORT_IN,1,1);
if((inb(PORT_IN)& 0XB0) == 0XB0) estado = 5;
ioperm(PORT_IN,1,0);
ioperm(PORT_IN,1,1);
if(sw1 == OFF) estado = 1;
ioperm(PORT_IN,1,0);
break;
case 3:
trata_s1();
if(sw1 == OFF) estado = 1;
else
estado = 2;
break;
case 4:
trata_s2();
if(sw1 == OFF) estado = 1;
else
estado = 2;
break;
case 5:
trata_s3();
if(sw1 == OFF) estado = 1;
else
estado = 2;
break;
}
}
int main(void)
{
estado=1;
while(1)
{
entrada();
maquina_estado();
}
return 0;
}

Este código, como vocês podem perceber foi escrito em C/C++. Para o projeto funcionar a gente usou um simulador que tinha chaves e leds que iriam simular os componentes da estufa (bomba, ventilador, …). É coisa simples na verdade, a idéia era aprender a usar a porta paralela do PC pra gerenciar um sistema.
É lógico que exitem formas mais simples e corretas para se fazer o gerenciamento da tal estufa, mas a idéia do projeto foi atingida!

Finalizando, para o projeto funcionar compile ele normalmente no terminal:

gcc -o projeto projeto.gcc (ou projeto.c)
sudo ./projeto

Fazendo isto o linux vai compilar e rodar o programinha, que vai ficar lendo a saida paralela e mudando seu comportamento conforme a entrada de dados.

att
sanoj

😉

SdevLab – Projeto | Controle de semáforos utilizando assembly e microcontrolador 8951

Eae galera!

Este post na verdade é um trabalho que eu fiz na faculdade. Eu precisava desenvolver alguma coisa em assembly para rodar em um microcontrolador. Como eu estava meio sem ideia eu resolvi fazer o que um amigo sugeriu, um semáforo de um cruzamento.

Controle de semáforos utilizando assembly e microcontrolador 8951

Segue uns pedaços do descritivo do projeto para explicar melhor a ideia do que estamos prestes a começar a desenvolver.

Finalidade
A finalidade do projeto é obter um sistema de controle de trânsito, cujas características devem atender as especificações apresentadas no decorrer deste documento.

Funcionalidade
Controle automático dos semáforos de um cruzamento de um condomínio fechado (não apresenta as mesmas condições de uma rua normal, que deve mudar o tempo de mudança de sinal dependendo dos horários do dia), que deverá manter o sinal fechado de uma rua por alguns segundos e abrir para outra (pode variar de acordo com as necessidades do cliente), fechando o sinal da primeira assim que isto acontecer. O sistema deverá ainda dar o alerta que o sinal vai mudar 10 segundos antes disso acontecer (sinal amarelo).

Fluxograma

Código

;---------------------------------------------------------------------
;PROJETO SEMAFORO
;---------------------------------------------------------------------
ORG 0000H
LJMP INIC
ORG 0003H
LJMP INTE0
ORG 0013H
LJMP INTE1
MOV SP,30 ;iniciando a pilha
;----------------------------------------------------------------
; habilitando os bits do registrador de interrupcoes
;----------------------------------------------------------------
INIC: MOV IE,#85H ;habilitando as interrupcoes int0 e int1
MOV TCON,#00H ;configurando registrador de interrupções
MOV P1,#00H ;limpando a entrada (chava de on e led)
OFF: MOV P2,#00H ;Limpando a porta p2 (desligando tudo)
JB P1.2, PADRAO ;se a chave estiver ligada, vai para a rotina padrão
LJMP OFF
;----------------------------------------------------------------------
; iniciando a rotina padrao do semaforo
;----------------------------------------------------------------------
PADRAO: SETB P1.1 ;Ligando a luz de on (indica que o sistema está funcionando)
SETB P2.7 ;ligando a luz vermelha do sinal 1
SETB P2.2 ;ligando a luz verde do sinal 2
LCALL DELAY
CLR P2.7 ;desligando a luz vermelha do sinal 1
SETB P2.6 ;ligando a luz amarela do sinal 1
CLR P2.2 ;desligando a luz verde do sinal 2
SETB P2.3 ;ligando a luz amarela do sinal 2
LCALL DELAY
CLR P2.6 ;desligando a luz amarela do sinal 1
SETB P2.5 ;ligando a luz verde do sinal 1
CLR P2.3 ;desligando a luz amarela do sinal 2
SETB P2.4 ;ligando a luz vermelha do sinal 2
LCALL DELAY
CLR P2.5 ;desligando a luz verde do sinal 1
SETB P2.6 ;ligando a luz amarela do sinal 1
CLR P2.4 ;desligando a luz vermelha do sinal 2
SETB P2.3 ;ligando a luz amarela do sinal 2
LCALL DELAY
CLR P2.3 ;desligando a luz amarela do sinal 2
CLR P2.6 ;desligando a luz amarela do sinal 1
AJMP PADRAO ;voltando para o inicio da rotina normal

;———————————————————————————————————————–
; entrando na rotina de loop
;———————————————————————————————————————–
DELAY: MOV B,#08H ;carrega o registrador B com 8
VOLTA: LCALL DELAY250 ;chama o delay de 250ms
DJNZ B,VOLTA ;decrementa o B
RET ;retorna
DELAY250: PUSH B ;salva o B de 8 na pilha
MOV B,#0FAH ;carrega B com 250ms
VOLTA1: LCALL DELAY1MS ;chama o delay de 1ms
DJNZ B,VOLTA1 ;decrementa o B de 250ms
POP B ;retira o B da pilha
RET ;retorna
DELAY1MS: PUSH B ;coloca o B de 250ms na pilha
MOV B,14H ;ESTE E O DELAY DE 1MS
FIM: DJNZ B,FIM ;decrementa o B de 1ms
POP B
RET
;———————————————————————————————————————-
;saindo da rotina de loop
;———————————————————————————————————————-
; iniciando a rotina de interrupcao 1
; se sensor1 = 1 e sensor 2 = 0
;———————————————————————————————————————
INTE0:
SETB P2.7 ;ligando a luz vermelha do sinal 1
CLR P2.6 ;desligando a luz amarela do sinal 1
CLR P2.5 ;desligando a luz verde do sinal 1
CLR P2.4 ;desligando a luz vermelha do sinal 2
CLR P2.3 ;desligando a luz amarela do sinal 2
SETB P2.2 ;ligando a luz verde do sinal 2
LCALL DELAY
CLR P2.7 ;desligando a luz vermelha do sinal 1
SETB P2.6 ;ligando a luz amarela do sinal 1
SETB P2.3 ;ligando a luz amarela do sinal 2
CLR P2.2 ;desligando a luz verde do sinal 2
LCALL DELAY
CLR P2.6 ;desligando a luz amarela do sinal 1
SETB P2.5 ;ligando a luz verde do sinal 1
SETB P2.4 ;ligando a luz vermelha do sinal 2
CLR P2.3 ;desligando a luz amarela do sinal 2
LCALL DELAY
RET ;voltando para o inicio da rotina normal
;———————————————————————————————————————
; iniciando a rotina de interrupcao 2
; se sensor1 = 0 e sensor 2 = 1
;———————————————————————————————————————
INTE1:
CLR P2.7 ;desligando a luz vermelha do sinal 1
CLR P2.6 ;desligando a luz amarela do sinal 1
SETB P2.5 ;ligando a luz verde do sinal 1
SETB P2.4 ;ligando a luz vermelha do sinal 2
CLR P2.3 ;desligando a luz amarela do sinal 2
CLR P2.2 ;desligando a luz verde do sinal 2
LCALL DELAY
SETB P2.6 ;ligando a luz amarela do sinal 1
CLR P2.5 ;desligando a luz verde do sinal 1
CLR P2.4 ;desligando a luz vermelha do sinal 2
SETB P2.3 ;ligando a luz amarela do sinal 2
LCALL DELAY
CLR P2.6 ;desligando a luz amarela do sinal 1
SETB P2.7 ;ligando a luz vermelha do sinal 1
SETB P2.2 ;ligando a luz verde do sinal 2
CLR P2.3 ;desligando a luz amarela do sinal 2
LCALL DELAY
RET ;voltando para o inicio da rotina normal

END

;———————————————————————————————————————
; Fim do Programa
;———————————————————————————————————————

Esquema Elétrico

O projeto é bastante simples. Usei 6 leds, um microcontrolador 8951, alguns resistores e transistores. A maioria do projeto está no post, se não me engano, só ficou faltando os cálculos das resistências.

Dica: Se for utilizar um led diferente do vermelho padrão, refaça os cálculos, porque a corrente que os leds amarelos e verdes utilizam são diferentes!

Até a próxima!
xD