Ir ao conteúdo
  • Cadastre-se
Entre para seguir isso  
luizmodesto

Memoria Externa no PIC

Recommended Posts

Olá Galera!

Eu tenho um projeto que estou fazendo aquisição de dados durante um dia, usando um conversor A/D de 10 bit no PIC.

A minha placa envia os sinais numa frequencia de 32Hz, então fazendo as contas (Seg x Min x Horas x Freq) tenho o numero de amostras que vou ter no dia todo, o que resulta em 2764800 amostras no dia...

A questão toda é que faço isso com o PIC e a memoria EEPROM dele é muito baixa, então eu optei por usar uma memoria externa. Eu nunca usei essas memorias externas para projetos, não sei como elas funcionam muito bem.

O que queria saber é como faço essa comunicação com o PIC, se faço por I2C (creio que é o indicado), e se o numero de bits que vou prescisar é de 2764800 x 10 (os 10 bits do A/D)

Grato desde já pela Atenção!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

SUGESTÃO!!!!

Por acaso, exatamente ESSE projeto seu ja existe, está na biblioteca do Proteus, o nome dele é PicLogger, é um pic, acho que 16F, e o mesmo faz a análise de 1 valor analógico e armazena na memória externa... essa memória externa nada mais é do que um HD!

O circuito está inteiro lá, mas não é dos mais simples.

Um modo fácil que tem para comunicar com uam E2PROM externa é por SPI, com I2C é melhor caso você tenha um circuito muito complexo, mas SPI da para comunicar com várias memórias sem problemas e é muito mais simples de configurar.

Alias... porque você não joga os dados para um computador? e como você pretende visualizar os dados mais tarde?

E cuidado pois as E2PROM não são aconselhadas para fazer tantas regravações pois elas são limitadas nesse quesito. Claro, regravam 1.000.000 vezes, mas 1.000.000 vezes pode ser pouco.

Para usar uma memória externa é BEM fácil:

- envia byte dizendo endereço e comando (leitura ou escrita).

- envia o primeiro byte.

- repita o processo para o segundo, terceiro e quarto byte.

Lembrando que 10bits = 4bytes. ; 0x F F F F

Não tem segredo, é só enviar "endereço+byte".

Se quiser eu tenho até uma rotina para escrever SPI se quiser, para escrita e leitura.

Compartilhar este post


Link para o post
Compartilhar em outros sites
SUGESTÃO!!!!

Por acaso, exatamente ESSE projeto seu ja existe, está na biblioteca do Proteus, o nome dele é PicLogger, é um pic, acho que 16F, e o mesmo faz a análise de 1 valor analógico e armazena na memória externa... essa memória externa nada mais é do que um HD!

O circuito está inteiro lá, mas não é dos mais simples.

Um modo fácil que tem para comunicar com uam E2PROM externa é por SPI, com I2C é melhor caso você tenha um circuito muito complexo, mas SPI da para comunicar com várias memórias sem problemas e é muito mais simples de configurar.

Alias... porque você não joga os dados para um computador? e como você pretende visualizar os dados mais tarde?

E cuidado pois as E2PROM não são aconselhadas para fazer tantas regravações pois elas são limitadas nesse quesito. Claro, regravam 1.000.000 vezes, mas 1.000.000 vezes pode ser pouco.

Para usar uma memória externa é BEM fácil:

- envia byte dizendo endereço e comando (leitura ou escrita).

- envia o primeiro byte.

- repita o processo para o segundo, terceiro e quarto byte.

Lembrando que 10bits = 4bytes. ; 0x F F F F

Não tem segredo, é só enviar "endereço+byte".

Se quiser eu tenho até uma rotina para escrever SPI se quiser, para escrita e leitura.

Bem... o PIC que eu tenho é o 18F4550 e ele tem uma porta USB integrada nele....O projeto ja faz a comunicação USB, enviando os dados para o PC. Sendo que o proximo passo seria fazer uma aquisição de um dia inteiro e guardar isso, para posteriormente passar para a analise no PC.

Ai o que logo de cara pensei foi justamente isso, trabalhar com uma E2PROM.

Você disse que é melhor usar SPI pra comunicar né, será que tem algum projeto por ai com isso ? é que sinceramente nunca trabalhei com elas, então nao sei muito dos protocolos, o que sei um pouco é do I2C. Se tiver algo que possa me ajudar eu agradeço, e a rotina tambem seria intereçante para uma analise , para eu entender melhor como funciona.

Meu e-mail: lgmodesto@gmail.com

Grato!

Compartilhar este post


Link para o post
Compartilhar em outros sites

A rotina SPI é extremamente simples:

Rotina de escrita:

int data_out;

char counter = 8;

data_out = var //Aqui, var é o dado a ser enviado, vamos imaginar que é apenas 8 bits ok?

while (counter--){ //irá fazer a rotina e repetir até o valor de counter virar 0;

SCK_PIN = 0; //clock

SDO_PIN = data_out >> counter; //move o bit 7 para o pino SDO (serial data out), depois o bit 6, depois o 5, etc..

SCK_PIN = 1; //clock

}

Rotina de leitura:

int buffer = 0;

char counter = 8;

while (counter --){

while(!SCK_PIN); //Espera que o clock seja dado de 0 para 1

buffer += SDI << counter; //coloca o bit entrado no SDI em uma posição no buffer

while(SCK_PIN); //espera que o clock seja passado de 1 para 0

}

Pronto, ta aí sua rotina, bem simples não é mesmo?

Rapaz, não tem jeito, rotina para comunicação USB é MUITO ****, você vai precisar simular um sistema FAT16 no pic para comunicar com o USB, e ainda precisa aprender como criar arquivos la dentro, etc... não vale a pena mesmo... Além de que, você precisa usar um programa que é o Embed Usb Server ou coisa parecida, pois os PICS não tem capacidade para serem Masters numa rede de conexões USB.

}

Compartilhar este post


Link para o post
Compartilhar em outros sites
A rotina SPI é extremamente simples:

Rotina de escrita:

int data_out;

char counter = 8;

data_out = var //Aqui, var é o dado a ser enviado, vamos imaginar que é apenas 8 bits ok?

while (counter--){ //irá fazer a rotina e repetir até o valor de counter virar 0;

SCK_PIN = 0; //clock

SDO_PIN = data_out >> counter; //move o bit 7 para o pino SDO (serial data out), depois o bit 6, depois o 5, etc..

SCK_PIN = 1; //clock

}

Rotina de leitura:

int buffer = 0;

char counter = 8;

while (counter --){

while(!SCK_PIN); //Espera que o clock seja dado de 0 para 1

buffer += SDI << counter; //coloca o bit entrado no SDI em uma posição no buffer

while(SCK_PIN); //espera que o clock seja passado de 1 para 0

}

Pronto, ta aí sua rotina, bem simples não é mesmo?

Rapaz, não tem jeito, rotina para comunicação USB é MUITO ****, você vai precisar simular um sistema FAT16 no pic para comunicar com o USB, e ainda precisa aprender como criar arquivos la dentro, etc... não vale a pena mesmo... Além de que, você precisa usar um programa que é o Embed Usb Server ou coisa parecida, pois os PICS não tem capacidade para serem Masters numa rede de conexões USB.

}

Amigo excelente exemplo:

você já ouviu falar do ci maxq3180.

Segue abaixo data sheets

http://datasheets.maxim-ic.com/en/ds/maxq3180.pdf

Estou tentando trazer alguns desses ci para o Brasil trata de um medidor polifásico , com possibilidades de leitura de grandezas. Tensão corrente e potência além de outras. como fator de potência, potência ativa e aparente.

Um excelente ci que se comunica pelo protocolo spi

Tenho até uma rotina de exemplo mas não esta claro pra mim alguém poderia me ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora
Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×