INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Variablen Typ double, char, long aus ext. EEPROM lesen
30.03.2015, 13:06
Beitrag #1
Variablen Typ double, char, long aus ext. EEPROM lesen
Hallo Forum,
bin ganz frisch hier (Umsteiger von PIC auf ATMEL) und habe gleich ein Problem:
Da der EEPROM-Speicher des Arduino UNO begrenzt ist, möchte ich die Daten auf ein externes EEPROM auslagern und dort erweitern.

Das Datenhandling im internen EEPROM mache ich mit „EEPROMex.h“,. Damit lassen sich direkt alle Variablentypen (char, long, real, double usw.) schreiben, laden und einlesen.

Dies funktioniert mit diesem tool jedoch nur beim internen EEPROM.

Ok, den Transfer (Kopie) vom internen in das externe EEPROM mache ich dann mit dem Standard-tool „EEPROM.h“. Soweit so gut.

Jetzt meine Frage:

Wenn ich nun eine Variable (double) aus dem EEPROM mit EEPROM.h auslesen möchte geht das nur über das Einlesen der entsprechenden 4 Bytes, in der die Variable (Typ double) steht:
von=12; bis=(von+4);

for(address = von; address < bis; address++) {
Serial.print(readEEPROM(eeprom, address), HEX);
Serial.print(", ");:

Dann erhalte ich die Inhalte „9Ah, 8Fh, 89h, 42h“

und nun ???? weiss ich nicht mehr weiter, wie ich aus den 4 Bytes den (double) Wert (68.8 ...) zusammensetzen muss.

Vielleicht bin ich ja auch Betriebsblind? Ich Bitte um Hilfestellung.

Gruss
Sven
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.03.2015, 13:38
Beitrag #2
RE: Variablen Typ double, char, long aus ext. EEPROM lesen
Hi,
das müsste relativ einfach über einen Pointer-Cast gehen, oder?
Also wenn Du die 4 Bytes z.B. in einem Byte-Array hast, ungefähr so:
Code:
byte blabla[4];
// hier den Kram in blabla[0] bis [3] einlesen.
// und dann sowas:
double blubb = *((double*)blabla);
Ohne Gewähr, nur so eine Idee.
Oder Du machst das mit einem union...
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.03.2015, 21:07
Beitrag #3
RE: Variablen Typ double, char, long aus ext. EEPROM lesen
Hallo Thorsten,
herzlichen Dank für das schnelle feedback. Mit UNION kenne ich mich (noch) gar nicht aus. Habe Deine Idee aufgegriffen und wie folgt umgesetzt:

// double aus EEPROM lesen
#include <Wire.h>

byte out[4], Wert[4];
unsigned int address = 0; // Startadresse
double blubb = *((double*)Wert);
//
void setup(void)
{
Wert[0] = 0x9A; Wert[1] = 0x8F; Wert[2] = 0x89; Wert[3] = 0x42;
//
Serial.begin(9600);
Serial.print("double Wert: ");
Serial.println(blubb);
//
}
void loop() {
}

Das Ergebnis ist immer 0.00. Vielleicht habe ich es auch nicht korrekt umgesetzt. Die Idee klingt einfach, das gefällt mir.

Gruss
Sven
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.03.2015, 21:12
Beitrag #4
RE: Variablen Typ double, char, long aus ext. EEPROM lesen
Hi,
die Zuweisung zu blubb geht natürlich erst nachdem Du das Array Wert gefüllt hast.
D.h.
Code:
byte out[4], Wert[4];
unsigned int address = 0; // Startadresse
double blubb;
//
void setup(void)
{
Wert[0] = 0x9A; Wert[1] = 0x8F; Wert[2] = 0x89; Wert[3] = 0x42;
blubb = *((double*)Wert);
//
Serial.begin(9600);
Programme werden immer noch Schritt für Schritt abgearbeitet...
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.03.2015, 09:33 (Dieser Beitrag wurde zuletzt bearbeitet: 31.03.2015 09:36 von SternGucker.)
Beitrag #5
RE: Variablen Typ double, char, long aus ext. EEPROM lesen
Hallo Thorsten,

herzlichen Dank für Deine Hilfe. Ich habe verstanden, umgesetzt und es läuft!

Wozu benötige ich das Speichern in einem ext. EEPROM?

Nun ja, meine Teleskopsteuerung (mit PIC) soll nun um einige Feinheiten erweitert werden. Dazu gehört eine riesen Datenmenge an Sternen- und Nebelpositionen die abgespeichert werden wollen. Weiterhin habe ich als "Schmankerl" eine automatische, Datumsabhängige "Himmelsführung" mit Empfehlung und automatischem Anfahren der interessantesten Beobachtungsobjekte (Planeten, Sterne, Doppelsterne, Nebel und Galaxien) in Arbeit.

Aber nun kommt erstmal die Jahreszeit fürs Modellfliegen.

Da im Moment nur ein wilder Drahtverhau als Prüfaufbau besteht, die RTC und die Schrittmotoransteuerung noch in den ARDUINO einzupflegen ist, gibt es das Foto erst, wenn das Projekt einen zeigenswerten Fortschritt erreicht hat, Versprochen!

Achja, die aus dem EEPROM gelesene double Variable nenne ich natürlich BLOPP (wenn Du nichts dagegen hast).

Nochmals Danke!
Sven
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.03.2015, 10:34
Beitrag #6
RE: Variablen Typ double, char, long aus ext. EEPROM lesen
Hi,

hast Du Dir mal überlegt, dazu vielleicht einen "richtigen" Rechner einzusetzen, z.B. einen RasPi?
Beim EEPROM solltest Du auch bedenken, dass die Anzahl der Schreibzyklen begrenzt ist. Je nachdem, was Du da abspeicherst, solltest Du ggf. vorsichtig sein.

Ich erhebe keine Rechte auf Variablennamen. Ich erhebe nicht einmal Anspruch auf eine Patenschaft ;-)

Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.03.2015, 13:41
Beitrag #7
RE: Variablen Typ double, char, long aus ext. EEPROM lesen
Hallo Thorsten,

also die Datenbank wird 1x geladen und gut iss.

Rechenleistungsmäßig reicht der Arduino aus, braucht er doch nur die max. 10 Daten je Objekt auslesen. Die braucht auch nur alle 6 Minuten erfolgen.

Für die Berechnung der Ephemeriden (Planetenposition) braucht er 5-10 Millisekunden.

Die Nachführung über Schrittmotore erfolgt über Interrupt. Und beim Positionieren zählt er nur die Impulse bis die IST der SOLL-Position entspricht.

Also alles easy. Nur die Datenmenge fürs EEPROM halt (etwa 10 kB). Für das int. EEPROM habe ich mit einer abgespeckten Version geübt.

Die Schrittmotorsteuerung mit IMT 901 (von Nanotec) funktioniert mit meinem PIC schon seit 10 Jahren. Evtl. verkleinere ich die durch Verwendung von 2 Pollullus.
Aber die laufen bislang nicht so sauber wie die IMT´s, interessant sind sie wegen der 1/32er Mikroschritte. Der IMT schafft nur 1/16er.

Beim PIC habe ich alles in Assembler gemacht. Dann ist das mit dem Arduino schon erholsamer.

Vielleicht ergibt sich ja hier und da nochmal ne Frage. Ist schon Klasse, wenn man da nen "externen Trigger" hat. Manchmal ist man ja auch auf nem Holzweg.

Gruss
Sven
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.03.2015, 16:09
Beitrag #8
RE: Variablen Typ double, char, long aus ext. EEPROM lesen
(31.03.2015 13:41)SternGucker schrieb:  also die Datenbank wird 1x geladen und gut iss.
Na dann ist das ja kein Problem. Das Universum ist im großen und ganzen ja nicht sooo dynamisch...

Zitat:Nur die Datenmenge fürs EEPROM halt (etwa 10 kB).
Je nachdem, wie groß Dein Programm ist, hätte das vielleicht sogar ins Flash gepasst. Schau mal nach PROGMEM. Dadurch wird die Datenbank sozusagen Teil des Programms selbst.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  String in EEPROM Speichern BennIY 2 405 27.06.2016 10:23
Letzter Beitrag: BennIY
  Variablen over/underflow "deaktivieren" Scheams 6 223 23.06.2016 16:36
Letzter Beitrag: Scheams
  Rechnen mit float und unsigned long Rudi 3 300 03.06.2016 12:41
Letzter Beitrag: hotsystems
  Grundlagenfrage EEPROM Tobias1984 3 491 14.04.2016 10:43
Letzter Beitrag: Bitklopfer
  char zu int scritch 1 436 04.04.2016 16:19
Letzter Beitrag: rkuehle
  invalid conversion from 'const char*' to 'char' toto1975 8 869 31.03.2016 12:49
Letzter Beitrag: hotsystems
  char* inhalt in eine Datei auf SD-Karte schreiben MartinK 0 339 30.03.2016 16:42
Letzter Beitrag: MartinK
  Attempt to write outside of EEPROM memory anwo 1 375 12.02.2016 11:06
Letzter Beitrag: anwo
  Ins eeprom schreiben/lesen anwo 10 1.782 07.02.2016 20:05
Letzter Beitrag: rpt007
  Suche Konzept für ein Inhaltsverzeichnis eines EEPROM avoid 0 311 27.01.2016 10:49
Letzter Beitrag: avoid

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste