Escolar Documentos
Profissional Documentos
Cultura Documentos
I. C ONTEXTUALIZAC AO
Uma das tarefas mais comuns em dispositivos eletronicos e a comunicaca o com outros dispositivos. Para que esta comunicaca o
seja estabelecida, e necessario que ambos os dispositivos concordem sobre qual protocolo (idioma) irao utilizar. Por exemplo,
e comum estabelecer a comunicaca o entre um microcontrolador e um PC via comunicaca o serial UART 9 bits, e um computador
se comunicar com um roteador atraves do protocolo Wi-Fi.
No caso especfico de microcontroladores, alguns protocolos sao bastante comuns: RS-232; SPI (Serial Peripheral Interface)
e I2 C(Inter-Integrated Circuit). Esses protocolos podem ser usados na comunicaca o do microcontrolador com perifericos, como
chips de A/D e D/A, LCD, EPROMs, sensores de temperatura, entre outros.
II. BARRAMENTO I 2 C
O barramento I2 Cutiliza apenas dois fios para realizar uma comunicaca o bidirecional entre diversos dispositivos. Na terminologia utilizada, o dispositivo que esta gerando uma mensagem e o transmissor, enquanto o dispositivo que esta recebendo
uma mensagem e o receptor. O dispositivo que controla a mensagem e o mestre, e os dispositivos que sao controlados por
este sao os escravos. Os dispositivos mestre e escravo assumem o papel de transmissor e receptor em diferentes etapas da
comunicaca o. O barramento e composto por apenas dois fios: um fio de dados, SDA, e um fio de clock, SCL. Apenas o mestre
controla o clock, mesmo quando este estiver recebendo uma mensagem (como veremos abaixo). Quando o barramento esta
ocioso, ambos os sinais SDA e SCL estao em nvel alto.
A. Sinais de Controle: START e STOP
Quando o barramento esta ocioso (idle), ambos os sinas SCL e SDA estao em nvel logico HIGH. Para iniciar uma
transmissao, o mestre forca a descida (mudanca de HIGH para LOW) de SDA enquanto o clock esta em nvel alto. Este
sinal e a condica o de partida (START), e prepara os dispositivos para a comunicaca o.
Para finalizar a transmissao, o mestre forca a subida de SDA quando o clock esta em nvel alto (mudanca de LOW para
HIGH). Este sinal e a condica o de parada (STOP). Para que a comunicaca o se re-estabeleca, um novo sinal de partida deve
ser gerado.
B. Transferencia de Bit
Na transferencia de um bit, o dado em SDA deve permanecer estavel entre a subida e a descida do clock (SCL). Mudancas
em SDA quando SCL esta em nvel alto sao entendidas como um sinal de controle (como visto nas condico es de START e
STOP). O valor de SDA durante o tempo em que SCL estava em nvel alto e o bit transferido.
C. Transferencia de um Byte
A comunicaca o no barramento e feita em bytes (8 bits), e a cada byte transmitido ou enviado um sinal de acknowledge deve
ser gerado. Portanto, para cada byte transmitido, 9 sinais (subida e descida) de clock precisam ser gerados. O numero de bytes
enviados entre um sinal de START e STOP e ilimitado. Na figura acima, e necessario entender que o canal data output e o
canal SDA, que e comum ao transmissor e ao receptor. Na figura, eles sao apresentados em separado para mostrar quem gera
os sinais a cada momento. No envio de um byte, o transmissor manda os 8 bits em SDA (em 8 sinais de clock separados), e
o receptor gera o sinal de acknowledge, tambem em SDA, no nono sinal de clock. O receptor gera o sinal 0 para sinalizar o
acknowledge (entendido) e 1 para sinalizar que nao entendeu a mensagem. Note que o clock e gerado pelo mestre, enquanto
os papeis de transmissor/receptor podem ser feitos tanto pelo mestre quanto pelo escravo.
III. P ROJETO
O projeto consiste em escrever um programa em Linguagem C para PCs que simule a comunicaca o de mensagens em ASCII
via protocolo I2 C. Cada um dos fios do barramento deve ser simulado usando arquivos diferentes, e os valores dos barramentos
em instantes de tempo amostrados devem ser registrados nesses arquivos como 1 ou 0.
O programa deve ter dois estados distintos: (i) envio de mensagem; e (ii) recepca o de mensagem. Quando o programa
funciona para envio de mensagem, ele funciona como o mestre do barramento (note que o acknowledge deve ser gerado como
HIGH, mas nao tem nenhum receptor para simular o acknowledge). Quando o programa funciona como receptor, ele funciona
como escravo (mas nao precisa gerar o acknowledge, uma vez que a mensagem ja foi enviada).
Um executavel de exemplo esta disponvel no moodle da displina (projeto1.exe , para Windows). Para testar o arquivo, basta
seguir os passos:
1) Escrever um arquivo texto contendo uma mensagem a ser enviada (nota: caracteres especiais e com acentos nao fazem
parte do conjunto ASCII).
2) Escrever projeto1 write <nome do arquivo> na linha de comando.
Este arquivo ira gerar dois arquivos: <nome do arquivo> sda.txt e <nome do arquivo> scl.txt. Para receber a mensagem, basta fazer:
1) Escrever projeto1 read <nome do arquivo> na linha de comando.
Note que, dependendo da amostragem, o barramento pode ficar mais tempo em um mesmo estado. O programa disponvel
no moodle simula esse tempo mantendo o barramento no mesmo nvel por um tempo aleatorio - o programa deve procurar
por mudancas nos sinais, e nao por valores dos sinais em instantes de tempo especficos (uma vez que o barramento I2 Cnao
especifica temporizaca o precisa).
E um requisito do projeto que o programa desenvolvido consiga se comunicar com o programa do professor, isto
e , gerando mensagens que o programa do professor seja capaz de ler e lendo mensagens geradas pelo programa do
professor!.
O programa disponvel no Moodle tambem contem um modo de debug. Passando como terceiro parametro a opca o -v, o
programa ira mostrar cada um dos sinais e bits enviados no barramento (tanto no modo de escrita como no modo de leitura).
Esta opca o pode ser usada para debugar o programa desenvolvido.
IV. D ICAS
Algumas dicas para programaca o em C:
A. Para ler argumentos na Linha de Comando
Na especificaca o do funca o main, coloque dois argumentos a mais: int argc e char *argv[]. O primeiro, argc, corresponde
ao numero de palavras diferentes (incluindo o nome do programa) usados quando o programa foi chamado. O segundo, argv,
corresponde a um array de strings (C strings, isto e , arrays de caracteres terminados com o carectere nulo), onde cada posica o
do array e uma palavra diferente.
Algoritmo 1 Exemplo de Leitura de Argumentos
1: #include <stdio.h >// printf
2: #include <stdlib.h >// atoi
3:
4:
5:
6:
7:
8:
9:
10:
11:
int main()
{
char filename[80];
FILE *fid;
int bit;
10:
11:
12:
sprintf(filename,test.txt);
13:
14:
15:
fprintf(fid,
fprintf(fid,
fprintf(fid,
fprintf(fid,
16:
17:
18:
19:
20:
1);
1);
0);
1);
fclose(fid);
21:
22:
23:
24:
25:
do
{
26:
27:
28:
bit = fgetc(fid);
if (bit != EOF)
{
//fgetc le o codigo ASCII do caractere!
printf(Bit lido: %d \n,bit - 48);
}
} while (bit != EOF);
29:
30:
31:
32:
33:
34:
35:
36:
37:
%d,
%d,
%d,
%d,
fclose(fid);
}
Leitura de Parametros
fopen
fclose
fprintf
fgetc
1
1
0
1
TEIS
V. L INKS U
http://www.cplusplus.com/articles/DEN36Up4/
http://www.cplusplus.com/reference/cstdio/fopen/
http://www.cplusplus.com/reference/cstdio/fclose/
http://www.cplusplus.com/reference/cstdio/fprintf/
http://www.cplusplus.com/reference/cstdio/fgetc/