[DUVIDA] É possível utilizar uma eeprom externa para aumentar a memoria programavel ?

Olá galera,

      Uma duvida que apareceu foi que o arduino possui uma memoria programável de apenas 32k, mais especificamente 32,256 bytes.

       A duvida é:  É possível utilizar memoria externa como chip eeprom ou outro meio, para upar sketchs de grande tamnho para o arduino, quebrando assim a barreira dos 32k ?

valeu galera.

Exibições: 5577

Responder esta

Respostas a este tópico

Olá xará. rs

Realmente não é "propício", mas não "impossível".  ^^

Como disse, é um desafio e principalmente um elemento de estudos muito valioso e interessante. Te abre muito a mente de como as coisas realmente funcionam.

"O código estar obrigatoriamente na Flash", diria que "entre aspas" né? O S.O. sim, o que seria executado por um S.O. , não necessariamente.

E o limite de gravações é bem alto hoje em dia. Embora se discuta muito sobre "Flash Endurance", você já ouviu falar de alguém que chegou neste limite brincando com o Arduino? Eu nunca. E olha que conheço produtos que fazem isto sempre.

Tudo bem, que na arquitetura que disse sobre buscar o programa na memória e gravá-lo na FLASH para ser executado iria ser contado como uma gravação. Mas isso sendo feito à cada utilização escolhendo umas três programações por vez, seria como você gravar seu Arduino umas três vezes por dia vai...mesmo assim dá para brincar bastante. =)

Nada deve ser uma regra, as possibilidades estão ai. Explorá-las ou não é uma questão de escolha e principalmente de vontade em aprender.

Abraço.

T++. ^^

Não tem nenhuma aspas neste caso. O ponteiro de instruções só é capaz de endereçar a Flash (que está em uma via de dados separada da memória Ram). Portanto se for para executar (e não interpretar), é preciso copiar para a Flash.

Sobre o limite de regravações, a documentação do ATmega fala em 10.000 ciclos de gravação/apagamento. Três vezes ao dia, você brinca 9 anos. Agora, se você gravar a cada 10 minutos, são só 70 dias. Se alguém for fazer um projeto que vai ser usado para a produção de milhares de peças, é bom fazer estas contas.

Esta discussão me lembra lá o começo dos anos 80, quando eu fiz um monitor com um comando Assembly para rodar em terminais de vídeo baseados no 8085. Neste caso o monitor era gravado em EProm e o código assemblado era colocado em Ram. O desenvolvedores de hardware usavam isto para poder fazer pequenos testes sem precisar gravar uma EProm. Dá para fazer algo parecido com o ATmega? Sim, mas é bem mais trabalhoso e menos útil.

 

Vamos desmistificar o assunto. rs

Sobre o ponteiro de instruções apenas endereçar a memória de programa para executar os opcodes, concordo plenamente e não tem o que discutir.

Eu falei sobre o código não ser obrigatoriamente executado na FLASH. Continuo mantendo esta afirmação.

Desmistificando:

O programa que está se referindo é o que vai gravado na FLASH, e que seria o programa que vai realizar as tarefas que o usuário quer.Realmente ele precisa ser percorrido pelo ponteiro de instruções para funcionar.

O código ao qual me referi é sobre o código do programa (que fará as mesmas tarefas do código anterior), que será executado pelo S.O. (o S.O. sim é quem está gravado na FLASH), e que poderá ser lido de qualquer outro local. Nem que seja um pisca led, ele poderia caber na RAM.

Se baseando no Flash Endurance, você pode gravar o seu programa em qualquer região da memória FLASH. E para executá-lo basta deslocar o seu ponteiro de instruções para o ínicio deste programa. Correto? E acerto de endereços e etc, temos como ferramenta o LINKER que se vira com os endereços relativos. A única coisa que precisamos é saber o endereço do programa.

Realmente, gravar um programa a cada 10 minutos diminuiria bastante o Endurance do chip, mas dúvido que alguém fique trocando de programa tanto assim.

Ser trabalhoso e menos útil. Concordo em partes. Trabalhoso sim, mas será muito útil para o aprendizado. E qualquer idéia por mais doida que seja, durante os estudos é válida. E com o que se ganha(o aprendizado), certamente quando for produzir/fabricar muitas peças você saberá o que não se deve fazer. ^^

Gostei do mecanismo de teste dos monitores. Aliás, quando estudei sobre o 8051 e outros, a programação de estudo era também carregada em RAM. Mais dinâmico impossível. ^^

Hoje em dia só usam EEPROM nos monitores para guardar ajustes de cor, e outros.

A conversa está ficando legal. ^^

Abraços.

T++. ^^

Resumindo:    Dá pra gravar variáveis em memoria externa e o codigo executável tem que ir pra interna correto ?

 

   Pensando bem, temos que lembrar que apesar de vermos um programa em linguagem de alto nível como o C.   Quando ele é passado para o microcontrolador ele passa antes por um COMPILADOR, que o transforma em codigo de maquina,  ou seja,  00011100  zeros e uns,   já se colocarmos o porgrama em uma memoria eeprom como seria feita a compilação pra o microcontrolador conseguir entendê-lo ?

    Ai nesse momento, seguindo a lógica, eu acho que o Daniel Quadros tá correto !

 

    Parece que o jeito mesmo é ir atras de microcontroladores com mais memoria.

 

    Vou dar uma catada pra ver se acho COMO COLOCAR O BOOTLOADER DO ARDUINO NO ATMEGA644.

 

É exatamente esta a discussão Weider, sobre "como conseguir entender" um programa que pode estar armazenado externamente.

O mais fácil sem dúvidas é ter o programa que executará as tarefas gravado na FLASH e as variáveis gravadas em uma memória externa.

Agora pegando a sua pergunta: "se colocarmos o programa em uma memória eeprom, como seria feita a compilação para o microcontrolador entendê-lo?"

Neste caso leve em conta meus comentários, tem-se a opção de armazenar na EEPROM o programa já compilado, e no programa principal da FLASH, uma função que irá ler o programa da EEPROM e gravá-lo em uma região da própria FLASH, e depois move-se o ponteiro de instrução para o endereço deste novo programa. 

Ou tem-se um programa compilado de forma que um S.O. possa interpretá-lo.

Eu entendo que parece estranho, mas tem que conhecer como um sistema operacional e o microcontrolador funcionam em baixo nível. Só assim para entender tais possibilidades.

Como o foco não é o aprendizado, realmente um microcontrolador com mais memória seria a solução. ^^

Abraços.

T++. ^^

Olá Luis Farias,

    A ideia é justamente essa,  utlizar a IDE e a facilidade de programação do mundo arduino em um CI de maior capacidade que o ATMEGA328,  mas não utilizando placas prontas como o arduino UNO ou o Arduino MEGA,  a ideia seria ter mais memoria, mas que eu pudesse continuar criando minhas placas no EAGLE, e as fazendo manualmente,  seria o que é comumente chamado de STAND ALONE,  só que no momento que você utiliza o "arduino stand alone" e monta toda uma estrutura com relês, transistores, outros CIs com outras funções, etc. etc. etc.  você esta indo a um nível de desenvolvimento mais profissional,  onde o Atmega é simplesmente o coração dos projetos,  mas o todo vai alem de um simples prototipo arduinico.

Use o Atmel selector para encontrar a MCU que deseja:

http://www.atmel.com

Atmel MCU selector

Olá amigos,

  Penso ter chegado a um caminho a seguir, e agradeço ao amigo Flavio Bruzaca pela ideia.

   Já vinha estudando o Arduino em outros Atmegas mas não conhecia o 644.

   Encontrei o link abaixo, que é ... um passo de upgrade acima do 328.

   Ele tem praticamente tudo em dobro,  memoria programavel de 64k,  eeprom interna de 2k, 4k ram, 40 pinos  e o melhor de tudo é DIP e aceita o bootloader arduino.

   O problema agora é que em todo lugar que vi, fala-se que precisa de modificações e adaptações pra seu uso.

   Logo, precisaria entender se para liga-lo bastaria colocar os dois capacitores com cristal oscilador e o resistor no reset como o stand alone com 328, ou se a estrutura é outra.

   Já na IDE do arduino, como seleciona-lo ?   tem que incluir um novo modelo ?

Bem, achei esse link com o 644p já com o bootloader gravado:

ATMEGA644 COM BOOTLOADER ARDUINO

   

Eu ja criei uma pequena IDE.Agora estou criando outra.Para isso ,tive que estudar várias camadas de aplicações.Na plataforma que estou usando (que não é um avr,mas possui mesma técnica):

1)Codigo C é escrito na IDE (Considerando o C como linguagem)

2)Um arquivo de link é criado entre a IDE e o compilador

3)O Assembly é gerado no compilador com mnemônicos da arquitetura do chip (genericamente)

4)O hexadecimal é gerado apartir do mnemonico  (qual pode ser carregado no chip)

soluções

A)Uma memoria eeprom pode possuir programa compilado no formato hexadecimal

B)No item 2 da lista,o arquivo link deve ter setores configurados para incluir espaços que serão chamados para a flash apartir da eeprom .No compilador Cosmic qual trabalho,uso:

#pragma section (ESPACO)

void meu_programa()

{

leia_eeprom(); //invoca a leitura da eeprom com um programa compilado

bla;bla;//seu programa compilado no hexadecimal

}

#pragma section();// inicia setor quando chamado no código main.c do programa

No arquivo de link,adicionamos segmento do codigo :

...

+seg .ESPACO -a 0x4000 m-0x8000 -n .text

...

O "meu_programa" compilado será adicionado no segmento ".text" iniciando do endereço 0x4000 até máximo 0x8000

e será invocado quando em main.c for solicitado:

void main()

{

SE (CONDIÇÃO FOI ATINGIDA)

{

#pragma section(); //solicitado

}

}

Todo compilador tem um arquivo tipo link  ".id" onde é o esqueleto do mnemonico

Melhor do que falar é mostrar na prática!

Mandou bem Almir. =D

Veja esse site
https://github.com/ErikZalm/Marlin

Este é um firmware de impressora 3D tipo reprap, que possui as especificações do ATmega644p e do ATmega1284p os dois são formato DIP-40.

No aquivo do Github, Copie conteúdo da pasta "ArduinoAddons\Arduino_1.x.x\hardware\Sanguino" para o diretório de hardware do seu IDE arduino "C:\Program Files\Arduino\hardware"

Vai adicionar mais 4 opções no seu menu de boards:
Sanguino w/ Atmega644p
Sanguino w/ Atmega1284p 8mhz
Sanguino w/ Atmega1284p 16mhz
Sanguino w/ Atmega1284p 20mhz


O ATMEGA1284P-PU tem 128k de flash e 4k de EEPROM, 16k de RAM e tem preço menor ao Atmega644p-20pu em sites com ebay

Carlos Souza,

    Cara, tô chocado e maravilhado !

    Em todas as buscas que fiz, você foi o primeiro a falar do ATMEGA1284,   simplesmente FANTASTICO !!!

    Muito mais memoria programavel,  muito mais eeprom,  muito mais ram,  mais pinos, e é DIP  putz!!!   o bicho é incrível !

    Se você tiver mais informações sobre ele no mundo arduino por favor me passa,  sei que já devo agradecer pelo link que vocÊ passou,  confesso que não examinei ainda muito fundo,  mas já vou tentar entrar no ebay para comprar algumas peças.

valeu mesmo amigo,  obrigado.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço