Big font ASCII style

Adicione uma fonte insana ao seu super programa em C:

http://www.fontgeneral.com/big-text-maker/

████▄░░████░██▄░██░░▄███▄░░████▄░░░▄███▄░░██
██░▀██░██▄░░███▄██░██▀░▀██░██░▀██░██▀░▀██░██
██░▄██░██▀░░██▀███░███████░██░▄██░███████░██
████▀░░████░██░░██░██░░░██░████▀░░██░░░██░██

Anúncios

#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!

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.