Ik ben eens aan het kijken geweest voor het lezen en schrijven naar de EEPROM. Dat ziet er op zich niet zo moeilijk uit.

Waar ik nog niet uitkom is het volgende:

Ik wil standaard iets in de EEPROM zetten. Als tijdens het programma een andere waarde wordt weggeschreven, dan moet deze nieuwe waarde na het resetten (power off/on) van de Atmel weer opgehaald worden.
Echter zie ik niet hoe ik de eerste waarde wegschrijf.

als ik bv het volgende doe:

Dim V as Eram Byte
Dim B As Byte
B = 10
'write value B to EEPROM
V = B
' read value B from EEPROM
B=V

do
incr B
'write value B to EEPROM
V = B
loop

Maar elke keer als ik de Atmel opnieuw laat starten zal B de waarde 10 zijn, terwijl hij dmet de laatste waarde moet opstarten.

Laat ik de eerste "write to EEPROM' weg dan zal B bij de eerste keer dat de processor opstart geen waarde hebben (terwijl ik dan wel wil)

Is het mogelijk om eerst de file te compileren (wordt er oop een EEPROM file gemaakt en deze te bewaren) en daarna de file nog eens te compileren, echter zonder de eerste "write to EEPROM' en daar alleen de HEX file van te gebruiken.

Of is er een nettere mannier hiervoor?

Kiter

Wat je zou kunnen doen is de waarde van de EEPROM locatie uitlezen, is deze $FF dan heb je te maken met een "maagdelijke" EEPROM en moet je m initialiseren op een default waarde.

Is de waarde iets anders dat is hij al reeds geinitialiseerd.

Groeten, Bram

Kan bascom niet iets als een variable declareren en deze een default value geven?

In assembly (en voor zover ik weet ook in C) wordt die default in code genegeerd, maar komt die in een file om in de EEPROM te blazen met programmeren terecht.

er bestaat een $eeprom commando. in samenwerking met data kun je dan een hex maken voor de eeprom. Hoef je alleen het lees gedeelte te doen.

Ja, die bestaat dus. Maar dan net even anders dan ik schetste :)

Hi bprosman,
Hier had ik inderdaad ook aan gedacht.
Maar het lijkt me dat er wel een nettere oplossing voor moet zijn.

Marco69,
Ik hed net even gekeken, maar ik snap het niet, maar mijn gevoel zegt dat dat niet werkt. Hij overschrijft dan bij herstart toch gewoon de data weer over?

Kan je anders eens een voorbeeld maken?

Eh... Gerwin geeft je toch net de oplossing? Kan ik het wel over gaan doen in assembly, maar dat schiet mi. dan niet zo op.

sorry marco69, maar mijn bericht was bedoelt voor Gerwin. Even niet goed opgelet!

Ah, maar ik kan het als niet-bascom gebruiker ook. :) Eerste hit van google.

Ik hed net even gekeken, maar ik snap het niet, maar mijn gevoel zegt dat dat niet werkt. Hij overschrijft dan bij herstart toch gewoon de data weer over?

Als je met het $EEPROM commando een .EEP file aanmaakt moet je uiteraard wel het eerste write statement er uit halen omdat er dan al een waarde in je EEPROM staat.

Groeten, Bram

Als je inderdaad eenmaal die file hebt kun je die regel er uit halen.

Waarna je wel handmatig de eeprom file moet uploaden, dat gebeurt niet automagisch.

Dus als ik het goed begrijp maakt je je gewone programma met Bascom en daarnaast maak je een separaat programma om alleen de EEPROM (eeps/hex) met waardes te vullen??!

Neen. Je bascom-compiler haalt (net als een C-compiler of een assembler) het spul uit 1 source file. Zoals in het voorbeeld achter mijn link staat...

Je mag in Bascom niet direct een ERAM variable INCR, je moet hem eerst over zetten naar een (tijdelijke) SRAM variable.
Dus;


Dim Tempb as byte, V as ERAM byte

Do
Tempb=V
Incr Tempb
V=TempB
waitms 100
Loop

Let wel op dat als je de loop 100000 laat lopen je Eeprom defect is.

ik heb het altijd zo gedaan.. als je hem dan weer oproept dan weet je zeker dat die waarde het is die je moet hebben

Dim Eeprombyte1 As Eram Byte At &H10
Dim Eeprombyte2 As Eram Byte At &H20

zorg wel dat je niet te vaak iets wegschrijft naar het eeprom, want zoals hier al gezegt word gaat die naar een 1000000 keer naar zn grootje

want zoals hier al gezegtd wordt gaat die naar een 1000000 keer naar z'n grootje

Dat valt ook wel mee. 100000 is het minimum wat Atmel spect. Als test heb ik het wel eens het 10-voudige gedaan. Zonder probleem. Hoe 'dement' die cell daarna is weet ik niet. Een paar dagen ging in elk geval nog goed...