Daten vom ADC in externen Speicher schreiben

OP #213763
Lesenswert?

Hallo,

vielleicht könnt Ihr mir helfen. Möchte die Daten, die ich von einem
AD-Wandler kriege, in einen externen 32k Speicher schreiben. Ich
benutze den MSC1210Y4, einen µC mit integriertem ADC. Bin mit der
Materie aber noch nicht vertraut und finde keine Infos mehr im Netz.

Gruß
Menolix
#213766
Lesenswert?

Ohne jetzt den Controler und Hardware grossartig zu kennen würde ich
folgendermaszen vorgehen:

1. Hardware inititialisieren (ADC, Interrupts, Stack etc)
2. ADC wert anfragen
3. warten auf ADC bis Wert fertig
4. ADC Wert holen
5. ADC Wert in speicher schreiben.
6. zurück zu 2

Das wäre der einfachste Weg.
OP #213767
Lesenswert?

so denke ich auch.
nur der Schritt von 4 nach 5 ist mir nicht ganz klar.
ich habe den Wert vom Typ float in der Variablen temp. Wie schaffe ich
es jetzt, diesen Wert in einen externen 32K (HY62256A) Speicherbaustein
zu schreiben. Es ist alles wie vorgesehen angeschlossen. der /OE an A15,
also P2.7 (oder P2_B7)

Menolix
#213769
Lesenswert?

Das Letzte mal, das ich es mit einem 8051 zu tun hatte, ist knapp 10
Jahre her. Man möge mir eventuelle Fehleinschätzungen verzeihen.

Wenn ich mich richtig erinnere, Adressiert der 8051 den externen
Speicher über das 8-bitRegisterpaar H und L. Ich weiss nicht, ob der
assembler dir diesen Umstand abnimmt.

Ich würde sagen, dir bleiben 2 möglichkeiten: a.)du rechnest der
Floatwert so um, das er in ein byte past. b.) du nimmst den float wert
selbst, zeigst mit einem char-pointer drauf und speicherst die
einzelnen Bytes ab.

zu a.)
Liegt der float wert beispielsweise innerhalb von 40.5 und 100, würde
ich ihn so umscalieren, das er in ein unsigned char reinpasst (0-255)
(unsigned char)byteval=(float)floatval-40.5*4.2857;

zu b.)
ist das float-typ beispielsweise 4byte gross:
unsigned char *bytes=(unsigned char)&floatvar;
for (cou=0;cou<4;cou++) {
   *EXTMEM=*bytes;
    bytes++;
}

Hoffe, das hilft ein wenig....zumindest als gedankenschubser...
OP #213770
Lesenswert?

macht nichts... die Idee ist gut. Punkt b klingt vielversprechend. Werde
es damit mal versuchen.

Sollten andere dies lesen, habe mich im letzen Posting vertan.

The extern memory is an HY62256A.
/OE is connected to /RD
/WE -> /WR
/CS ->  A15 (or P2.7 P2_B7)

Vielen Dank erstmal, die nächsten Fragen kommen bestimmt ;-)

greetings
Menolix
#213773
Lesenswert?

Ich vermute mal, der Wickenhäuser hält sich an den Quasi-standard Keil,
dann ist das Zauberwort "xdata".

D.h. alle Variablen, die als xdata deklariert werden, landen im
externen RAM.

Allerdings ist float Perlen vor die Säue !

Der ADC wird ja wohl kaum float ausgeben, d.h. Du sparst massig
Speicherplatz und CPU-Zeit, wenn Du die Werte genau so abspeicherst,
wie der ADC sie liefert (2 Byte = unsigned short).


Peter
#213776
Lesenswert?

"Aber mit "Perlen vor die Säue" irrst Du Dich, da der ADC 24 Bit
hat,
und ich brauche jedes einzelne davon :-)"

float sind 4 Byte, 24 Bit nur 3 Byte, Du kannst also locker 25%
sparen.

Auch ist die Frage, was Du hinterher machen willst, d.h. ob die
float-Werte überhaupt benötigt werden.
Z.B. Werte anzeigen geht auch prima in long, oder gleitendes Mittel
über 256 Werte usw.


Peter
Gast #213778
Lesenswert?

Ja, es stimmt. Habe zwar im Studium programmieren gelernt, ist aber
schon ein bißchen her. Aber das mit den 3 Byte 3*8 = 24 und nicht 32,
ist schon klar.

Arbeite mich gerade in ein neues Projekt ein, dass mit
µC-Programmierung zu tun hat.

Wenn Ihr noch weitere Infos habt, oder ne Webseite kennt, wo ich gute
Infos finde, wäre Euch sehr dankbar.

Menolix

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren