mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik daten speichern


Autor: manfred (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kann mir jemand sagen wie ich die daten in ein assemblerprogramm 
"verpacken" muss um sie dann mir hilfe der mir bereits vorliegenden 
standartroutinen in ein externes eeprom über den i²c bus abzulegen?
ich weiss nicht wie ich das progamm hinbekomme! also woher die 
routinenbefehle  denn wissen was genau sie ablegen sollen. die routinen 
fürs speichern und lesen des eeproms sowie des busses habe ich. mir 
fehlt das "drumherum" :-)

hat irgendwer ein programm vorliegen?
Wäre sehr zu Dank verpflichtet

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo manfred,

für welchen Controller denn ?

Gruss Otto

Autor: Sigint 112 (sigint)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die interesanntere Frage wäre noch,
 welche Routinen du hast... davon hängt ab, wie du die Daten "verpacken" 
musst. Erwarten die Routinen die Daten in einem Register, oder kannst du 
einen Pointer übergeben, oder werden die Daten auf dem Stack 
übergeben.... Fragen über Fragen.

Gruß,
  SIGINT

Autor: manfred (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich beutze den atmel 89s51!

Autor: mitch (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
@sigint 112 hier die routinen die ich mir gemacht habe

Autor: Sigint 112 (sigint)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Och nee,
  bitte keine proprietären Formate... sowas schau ich mir nicht an.
Mit PDF kann ich noch leben... aber DOC!!!

Autor: manfred (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Sorry! Jetzt noch mal als PDF :-)

Autor: Sigint 112 (sigint)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi manfred,
  ich gehe mal nicht davon aus, daß das dein ganzes Programm ist. Falls 
ja, dann würde ich an deiner Stelle noch ein paar Tutorials durchlesen.
Ok, dann fang ich mal an:
Dein Programm fängt ja bei start: an... aber dort stehen nur zwei 
Befehle (setb) bevor der Controller fälschlicherweise in eine 
Unterroutine reinläuft (I2C_start:) die mit ret beendet wird. Da muss es 
knallen, da der Stack noch nicht initialisiert wurde und die 
Unterroutine nicht mit Call aufgerufen wurde. Der 8051 popt bei ret also 
irgendwas vom nicht initialisierten Stack und springt ins Nirvana.

I2C_start sieht soweit ok aus.. I2C_stop auch.

I2C_shout und I2C_shin sehen für mich auch gut aus.

I2C_ack und I2C_nak dito...


Nun wird es aber abenteuerlich:
Die Routine PCF85491C_put kann so garnicht funktionieren.
Du schickst dem PCF zwar ein Byte... und das auch richtig, aaaaber du 
schickst dann direkt ein I2C_stop. Das ist falsch, wenn du dir mal das 
Datenblatt vom PCF anschaust:
Nach dem ACK vom Slave musst du ohne den I2C-Bus zu stoppen die weiteren 
Daten schicken. Das wären beim PCF die Word-Adresse gefolgt von den 
Daten, die du speichern möchtest.


Die Routine PCF85941C_get scheint aber OK zu sein.

Musst also nocht etwas am Code arbeiten... aber die Richtung stimmt 
schon.

Gruß,
  SIGINT

Autor: manfred (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für deine bemühungen. ist echt nett von dir. wenn du tipps hast, 
einfach schreiben, da ich über alles sehr dankbar bin

Autor: Sigint 112 (sigint)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nun ja,
  es stellt sich die Frage, wie du das Datenwort und die Adresse (an der 
das Datenwort geschrieben werden soll) an die Unterroutine übergibst.
Wenn du jeweils nur ein Byte schreiben möchtest,dann würde ich die 
Adresse in ACC und das Datenwort in B übergeben.
Dann würde das etwa so Funktionieren:

PCF85941C_put: ;Senden eines Bytes in den Speicher hinein!
LCALL I2C_start
jc PCF85941C_put_err
PUSH ACC
mov a,#PCF85941C_ADR
LCALL I2C_shout
POP ACC
jc PCF85941C_put_err
LCALL I2C_shout
jc PCF85941C_put_err
MOV A,B
LCALL I2C_shout
PCF85941C_put_err:
LCALL I2C_stop
RET

By the way:
  Die Adressen der einzelnen PCF können so überigens nicht richtig 
sein... schau mal im Datenblatt nach der richtigen Adresse.

Gruß,
  SIGINT

Autor: manfred (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, mit der Adressierung gebe ich dir recht. Also ich muss versuchen das 
ich vier serielle EEPROMS vom Typ 24C512 ansteuern kann. Die haben ja 
jeweils eine Daten und eine Clockleitung. Daher vier Adressen (0;0 1;0 
0;1 1;1).
Ich komm da irgendwie nicht mit klar die zu Adressieren der Bausteine 
untereinander und die Daten „zu verpacken“ um sie in einem der IC 
abzulegen.
Das ist ja mein Problem an dem ich verzweifel. Ich bin ja froh dass du 
dir schon so viel Mühe mit mir gibst.
In dem Datenblatt vom 24c512 steht ja, dass ich Page write machen kann. 
So stelle ich mir das ja vor.
Ist echt kniffelig...

Autor: manfred (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, mit der Adressierung gebe ich dir recht. Also ich muss versuchen das
ich vier serielle EEPROMS vom Typ 24C512 ansteuern kann. Die haben ja
jeweils eine Daten und eine Clockleitung. Daher vier Adressen (0;0 1;0
0;1 1;1).
Ich komm da irgendwie nicht mit klar die zu Adressieren der Bausteine
untereinander und die Daten „zu verpacken“ um sie in einem der IC
abzulegen.
Das ist ja mein Problem an dem ich verzweifel. Ich bin ja froh dass du
dir schon so viel Mühe mit mir gibst.
In dem Datenblatt vom 24c512 steht ja, dass ich Page write machen kann.
So stelle ich mir das ja vor.
Ist echt kniffelig...

Autor: manfred (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hat noch jemand tipps

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.