PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kleine Frage zum Speichern auf EEprom



hunni
16.04.2009, 19:35
Hallo,
ich habe eine Frage zum Abspeichern auf das interne EEprom des Atmels.

Mal angenommen ich möchte jetzt 3000 Werte abspeichern. Wenn ich das alles auf ein Label speichern möchte, muss ich dann auch 3000 mal 0,0,0,0,0,0 usw. schreiben? Oder geht das auch anders?


'-----------------------------------------------------------------------------------------

'name : eeprom2.bas

'copyright : (c) 1995-2005, MCS Electronics

'purpose : shows how to use labels with READEEPROM

'micro : Mega48

'suited for demo : yes

'commercial addon needed : no

'-----------------------------------------------------------------------------------------



$regfile = "m48def.dat" ' specify the used micro

$crystal = 4000000 ' used crystal frequency

$baud = 19200 ' use baud rate

$hwstack = 32 ' default use 32 for the hardware stack

$swstack = 10 ' default use 10 for the SW stack

$framesize = 40 ' default use 40 for the frame space



'first dimension a variable

Dim B As Byte

Dim Yes As String * 1



'Usage for readeeprom and writeeprom :

'readeeprom var, address



'A new option is to use a label for the address of the data

'Since this data is in an external file and not in the code the eeprom data

'should be specified first. This in contrast with the normal DATA lines which must

'be placed at the end of your program!!



'first tell the compiler that we are using EEPROM to store the DATA

$eeprom



'the generated EEP file is a binary file.

'Use $EEPROMHEX to create an Intel Hex file usable with AVR Studio.

'$eepromhex



'specify a label

Label1:

Data 1 , 2 , 3 , 4 , 5

Label2:

Data 10 , 20 , 30 , 40 , 50



'Switch back to normal data lines in case they are used

$data



'All the code above does not generate real object code

'It only creates a file with the EEP extension



'Use the new label option

Readeeprom B , Label1

Print B 'prints 1

'Succesive reads will read the next value

'But the first time the label must be specified so the start is known

Readeeprom B

Print B 'prints 2



Readeeprom B , Label2

Print B 'prints 10

Readeeprom B

Print B 'prints 20



'And it works for writing too :

'but since the programming can interfere we add a stop here

Input "Ready?" , Yes

B = 100

Writeeeprom B , Label1

B = 101

Writeeeprom B



'read it back

Readeeprom B , Label1

Print B 'prints 1

'Succesive reads will read the next value

'But the first time the label must be specified so the start is known

Readeeprom B

Print B 'prints 2

End



Das ist nur das beispiel prog von Bascom. Das Prinzip habe ich verstanden, leider aber noch nicht die Details.
Hunni

Besserwessi
16.04.2009, 20:19
Für 3000 Werte ist das EEPROM vermutlich zu klein. Erst der Mega128 hat 4 kbytes EERPOM. Das würde dann aber auch nur für Byte Werte reichen, oder halt 2000 Integers.

hunni
16.04.2009, 20:22
ja das war jetzt übertrieben, sollte nur als beispiel sein

Jaecko
16.04.2009, 21:36
In dem Fall würd ich einfach ne Schleife aufbauen die bis z.B. 3000 zählt und darin dann über WriteEEProm den Wert in den EEProm schreiben; die Zählvariable dabei als Zieladresse verwenden.

hunni
16.04.2009, 21:47
also kann man auch im eeprom modus eine schleife bauen, oder wie soll ich das verstehn. Kann ich 3000 mal writeeeprom schreiben, obwohl ich im eeprom modus nur 3 mal Data 10 , 20 , 30 geschrieben hab.

hunni
16.04.2009, 21:53
Ahh cool habs gerad verstanden hoffe ich

'-----------------------------------------------------------------------------------------

'name : eeprom2.bas

'copyright : (c) 1995-2005, MCS Electronics

'purpose : shows how to use labels with READEEPROM

'micro : Mega48

'suited for demo : yes

'commercial addon needed : no

'-----------------------------------------------------------------------------------------



$regfile = "m48def.dat" ' specify the used micro

$crystal = 4000000 ' used crystal frequency

$baud = 19200 ' use baud rate

$hwstack = 32 ' default use 32 for the hardware stack

$swstack = 10 ' default use 10 for the SW stack

$framesize = 40 ' default use 40 for the frame space





Dim B As Byte

Dim Yes As String * 1

Dim A As Word



$eeprom






Label1:

Data 1 , 2 , 3 , 4 , 5

Label2:

Data 10 , 20 , 30 , 40 , 50





$data






For A = 1 To 100
B = A
Writeeeprom B , Label1
Next A

For A = 1 To 200

Readeeprom B , Label1
Print A
Next A

End



Ist ein kleines Beispiel prog von mir