Ir ao conteúdo
  • Cadastre-se

Microcontrolador PIC memoria externa


robsontlls

Posts recomendados

Ola pessoal

por favor me ajudem!!!

é o seguinte estou querendo fazer tcc de um controle de acesso (teclado e lcd) o seu funcionamento basicamente é assim:

' Teremos que ter uma senha administradora de 4 digito, para adicionar usuarios atraves da memoria externa que teremos que utilizar, ai quando eu for ter o acesso vou digitar essa senha adicionada que esta gravada na memoria externa, ai o programa tera que comparar com outras senhas da memoria e identificar se a senha esta correta se estiver tudo certinho "acesso liberado se nao senha invalida"'

se puderem me dar uma ideia ou me ajudar a entender como poderia fazer isso.

agradeço vocês

Link para o comentário
Compartilhar em outros sites

Porque usar uma memória externa se a grande maioria dos PICs têm memória eeprom interna?

Então amigo e que é o seguinte como vou cadastrar meus usuario por meio do pic diretamente com a memoria castela acho que a eeprom do Uc nao vai dar conta quero cadastrar 20 nome e senha ou eu estou falando besteira?

aceito sugestoes =D

meu projeto e para gravar nome e senha para os professores para quando precisar usar os laboratórios eles cheguem na porta deigitem sua senha e abra a porta do laboratório

att

Link para o comentário
Compartilhar em outros sites

Ah sim, achava que era uma senha única. Bom com 20 usuários, 60 bytes por nome, mais 4 bytes para senha vai dar:

20*(60 + 4) = 1280 bytes. Pode usar uma memória eerpom de 2KB que irá funcionar muito bem. Use uma 25AA160.

Puxa valeu cara por me referencia essa memoria

agora assim gostaria de saber como poderia varrer esse resultado que esta na minha memoria para identificar se a senha esta correta eu so preciso entender essa parte queta me tirando o sono

mais muito obrigado pessoal pela atenção e por estar me ajudando vou por seus sites em meu tcc

obrigado

Link para o comentário
Compartilhar em outros sites

Como vai funcionar? O usuário digita uma senha de 4 dígitos e aparece o nome dele em um display ou você quer fazer no modo login e senha?

Opa amigo

é o seguinte eu imagino fazer assim:

Tem que ter uma senha administradora (digamos a assim) que possibilite eu adicionar a senha e o nome referente a senha, quando o professor for acessar ele vai digitar apenas a senha dele.

a questao do nome e pra quando for deletar eu saber de quem e a senha que sera deletada.

para adicionar senha e o nome, teremos que entrar no menu(segurando duas teclas quaisquer), que sera preciso digitar a senha administradora para poder alterar os dados.

a tela inicia sera assim exemplo: "LABORATORIO 02 DIGITE SUA SENHA" ai professor digita a senha e o programa varre se essa senha corresponde as senhas registrada na memoria se for a senha "acesso liberado" se não "senha invalida"

como varrer que ta sendo o pesadelo tipo nao sei se vou ter que subtrair os valores da memoria com o digitado se o resultado for zero acesso liberado se for diferente de zero senha invalida

como poderia fazer essa parte?

continuo agradeçendo você pela atenção

att

Link para o comentário
Compartilhar em outros sites

o que acha de usar +ou- a seguinte logica



char nomes_e_senhas [10] [5];
char nome_colocado_e_senha_colocada[10];
int verifica, correção;

...

for(verifica=0 verifica<=10 verifica++
{
if(nomes_e_senhas[verifica] [linha]==nome_digitado_e_senha_digitada[verifica])
{
correção++;
}
}
if(correção>=10)
{
lcd_output(1,1 "senha correta")
}
else
{
linha++;
}

acontece +ou- o seguinte

as senhas e os nomes são salvos na matriz nomes_e_senhas

e o nome e a senha que o usuario digitou ali na hora para loggar é salvo na variavel nome_digitado_e_senha_digitada

após isso o sistema começa fazer uma verificação automatica para saber se a senha e o nome estão corretos

a verificação acotece assim

o nome e a senha é salva em uma linha da matriz e nas outras linhas outros nomes e senhas, no comando dentro do "for" o pic começa a analisar cada coluna da mesma linha com os valores colocados no vetor na mesma posição, para ver se estão certos

tipo assim

quando a variavel "verifica" estiver 0 o pic vai comparar na linha 0 da matriz a coluna 0 com a posição 0 no vetor, assim que terminar de comparar ele automaticamente soma a variavel "verifica" e compara a proxima posição que sera na linha 0 da matriz só que agora a coluna 1 com a posição 1 do vetor se não for a pessoa certa ele automaticamente vai pra proxima linha, que sera um outro cadastro e começara a comparar la tambem até não haver mais linhas a se analisar (ou seja não haver mais pessoas cadastradas),

cada linha é uma pessoa, e nas colunas estão as informações das pessoas

caso esteja tudo certo a variavel "correção" sera incrementada 10 vezes e liberara a pessoa

perceba com isto que os cadastros das pessoas terão tamanhos definidos, que fica dependente da quantidades de colunas da matriz, usando ou não este espaços eles terão que ser ocupados com alguma informação para não acusar erro na hora da verificação

tambem ha o problema que esta mexendo com uma memoria eeprom externa e não a ram do pic, por isto sera mais difícil simular uma matriz e sua logica, pelo que sei os compiladores não fazem isto não mas estamos aqui pra ajudar

abrçs

Link para o comentário
Compartilhar em outros sites

Como o amigo explicou ai em cima, a comparação de uma senha é relativamente simples. Para comparar a senha com muitas outras pensei no seguinte algorítmo:

Os registros (senha + nome) ocupam 64 bytes cada, então para acessar algum registro basta colocar a memória eeprom em um endereço múltiplo de 64. Os primeiros 8 bytes serão a senha, então o microcontrolador vai ficar comparando a senha digitada com cada registro na memória eeprom (faz uma varredura na eeprom inteira).

Como haverá a possibilidade de apagar e criar registros, então para representar um registro vazio/apagado o primeiro byte do registro será de valor FF hexadecimal. Assim quando for criar um registro, o PIC vai procurar o próximo endereço múltiplo de 64 que o primeiro byte seja igual a FF hex, e alterar esse byte para o valor do primeiro dígito da senha do usuário (que vai de 0 a 9).

Recomendo que a senha tenha pelo menos 8 dígitos para dificultar que um usuário não autorizado libere o sistema.

Por fim a questão da proteção de dados. É bem fácil alguém retirar a memória eeprom do dispositivo, acessar o seu conteúdo e extrair as senhas. Dependendo da aplicação será necessário usar algum algorítmo de criptografia para impedir o roubo de dados.

Link para o comentário
Compartilhar em outros sites

Olá. Achei interessante a ideia da criptografia.

Ates só uma coisa. Ao invés de usar uma matriz para armazenar nome e senha digitados na hora para liberar acesso, fica mais organizado usar uma estrutura. A lógica de armazenagem na EEPROM e comparação de senhas não mudaria, mas o código ficaria mais legível.

struct nome_senha{

char nome_colocado[30];

char senha_colocada[4];

} acesso;

acesso.nome_colocado guardaria o nome digitado na hora e acesso.senha_colocada guardaria a senha digitada na hora.

Quanto a criptografia, pode ser várias coisas:

-Inverter as letras do nome e os números da senha antes de guardar na memória

-somar cada letra do nome e da senha por uma constante

-Trocar cada letra do nome pelo simétrico do alfabeto em relação ao elemento central, Por exemplo, A viraria Z, B viraria Y, C viraria X, e por aí vai.

-A senha na hora de ser armazenada seria acrescida de mais um caractere. Esse caractere guarda a soma dos caracteres da senha. Então, cada caractere da senha seria somado ao produto entre o caractere extra e a posição do caractere da senha na memória.

O limite é a imaginação.

Uma criptografia simples usa uma função para alterar os dados na hora de armazenar e realiza a operação inversa na hora de extraí-los da memória. Qual a função você vai usar só depende de tua imaginação.

Link para o comentário
Compartilhar em outros sites

Olá. Achei interessante a ideia da criptografia.

Ates só uma coisa. Ao invés de usar uma matriz para armazenar nome e senha digitados na hora para liberar acesso, fica mais organizado usar uma estrutura. A lógica de armazenagem na EEPROM e comparação de senhas não mudaria, mas o código ficaria mais legível.

struct nome_senha{

char nome_colocado[30];

char senha_colocada[4];

} acesso;

acesso.nome_colocado guardaria o nome digitado na hora e acesso.senha_colocada guardaria a senha digitada na hora.

Quanto a criptografia, pode ser várias coisas:

-Inverter as letras do nome e os números da senha antes de guardar na memória

-somar cada letra do nome e da senha por uma constante

-Trocar cada letra do nome pelo simétrico do alfabeto em relação ao elemento central, Por exemplo, A viraria Z, B viraria Y, C viraria X, e por aí vai.

-A senha na hora de ser armazenada seria acrescida de mais um caractere. Esse caractere guarda a soma dos caracteres da senha. Então, cada caractere da senha seria somado ao produto entre o caractere extra e a posição do caractere da senha na memória.

O limite é a imaginação.

Uma criptografia simples usa uma função para alterar os dados na hora de armazenar e realiza a operação inversa na hora de extraí-los da memória. Qual a função você vai usar só depende de tua imaginação.

pessoal Obriogadoooo pelas dicas vou estar tentando qualquer coisa entro em contato aqui

Link para o comentário
Compartilhar em outros sites

Como o amigo explicou ai em cima, a comparação de uma senha é relativamente simples. Para comparar a senha com muitas outras pensei no seguinte algorítmo:

Os registros (senha + nome) ocupam 64 bytes cada, então para acessar algum registro basta colocar a memória eeprom em um endereço múltiplo de 64. Os primeiros 8 bytes serão a senha, então o microcontrolador vai ficar comparando a senha digitada com cada registro na memória eeprom (faz uma varredura na eeprom inteira).

Como haverá a possibilidade de apagar e criar registros, então para representar um registro vazio/apagado o primeiro byte do registro será de valor FF hexadecimal. Assim quando for criar um registro, o PIC vai procurar o próximo endereço múltiplo de 64 que o primeiro byte seja igual a FF hex, e alterar esse byte para o valor do primeiro dígito da senha do usuário (que vai de 0 a 9).

Recomendo que a senha tenha pelo menos 8 dígitos para dificultar que um usuário não autorizado libere o sistema.

Por fim a questão da proteção de dados. É bem fácil alguém retirar a memória eeprom do dispositivo, acessar o seu conteúdo e extrair as senhas. Dependendo da aplicação será necessário usar algum algorítmo de criptografia para impedir o roubo de dados.

Amigos vocês sao fera mesmo !!!!

seguinte minha duvida é como vou conseguir varrer na memoria eeprom por exemplo:

como vou varrer na eeprom, tipo, eu castelo que a eeprom tem o pino controle e o pino de dados, como vou fazer para varrer esses resultados ja gravado na eeprom.

eu utilizo ccs mais estou migrando para o mikroC

o trampo ta puxadão aqui nao deu pra mim pesquisar a fundo

mais final de semana vou pegar pra louco pra estudar

ai gostaria se fosse possivel mostrar a programação de acesso a eeprom como ler e/ou varrer na eerpom?

obrigado

Link para o comentário
Compartilhar em outros sites

O ccs já tem os drivers para eeproms da série 25XXXX. Use o 25160.C, dê uma olhada nas funções que você entenderá o funcionamento.

O que você deve fazer é ler um endereço múltiplo de 64, começando do 0 (0, 64, 128, 192 até 2048). Você deve ler o primeiro byte para verificar se existe um registro nesse endereço. Se existir (o byte lido é diferente de 255) carregue os próximos 63 bytes depois desse na memória RAM. Os 8 primeiros bytes são a senha, o resto é o nome do usuário na forma de uam string (o valor 0 indica o fim da string).

Aqui um exemplo de como os registros ficam gravados na memória eeprom:

registrosd.png

Cada bloco que 64 bytes é um registro que pode estar ocupado, apagado ou numa usado.

O primeiro bloco em azul representa um registro ocupado. Podemos observar que os primeiros 8 bytes são a senha em ASCII, seguido do nome, e por fim o valor binário 0 ao final do nome para representar fim de string. O bloco 3 (preto) segue o mesmo princípio.

Já o bloco 2 (vermelho) está apagado, e pode ser usado por um novo registro. Observe que o primeiro byte do registro está com o valor hexadecimal FF (255). Isso significa que o bloco foi apagado.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!