#REPOST: MAME, Multiple Arcade Machine Emulator

Aqui estão as fotos do MAME construído em 2011. Como houve muitas dúvidas no projeto, fica disponível para perguntas nos comentários.
Corpo todo em MDF 18mm.
 Monitor 4:3 17″ SAMSUNG. Lembre-se!! A maioria dos games da década de ’90 eram 4:3.

Os controles foram feitos pela porta paralela. Em 2012 substituído por interface USB.
Painel de LED para decoração (ainda não foi encontrado um top marquee “decente”).
1º teste utilizando MAXIMUS ARCADE.
 2° teste, já com o top marquee funcionando.
Aos interessados fiquem a vontade para perguntar! Tenho alguns esquemas e links disponíveis!
Anúncios

Como simular microcontrolador no Proteus?

Iremos utilizar um microcontrolador PIC12F675 para simulação. Iremos criar um programa em linguagem C (pelo compilador MIKROC PRO, versão gratuita da MIKROe) que pisca um led de 1 em 1 segundo.

Primeiro passo é montar o circuito no Proteus.
Feito o circuito iremos compilar o programa no MIKROC. Para fazer esta compilação, faça o download do software aqui .
Após instalado o software, abra-o e crie um novo projeto.

Clique em Next.

Nesta tela podemos alterar o Nome do projeto (Project Name), a pasta onde iremos salvar o projeto (Project Folder), O tipo de microcontrolador que estamos utilizando (Device Name, neste caso procure pelo PIC12F675) e também a velocidade do clock (Device Clock) sempre em MHz (neste caso manter 8MHz).

Clique em Next>Next>Finish.

Vá até Project>Edit project.

Altere os fusíveis e os deixe exatamente igual a figura.

Escreva o código.

Compile o Projeto.

Ao compilar o projeto, vá até a pasta de destino e procure pelo arquivo com extensão: .hex, afim de verificar se ocorreu a compilação.

Voltando ao Proteus com o circuito já montado, clique duas vezes em cima do microcontrolador. Irá aparecer a janela abaixo:

Em Processor Clock Frequency estará setado o valor de 4MHz (este valor é padrão do Proteus), devemos mudar para 8MHz pois esta é a velocidade do clock de nosso micrcontrolador (8MHz foi estipulado quando criamos um novo projeto no MIKROC).

Em Program File, clique na pasta à direita e então na janela que abriu, selecione o arquivo .hex gerado pelo MIKROC.

Agora é só apertar o Play!!

NOTA: Os 5V em GP3 é por causa do MCLR(Master Clear Reset). Para resetar o circuito aplicar 0V no mesmo pino e voltar para 5V.

Baixe aqui o circuito montado no Proteus e o projeto compilado no MIKROC

IEEE754 Visual C#

O padrão IEEE754 define algumas regras de normalização a serem seguidas nas operações e representações de números binários com ponto flutuante. Antes disso, cada fabricante de computadores e outros dispositivos, possuía um formato de representação diferente.
Neste formato podemos escrever valores entre -1E-126 até 1E127. Alguns fabricantes de sensores adotam esta representação para enviar dados de sensores. Para transformar esta cadeia de bytes em um número válido, utilizando o C# criaremos uma função para isto.
Considere que você esta recebendo esta sequencia de bytes em uma string representada em ascii, formato hexadecimal:
Console.Write(“Digite os 8 bytes (padrão ieee 754): “);
string strByte = Console.ReadLine();
uint num = uint.Parse(strByte,System.Globalization.NumberStyles.AllowHexSpecifier);
byte[] floatVals = BitConverter.GetBytes(num);

float f = BitConverter.ToSingle(floatVals, 0);

Console.Write(“Equivalente em float, single precision: ” + f);

Console.ReadKey();

O projeto esta disponível neste link (Visual Studio 10).
Digite os 8 bytes em hexadecimal e pressione Enter. O resultado aparecerá na tela.

Protocolo I2C

Protocolo I²C ou IIC

O protocolo I²C foi desenvolvido pela Philips em 1996, e veio para ficar pois este permite uma boa modelarização das comunicações, baixando o tempo e custo de desenvolvimento de dispositivos, assim como uma grande flexibilidade no funcionamento, consumindo pouca corrente, e sendo bastante imune a ruídos.

Deixemos-nos de teorias pois não é o objectivo deste artigo, existe muita informação sobre este barramento e por isso vamos tentar apenas criar aqui um local de fácil compreensão e consulta do protocolo.

Começamos então pelo modo Standard, ou Single Master.

O barramento é conhecido por utilizar apenas dois fios para comunicação entre vários dispositivos electrónicos (128 slaves creio eu devido à estrutura que iremos analisar mais à frente.), mas contudo este necessita de 4 fios, dois de alimentação, e os dois fios de dados.

Estes são então:

  • VCC (normalmente +5V)
  • GND (massa comum entre os equipamentos, muito importante para que quando os dispositivos queiram dizer zero, o consigam dizer de forma perceptível para todas as outras máquinas)
  • SDA (Serial DAta Line)
  • SCL (Serial CLock)

No esquema a baixo pode-se facilmente identificar a estrutura da rede:

R –> pullup opcional, raramente são mencionadas mas devem de se usar entre 4KOhm a 10KOhm.

Assim, como na maioria dos barramentos, meter um fio a VCC (quer este seja a 5V ou até mesmo a 3,3V, pois testei a utilização de 3,3V para este barramento e funciona sem quaisquer problemas, mesmo com um master a comunicar e a ler entre 0V~5V) significa mete-lo a HIGH, ou a estado binário 1 (um).

E como é de calcular, se os estados são binários, serão o oposto ou seja meter um fio a GND (0V quer para um circuito entre 0V~5V quer para entre 0V~3,3V) significa mete-lo a LOW, ou estado 0 (zero).

Assim passo a mostrar o esquema de comunicações:

Passando então a explicar:

  • Start bit é gerado pelo Master
  • 7 bits de endereço são dados pelo master para dizer com que slave pretende comunicar
  • 1 bit indica se existe intenção de escrita ou de leitura nesse dispositivo
  • slave após se ter identificado com aquele endereço diz que tomou conhecimento
  • 1 byte (8 bits) de dados são mandados para o slave ou pelo salve dependendo da intenção anterior de R/W
  • após cada thread de dados um ack bit é dado pelo outro dispositivo para dizer que recebeu o byte inteiro
  • a tarefa repete-se desde o ponto 5 até que seja dado o stop bit representado por um Fim no esquema

Bits de start e de stop:

Outras condições de estado:

  • SDA só pode variar com SCL a LOW, e quando SCL subir SDA tem que se manter estável até que SCL desça. Qualquer variação de SDA enquanto SCL esta a HIGH será interpretado como um START ou STOP bit.
  • O dispositivo que está endereçado naquele momento ou acaba de ficar endereçado deve de responder com um acknowledge bit após cada byte transmitido. O master gerará um SCL extra após cada byte, ao qual o slave deverá fazer pull down do SDA para que o master saiba que o byte foi bem recebido.

Comunicação serial entre dois Arduinos

Podemos precisar a qualquer momento nos comunicar com outros dispositivos, no caso outros Arduinos.

Comunicação serial por fio

Configurando os pinos RX/TX do Arduino por fio:

No Arduino emissor teremos um potenciometro, do qual é lido o valor e mandado via serial.

No receptor teremos um LED que irá mudar o seu brilho conforme o valor do potencimetro.

Faça agora as seguintes conexões:

TX_ARDUINO#1 – – – – RX_ARDUINO#2

RX_ARDUINO#2 – – – – TX_ARDUINO#1


NOTA: QUANDO FOR PASSAR O CÓDIGO PARA O ARDUINO, DESCONECTAR OS FIOS DE TX E RX DE AMBOS OS LADOS!

Código Emissor:

int analogValue5, val5;

void setup() {
// Habilita porta Serial
Serial.begin(19200);
}

void loop() {
// Le pino analogico 5
analogValue5 = analogRead(5);

// Mapeia os valores para 0 – 255
val5 = map(analogValue5, 0, 1023, 0, 255);

// envia o valor via serial em modo binário
Serial.println(val5, BYTE);

}

Código Receptor:

byte incomingByte;

void setup() {
// Habilita comunicação serial
Serial.begin(19200);

// declara pin 11 como output, este é o LED
pinMode (11, OUTPUT);
}

void loop() {

// Se há bytes livres vindo da porta serial
if (Serial.available()) {

// Seta o valor para a variavel ‘incomingByte’
incomingByte = Serial.read();

// Escreve o valor no pino 11
analogWrite(11, int(incomingByte));

}
}

C# e Arduino, programa básico

Download aplicação C#: http://ozhan.org/_dosyalar/icerik/C_Arduino_LedFading.zip
Código Arduino:

int Led = 13;
int PwmLed = 11;
int Csharp;
void setup() {
  Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
  pinMode(Led, OUTPUT);
}
void loop() {
  if (Serial.available() > 0) {
    Csharp = Serial.read();
    Serial.println(Csharp, DEC);
    analogWrite(PwmLed, Csharp);
  }
}

O que o programa faz?

image

O Arduino toma a decisão de acender ou não um LED a partir do protocolo vindo pela serial. O mesmo pode ter controle de brilho do LED alterando-se o PWM.

Aqui está um vídeo demonstração:

Controle de um LED no Arduino feito em C#, PC

Disponivel em: http://www.ozhan.org/index.php?kat_id=19#Arduino
Qualquer dúvida me mandem um e-mail.

Att, denadai.

Conectando Xbee ao Arduino

Xbee são módulos de rádio para efetuar comunicação serial entre dois pontos (ponto a ponto, ponto a multiponto e etc), conta com protocolo Zigbee e assim garante fidelidade na conexão. Estes são produzidos pela DIGI (antiga MaxStream) e possui duas versões a série 1 e 2. Série 1 e 2 não se comunicam entre si e ambas possuem modelos bem semelhantes:

Xbee 1mW, antena tipo fio, RSPMA ,UFL e chip. A distância de comunicação chega até 40m em ambientes fechados e 100m em ambientes abertos.

XbeePRO 50mW, antena tipo fio, RSPMA ,UFL e chip. A distância de comunicação chega até 300m em ambientes fechados e 1600m em ambientes abertos.
im1

Xbee 1mW

im2 
Xbee Shield para Arduino

O Xbee utiliza o protocolo ZigBee que este por sua vez utiliza como base o protocolo IEEE 802.15.4.

Utilizações:
Automação Residencial: Controle de Iluminação, Alarmes, Controle de Temperatura;
Automação Predial: Controle de Temperatura, Telemetria Elevadorista, Controle Elétrico;
Automação industrial: Telecontrole de Sensores, Terminais Inteligentes, Comunicação com Centrais.
Automação Comercial: Geradores de Senhas, Terminais Inteligentes, Software simultâneo;

Em nosso caso vamos criar uma conexão entre dois Xbee utilizando o Arduino e o PC.

Materiais Necessários:
2 Shield Xbee para Arduino;
2 Arduino (um deles sem o microcontrolador, cuidado ao retirar para não entortar os seus pinos);
2 Módulos Xbee;
1 Bateria 9V para alimentar o Arduino extra;
1 Caso USB (A-B) para conectar o Arduino ao PC;

Configuração Inicial
De fábrica cada módulo Xbee vem configurado com uma PANID (número que identifica a rede) de número 3332 e configurados com uma taxa de transmissão de 9600 baud, com dados de 8 bits sem paridade e 1 bit de parada.

Cada Xbee Shield tem um par de jumpers para definir se a comunicação serial se realiza pela porta USB ou pelao próprio Xbee. Como primeira tentativa vamos configura-lo para interagir com a porta USB, isso significa colocar os jumpers na posição externa dos pinos, na figura abaixo pode-se ver como ficaria.

im3 Configuração dos jumpers do shield

Podemos utilizar o programa HyperTerminal do Windows para começar a configurar o módulo Xbee. Outra alternativa seria usar o Serial Monitor que vem integrado com a IDE do Arduino ou o programa Bray++ Terminal.

O comando necessário para começar a programar o módulo é “+++”, ou seja três simbolos de soma consecutivos. Teclando-os devemos receber como resposta um “OK”.

im4Bray++ Terminal estabelecendo conexão com Xbee

Uma vez estabelecida a conexão só temos 5 segundos para interagir com o módulo. Depois deste tempo, o módulo regressa a seu estado nativo e para voltar a conexão deve redigitar “+++”.

Cada comando que mandamos ao Xbee deve ser precedido pelas letras AT (de AT Command = Comando AT)

A tabela de comandos mais usuais pode ser encontrado na página dedicada no site do Arduino.

Usaremos para conexão ao PC a placa Arduino sem o microcontrolador ATMEGA. A razão para isto é que desta maneira podemos diretamente interagir pelo USB com o módulo Xbee.

Para este exemplo proponho a seguinte configuração: uma PANID de 3332, um módulo com endereço ‘0’ e o outro com ‘1’. O módulo com endereço ‘0’ será o que  vai estar conectado ao PC e o módulo com endereço ‘1’ será o módulo remoto.

Para configurar o primeiro com a endereço ‘0’, 9600 baud, 8 bits, sem paridade, com 1 bit de parada e comunicação com o módulo de ID1 usamos os seguintes comandos:

ATID3332
DH0
DL1
MY0
BD3
WR
CN

As letras AT indicam ao Xbee que vamos lhe enviar comandos.
ID3332: Define PANID de 3332;
DH0: Define direção ‘1’, com quem o Xbee estará se comunicando;    
DL1: Define direção ‘1’, com quem o Xbee estará se comunicando; 
MY0: Define endereço ‘0’, próprio endereço;
BD3: Define velocidade em 9600 baud;
WR: Faz a gravação do módulo;
CN: Encerra conexão com o módulo;

Passo seguinte é conectar o segundo Xbee Shield ao Arduino sem microcontrolador. Configuramos da mesma maneira:
ID3332: Define PANID de 3332;
DH0: Define endereço ‘1’, com quem o Xbee estará se comunicando;    
DL1: Define endereço ‘1’, com quem o Xbee estará se comunicando; 
MY0: Define endereço ‘1’, próprio endereço;
BD3: Define velocidade em 9600 baud;
WR: Faz a gravação do módulo;
CN: Encerra conexão com o módulo;

Depois de terminada a configuração dos módulos estamos aptos de estabelecer uma conexão cpm os módulos.

Programando o Arduino remoto
Vamos colocar o módulo Xbee com endereço ‘1’ no Arduino que tem o microcontrolador e vamos programar nele um código que envia via Serial um número. Também vamos incluir uma leitura da porta serial para saber se foi recebido um caracter em particular e se caso for afirmativos iremos trocar o estado de um LED conectado ao pino digital 13.

É importante remover o módulo Xbee dete Arduino enquanto programamos, para que possamos estabelecer a comunicação serial.

int numero = 0;
char recepcao;
int estado = 1;

void setup() {
Serial.begin(9600);
}

void loop() {
Serial.print(numero);
Serial.println();
delay(1000);
numero++;
// ler da serial
recepcao = Serial.read();
if (recepcao == ‘x’)
{
estado = !estado;
digitalWrite(13,estado);
}
}

Depois de carregar este código podemos testa-lo abrindo uma conexão serial entre o Arduino. Devemos observar o numero ascendente e quando enviamos o caracter ‘x’ devemos observar uma troca do estado do LED conectado ao pino 13

Provando a comunicação sem fio
Uma vez programado o Arduino vamos desconectar o jumper USB e colocar no outro, aonde possamos alimenta-lo com uma bateira 9V. Também vamos conectar o Xbee para que possa começar a comunicação serial sem fio. Devemos nos assegurar que os jumpers do interior do Arduino estejam em ‘Xbee”’. No PC vamos conectar o Arduino sem microcontrolador com o Xbee shield de endereço ‘0’ e vamos abrir o Hyper Terminal, depois de alguns segundos devemos começar a observar o numero recebido do endereço ‘1’ em ascendencia e quando teclamos a tecla ‘x’ conferimos se o LED mudou de estado.

im5Recebendo os dados pelo Hyper Terminal do Windows

Espero que gostem do exemplo e o desenvolvam com sabedoria. Xbee é uma ferramenta implantada no Brasil em meados de 2007 e está em plena expansão.