www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Daten vom ADC in externen Speicher schreiben


Autor: Matthias Stoll (menolix)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Niels Huesken (monarch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo genau liegt denn dein problem?
Brauchst du ne schaltung, Programmcode (wenn ja, welche
entwicklungsumgebung) usw?

Autor: Matthias Stoll (menolix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die Hardware ist fertig, aber mir fehlt das Verständnis, für den
Programmablauf. Ich programmiere in C mit dem µC51 von
www.wickenhäuser.com

Die Namen der Ports usw. habe ich mir aus der Beschreibung
rausgesucht.

Menolix

Autor: Niels Huesken (monarch)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Matthias Stoll (menolix)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias Stoll (menolix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich fange mit der Programmierung eines MSC1210 gerade an und benötige
sehr detaillierte Informationen.

Danke

Autor: Niels Huesken (monarch)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Matthias Stoll (menolix)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Niels Huesken (monarch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
62256 ist ein normaler Standard SRAM-Typ. Verdrahtung hört sich gut an.
Demnach liegt der extrne Speicher ab Speicheradresse 0x8000 bis 0xFFFF.
Wie man den jetzt in C anspricht, weiss ich leider auch nicht.

Autor: Niels Huesken (monarch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh sorry...negation!
0x0000-0x7fff

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Menolix (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für den Tip, Peter,

das checke ich gleich mal.

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

Menolix

Autor: Niels Huesken (monarch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab mich mal eben schlau gemacht. Vermutlich wäre es so am einfachsten:
 xdata float xyz[8192]; // 8192 32-bit values sind 32KB
 for (cou=0;cou<8192;cou++)
      xyz[cou]=getADC();


Aber mein vorredner hat schon recht. Wenns geht, solltest du die
unsigned shorts nehmen.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Niels Huesken (monarch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich glaube, bei Herrn "Menolix" handelt es sich um einen nicht allzu
erfahrenen Programmierer. Also halten wir doch einfach mal, das
theoretische etwas bei Seite....

Autor: Menolix (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.