Lomadee, uma nova espécie na web. A maior plataforma de afiliados da América Latina.

quinta-feira, 24 de novembro de 2011

...com Verilog, fazendo uma FIFO Síncrona!

E ai meu povo... fim de semestre chegando, cheio de trabalhos e provas pra estudar mas... estou aqui pra compartilhar algumas coisas estressantes (estressante é pouco).
Bom, primeiro vou explicar pq não tava postando nada:
  1.  Sem tempo;
  2.  Não tinha nada de tão interessante pra dizer;
  3.  As coisas interessantes eu não tinha certeza se estava fazendo certo;

Então... bora começar a reza, e vamos falar de coisa boa, vamos falar de Verilog!

É isso ai gente boa, Verilog!! Pois é né?? E então?? (Desembucha logo pow!!)

Calma geeeeeeeente!! Hehehe....

Vamos começar pelo começo, calma, espera, não precisa procurar no Google o que é Verilog o tio aki diz (vou procurar no wikipédia):

Segundo descrição do Wikipédia:

Verilog é uma linguagem de descrição de hardware usada para modelar sistemas eletrônicos. Esta ferramenta suporta o design, verificação e implementação de projetos analógicos, digitais e circuito híbridos em vários níveis de abstração. Com placas especiais é possível descarregar o código gerado nessa linguagem em matrizes de portas denominadas FPGA's (field programmable gate array ou matriz de portas programáveis). Essas placas são constituídas por milhares de transistores e fazem basicamente o que vários circuito integrados fazem, com a diferença de que a matriz é reprogramável.”

Podem acreditar... é isso ai mesmo! Ai vc como um crítico nato q deve ser, vai se perguntar: O que é q eu tenho a v com isso? Ai eu digo: Nada!

Mas a melhor parte é: Fiz três trabalhos em Verilog e vou postar, Rá!

Eu uso o Model Sim pra fazer essas paradinhas, mas podem usar o Quartus que fica legal Tb, porém o teste Bench (oi?) tem que ser feito no model sim. Ta bom, ta bom.... vou explicar o que é teste bench.

O teste bench é um programa que vc faz pra testar outro programa, ou seja, o nosso teste bench vai gerar umas entradas no programa que esta sendo testado a fim de verificar se as saídas correspondem a essas entradas.

if(entendeu==sim)
 printf(“Continue lendo”);
else
printf(“Wikipédia”);


1º - FIFO Síncrona:

A descrição é bem simples e corresponde ao que o próprio nome diz. Em poucas palavras, o primeiro que entra é o primeiro que sai. Essa FIFO tem capacidade para 128 palavras, sendo cada uma de 8 bits. Sabendo disso e de olho na Figura 1 podemos começar.
 Figura 1. Arquitetura da FIFO.

O programa é bem simples, teremos as seguintes entradas:

clock: sinal de clock;
rst: sinal de reset;
r_en: requisição de leitura;
w_en: requisição de escrita;
din: dados de entrada;

e as seguintes saídas:

dout: dados de saída;
empty: sinal de vazio;
full: sinal de cheio.

E essa outra variável auxiliar:

cont: contador para identificar se a memória está cheia ou vazia;

Pronto, ai tipo o programa ta todo comentado a baixo, e é auto explicativo:


Figura 2. Código FIFO (clique na figura pra ampliar).

Sim ai vc pode não ta entendendo o que é essa parte:

Figura 3.Bloco chama SRAM.

Enfim... essa parte é o seguinte, a FIFO ela só gerencia os dados que serão escritos e lidos, porém devemos ter uma memória para guardar os dados. A memória é chamada na FIFO por essa função ai que ta na Figura 3.

O código da memória é ilustrado na Figura 4.


Figura 4. Código memória.

Por fim... temos que testar pra v se ta tudo blz... ai entra o teste bench, q tb está comentado pra vcs se deliciarem. Esse monitor ai vai imprimir o estado de todas as variáveis que estão servindo como parâmetro pra ele, a cada mudança de qualquer uma. Ai é so vc testar se ta saindo tudo certo.
Figura 5. Teste Bench.
Bom, por hj é só!!
Vc: mas, mas, mas... mas vc disse que ia mostrar os três programas que vc fez!
Eu: calma véi.... quer tudo de uma vez! Os outros ficam pra outros posts, mas posso adiantar que um é um BlackJack e o outro uma FIFO Assíncrona.
Valeu!

domingo, 21 de agosto de 2011

...tentando configurar o ZigBee nos modos AT e API.


Comandos AT
Os comandos AT possuem uma estrutura como a ilustrada na Figura 1.


Figura 1. Estrutura dos comandos AT.

Antes de enviar os comandos AT é preciso que o módulo ZigBee esteja no modo comando. Para o dispositivo entrar em modo comando digita-se os caracteres do sinal de soma três vezes (+++) e espera uma resposta OK do dispositivo. Após o dispositivo enviar o sinal OK, os comandos AT já podem ser enviados para a configuração. Após o envio da resposta OK, se nenhum comando for enviado durante um período de aproximadamente 10 segundos para o módulo ele entrará no estado idle (estado pronto para transmitir e receber dados). A Tabela 1 lista alguns comandos AT utilizados para programar os dispositivos.

Tabela 1. Comandos AT para programação do XBee/XBee-ProTM.
COMANDO
RESPOSTA DO XBEE/XBEE-PROTM
SIGNIFICADO
+++
OK <CR>
Faz o módulo XBee/XBee-Pro entrar no modo comando (os caracteres "+++" devem ser digitados num intervalo de 1 segundo).
Após o OK, se nenhum comando for digitado num intervalo de +/- 10 segundos, o módulo volta ao estado idle (pronto para transmitir ou receber).
ATDL5001 <ENTER>
OK <CR>
Altera o endereço destino (DL) do módulo local para 5001.
ATDL <ENTER>
5001 <CR>
Lê o endereço destino (DL) do módulo local.
ATMY5000 <ENTER>
OK <CR>
Altera o endereço fonte (MY) do módulo local para 5000.
ATMY <ENTER>
5000 <CR>
Lê o endereço fonte (MY) do módulo local.
ATWR <ENTER>
OK <CR>
Grava as modificações efetuadas, na memória não volátil (Flash) do módulo.
ATCN <ENTER>
OK <CR>
Fecha o modo comando e volta ao estado idle (pronto para transmitir ou receber)
ATNI Nome_do_Modulo <ENTER>
OK <CR>
Atribui um nome para o módulo XBee-XBee-Pro - "Nome_do_Modulo". Pode usar até 20 caracteres ASCII para nomear o módulo.
ATNI <ENTER>
Nome_do_Modulo <CR>
Retorna o nome do módulo XBee/XBee-Pro.
ATVR <ENTER>
10C0 <CR>
Retorna a versão do firmware gravado no módulo XBee/XBee-Pro.
ATHV <ENTER>
180B<CR>
Retorna a versão do hardware do módulo XBee/XBee-Pro.
ATBD3 <ENTER>
OK <CR>
Muda a velocidade do módulo para trabalhar com 9600bps.
  
Comandos API
Para iniciar a configuração do modo API deve-se selecionar o valor um para o parâmetro AP, fazendo com que o módulo fique habilitado. Os comandos API podem agora ser enviados aos módulos remotos. Cuidado é essencial na construção dos frames, pois um frame construído errado será descartado pelo módulo local sem ao menos ser enviado. A Figura 2 ilustra um frame de dados no modo API.


Figura 2. Frame de dados no modo API.

         O frame é constituído por:
·        Start Delimiter: delimitador de inicio. Qualquer dado recebido antes dele é descartado;
·        Length: tamanho do pacote;
·        Frame Data: dados que estão sendo transmitidos;
·        Cheksum: calculado para verificar a integridade dos dados.

Com o ZigBee configurado no modo API tem-se, entre outras, as seguintes vantagens: a possibilidade de transmitir dados para múltiplos destinos sem ser necessário entrar no modo comando; os dispositivos recebem estados de sucesso ou falha para cada pacote transmitido; é possível identificar o endereço de onde partiu cada pacote.

Breve vou postar como configurar no modo API....quando eu aprender é claro...heheheh... o/

...tentando aprender configurar e usar os módulos XBee/XBee-Pro TM


Um século depois, da última postagem, venho novamente encher o saco com coisas que provavelmente nem 2% dos leitores (se é que existem) do blog lerão. Como o blog foi criado devido aos estresses constantes que tive com o meu tcc, nada mais justo do que postar algumas coisas dele. Uma coisa interessante que aprendi, como já mostrei em outros posts, foi utilizar os módulos ZigBee.... e como não sou egoísta, vou passar algumas coisas (nada que vc não encontrasse no manual do dispositivo, mas é preguiçoso d+ pra procurar).
Pra quem não lembra.... um ZigBee é issaki (Figura 1):


Figura 1. XBee XB24 - ZB.

Como listado na Tabela 1, os pinos do módulo ZigBee possuem diferentes funções como entradas analógicas, PWM, entrada/saída digital, entre outras.

Tabela 1. Descrição dos pinos dos módulos XBee/XBee-Pro™.
PINO #
NOME
DIREÇÃO
DESCRIÇÃO
1
VCC
-
Alimentação 3,3 V
2
DOUT
Saída
Saída de dados da UART
3
DIN/ 
Entrada/Saída
Entrada de dados da UART
4
DO8*
Saída
Saída digital 8
5
reset
Entrada
Inicializa módulo (um pulso
 nível 0 de pelo menos 200 ms)
6
PWM0/RSSI
Saída
Saída do PWM 0/ indicador de
 força do sinal de RF
7
PWM1
Saída
Saída do PWM 1
8
(Reservado)
-
Ainda não tem uma função definida
9
/SLEEP_IRQ/DI8
Entrada
Linha de controle da função 
sleep ou entrada digital 8.
10
GND
-
Terra
11
AD4/DIO4
Entrada/Saída
Entrada analógica 4 ou 
 entrada/saída digital 4
12
/DIO7
Entrada/Saída
Controle do fluxo CTS ou
 entrada/saída digital 7
13
ON/SLEEP
Saída
Indicador de estado do módulo
14
VREF
Entrada
Voltagem de referencia
 para as entradas A/D
15
Associação/AD5/DIO5
Entrada/Saída
Indicador de associação, 
entrada analógica 5 ou entrada/saída
 digital 5
16
/AD6/DIO6
Entrada/Saída
Controle de fluxo RTS, entrada
 analógica 6 ou entrada/saída digital 6
17
AD3/DIO3
Entrada/Saída
Entrada analógica 3 ou
 entrada/saída digital 3
18
AD2/DIO2
Entrada/Saída
Entrada analógica 2 ou
 entrada/saída digital 2
19
AD1/DIO1
Entrada/Saída
Entrada analógica 1 ou
 entrada/saída digital 1
20
AD0/DIO0
Entrada/Saída
Entrada analógica 0 ou
 entrada/saída digital 0

Os módulos XBee/XBee-ProTM podem operar de dois modos diferentes: o modo transparente (AT) ou o modo API (Application Programming Interface).

* Modo Transparente: neste modo, os dados são recebidos da UART pelo pino RX do dispositivo ZigBee e são colocados na fila para transmissão via RF. Os dados recebidos pelo canal são transmitidos pelo pino TX. Neste modo de operação a transmissão é idêntica à comunicação RS-232 padrão;

* Modo API: este modo é baseado em frames, ou seja, os dados transmitidos e recebidos estão contidos em frames, que definem operações ou eventos dentro do módulo. Com as características deste modo é possível enviar endereço fonte, endereço destino, nome do nó, estado entre outras informações. Entre as principais vantagens do modo API pode-se citar a capacidade de transmitir dados para diversos destinos sem a necessidade de entrar em modo comando. O módulo configurado neste modo recebe estado de sucessos ou falhas dos pacotes que estão sendo enviados e é capaz de identificar o endereço de onde partiu cada pacote recebido.