Internes ATmega48 EEPROM schreiben/lesen

Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 31 10 2024  22:34:57      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Microcontroller        Microcontroller : Hardware - Software - Ideen - Projekte


Autor
Internes ATmega48 EEPROM schreiben/lesen

    







BID = 432205

stuckima

Neu hier



Beiträge: 26
Wohnort: Schweiz, Bern
 

  


Hallo zusammen

Ich habe wieder einmal ein Problem und möchte gerne eure Hilfe beanspruchen.

Folgendes:

Ich will mit meine ATmega48 das interne EEPROM verwenden.
Also habe ich im Datenblatt geschaut und auch im Internet. Als ich dann einen kleinen Überblick hatte kopierte ich das C Code Beispiel aus dem Datenblatt in meinen Code hinein.
Dort Programmierte ich dann folgende Funktion:
Über einen Schalter wird ein analoger Wert eingelesen und gleich auf das EEPROM gespeichert. Mit einem anderen Schalter wird dann dieser Wert mit der Seriellen Schnittstelle übertragen und auf dem HyperTerminal dargestellt.
Serielle Schnittstelle (UART) und Analog Digital Wandler funktionieren.

Leider funktioniert dieses Programm nicht. Das HyperTerminal gibt keine Zeichen aus man kann aber erkennen, dass der Cursor vorwärts geht.


Kann mir vielleicht jemand ein C Code Beispiel zeigen wo das EEPROM beschrieben und gelesen wird?
Oder sonst ein gute Seite zu diesem Problem. Denn ich habe wie es scheint das ganze EEPROM Zeugs noch nicht richtig Begriffen.

Ich danke euch schon einmal.

Gruss Mathias


[ Diese Nachricht wurde geändert von: stuckima am 25 Mai 2007 10:57 ]

BID = 432211

hajos118

Schreibmaschine



Beiträge: 2453
Wohnort: Untermaiselstein

 

  

Typischerweise greife ich auf das eeprom mit den Funktionen aus eeprom.h zu (bei mir -> C:\WinAVR\avr\include\avr\eeprom.h)

Darin sind ASM - Routinen definiert, welche den Zugriff dann ausführen.

Hat eigentlich immer geklappt (also hab' ich auch nicht die einzelnen Routinen aus dem headerfile "zerpflückt").

BID = 432247

stuckima

Neu hier



Beiträge: 26
Wohnort: Schweiz, Bern

Danke für die schnelle Antwort.

habe meinen Code so angepasst:



Code :

eeprom_write_byte ( 0x000A, ADC_Result ); //ADC Wert in EEPROM Speichern --> Adresse 0x000A





Code :

EEPROM_Data = eeprom_read_byte ( 0x000A ); //EEPROM Wert aus Adresse 0x000A lesen und auf Variable Speichern



Nun bekomme ich aber diese Fehlermeldung beim kompilieren:

../EEPROM_test.c:128: warning: passing argument 1 of 'eeprom_write_byte' makes pointer from integer without a cast


Jetzt habe ich leider keine Ahnung (mehr) von Pointer. Was muss ich alles anschauen und lernen damit ich das EEPROM unter AVR verstehe und auch verwenden kann?

BID = 432258

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

So Datenblätter werden ja nicht umsonst gemacht, da sind alle Register erklärt, die man beschreiben muss, in welcher Reihenfolge und welche Funktionen jedes Bit innerhalb eines Registers hat.
Jetzt nimmst du einfach dein Datenblatt, guckst, welche Bits wie zu beschreiben sind und machst dann das nächste Register.

Mach mal nen Vorschalg und wir werden dir dann gerne weiterhelfen

PS:

Zitat :

eeprom_write_byte' makes pointer from integer without a cast

Du musst die Adresse der Variablen übergeben, das kannst du mit dem Adressoperator & machen:

Beispiel:

void sub_programm(unsigned char *argument)
{
...
};

Aufruf:

unsigned char var_1=0x10; //oder so

//unterprogramm aufrufen und Adresse von var_1 übergeben:

sub_programm(&var_1);

_________________

BID = 432261

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

So Datenblätter werden ja nicht umsonst gemacht, da sind alle Register erklärt, die man beschreiben muss, in welcher Reihenfolge und welche Funktionen jedes Bit innerhalb eines Registers hat.
Jetzt nimmst du einfach dein Datenblatt, guckst, welche Bits wie zu beschreiben sind und machst dann das nächste Register.

Mach mal nen Vorschalg und wir werden dir dann gerne weiterhelfen

PS:

Zitat :

eeprom_write_byte' makes pointer from integer without a cast

Du musst die Adresse der Variablen übergeben, das kannst du mit dem Adressoperator & machen:

Beispiel:

void sub_programm(unsigned char *argument)
{
...
};

Aufruf:

unsigned char var_1=0x10; //oder so

//unterprogramm aufrufen und Adresse von var_1 übergeben:

sub_programm(&var_1);

_________________

BID = 432276

stuckima

Neu hier



Beiträge: 26
Wohnort: Schweiz, Bern

So mittlerweile hat es geklappt!!
Ich danke vielmals.

Folgendes hat mir geholfen:


Zitat :
Typischerweise greife ich auf das eeprom mit den Funktionen aus eeprom.h zu (bei mir -> C:WinAVRavrincludeavreeprom.h)

Darin sind ASM - Routinen definiert, welche den Zugriff dann ausführen.


Zitat :
Du musst die Adresse der Variablen übergeben, das kannst du mit dem Adressoperator & machen:

Beispiel:

void sub_programm(unsigned char *argument)
{
...
};

Aufruf:

unsigned char var_1=0x10; //oder so

//unterprogramm aufrufen und Adresse von var_1 übergeben:

sub_programm(&var_1);



Momentan verstehe ich noch nicht ganz was ich mache. Aber jetzt werde ich noch die Pointer studieren und auch noch einmal genau das Datenblatt lesen.

Wünsche ein schönes Wochenende

Gruss Mathias

BID = 432289

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

Kurz zu Pointern:

Wenn man bei Funktionen beispielsweise Parameter übergibt, dann kann man das auf zwei Wege tun:

- Ich übergebe den Wert einer Variablen (geht für z.b. ein Byte schneller, für einen String unpraktisch/bis unmöglich beim AVR)
- Ich übergebe die Adresse (z.b. bei einer Variablen mit nur einem Byte) oder die Adressbasis (bei einer Variablen, die mehr als ein Byte belegt die Adresse der ersten Zelle)

Beispiel:

unsigned short a=0xFFFF; //Variable a vom Typ unsigned short

unsigned short *pa=&a; //Zeiger pa (pointer auf a) vom Typ Zeiger auf unsigned short



_________________


[ Diese Nachricht wurde geändert von: DonComi am 25 Mai 2007 17:24 ]


Zurück zur Seite 1 im Unterforum          Vorheriges Thema Nächstes Thema 


Zum Ersatzteileshop


Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum       Datenschutz       Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland       

gerechnet auf die letzten 30 Tage haben wir 23 Beiträge im Durchschnitt pro Tag       heute wurden bisher 18 Beiträge verfasst
© x sparkkelsputz        Besucher : 182264286   Heute : 4180    Gestern : 4669    Online : 539        31.10.2024    22:34
1 Besucher in den letzten 60 Sekunden        alle 60.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0442109107971