Forum: Mikrocontroller und Digitale Elektronik daten speichern


von manfred (Gast)


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

von Otto (Gast)


Lesenswert?

Hallo manfred,

für welchen Controller denn ?

Gruss Otto

von Sigint 112 (sigint)


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

von manfred (Gast)


Lesenswert?

ich beutze den atmel 89s51!

von mitch (Gast)


Angehängte Dateien:

Lesenswert?

@sigint 112 hier die routinen die ich mir gemacht habe

von Sigint 112 (sigint)


Lesenswert?

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

von manfred (Gast)


Angehängte Dateien:

Lesenswert?

Sorry! Jetzt noch mal als PDF :-)

von Sigint 112 (sigint)


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

von manfred (Gast)


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

von Sigint 112 (sigint)


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:
1
PCF85941C_put: ;Senden eines Bytes in den Speicher hinein!
2
LCALL I2C_start
3
jc PCF85941C_put_err
4
PUSH ACC
5
mov a,#PCF85941C_ADR
6
LCALL I2C_shout
7
POP ACC
8
jc PCF85941C_put_err
9
LCALL I2C_shout
10
jc PCF85941C_put_err
11
MOV A,B
12
LCALL I2C_shout
13
PCF85941C_put_err:
14
LCALL I2C_stop
15
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

von manfred (Gast)


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...

von manfred (Gast)


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...

von manfred (Gast)


Lesenswert?

hat noch jemand tipps

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.