Forum: Mikrocontroller und Digitale Elektronik I²C Speicher


von Manfred (Gast)


Angehängte Dateien:

Lesenswert?

Hallo!
Ich habe mein Programm, mit dem ich vier externe 24C512 EEPROMS 
ansteuern möchte vervollständigt. Auf dem Oszilloskop kann ich auch das 
Clocksignal und ein fehlerhaftes Datensignal verfolgen. Ich kann dort 
lediglich die Start und die Stoppbedingung erkennen.
Ich würde mich darüber freuen wenn mal "fremde Augen" ein Blick auf mein 
Programm werfen würden. Habe dieses als PDF angefügt. Es wird ein 89S52 
verwendet, der über I²C Bus mit dem Speicher verbunden ist. In diesem 
Programm wird erst einmal lediglich auf EEPROM 4 zugegriffen!
Danke für Eure Hilfe im vorraus!

von Peter D. (peda)


Lesenswert?

Was soll der Unsinn mit dem PDF ?

Quelltexte werden immer in ASCII gepostet !


Peter

von norad (Gast)


Lesenswert?

@Manfred

Deine Sende Routine ist falsch!
Das Acknowledge bit musst Du nicht senden sondern nur abfragen!

mov B,#9b ????   sollte doch sicherlich mov B,#07h sein oder ?
willst ja nur 8 Datenbits übertragen nicht 155 ;)

Hier mal ein Codeschnipsel von mir.



;Sendet ein Datenbyte über den I²C-Bus
;Register.
;  se_buffer = Datenbyte
;  R3 = Zähler für 8 Durchläufe
;Akkuinhalt wird zerstört

I2C_WBYTE:
  PUSH PSW
  PUSH REG3
  MOV A,se_buffer
  For REG3 = #0 To #7
   RLC  A
   MOV  SDA,C
   NOP
   SETB SCL
   NOP
   CLR   SCL
  Next
  NOP
  SETB SDA            ;Setzen zum abfragen des ACK vom externen Baustein
  NOP
  SETB SCL            ;ACK übernehmen
  MOV  C,SDA
  If BIT C  Then      ;Wenn Carry Bit nicht gesetzt ist, Verbindung 
abbrechen
   SETB error      ;Fehlerbit setzen! (wird nicht verwendet im Moment)
   LCALL I2C_STOP
  End If
  NOP
  CLR SCL
  POP REG3
  POP PSW
RET

Gruß
norad

von Manfred (Gast)


Lesenswert?

@norad
Ich bedanke mich für Deine Hilfe!
Werde es hoffentlich gleich noch testen können:-)
Und sorry an denen, die meine PDF stört!

von Magnus Müller (Gast)


Lesenswert?

Peter Dannegger wrote:
> Was soll der Unsinn mit dem PDF ?
>
> Quelltexte werden immer in ASCII gepostet !
>
>
> Peter

Na ja... ".pdf" ist doch immer noch besser als ".doc", oder?

Gruß,
Magnetus

von Peter D. (peda)


Lesenswert?

Magnus Müller wrote:

> Na ja... ".pdf" ist doch immer noch besser als ".doc", oder?

Nein, beides ist gleich schlecht.
Wie soll man denn dann syntax highlighting und Tests machen ?
Außerdem können durch die Umwandlung zusätzliche Fehler entstehen.


Was ist denn so schwer daran, genau das Source-File zu schicken, mit dem 
Du den Assembler/Compiler fütterst ?


Peter

von manfred (Gast)


Lesenswert?

Habe die Änderungen eingesetzt. Kann jetzt Start und Stoppbedingung 
erkennen. Auch das Clocksignal ist gut. Ebenfalls das Ack. Aber die 
"Verfluchten" Daten bekomm ich einfach nicht auf das Signal!

von Peter D. (peda)


Lesenswert?

manfred wrote:
> Aber die
> "Verfluchten" Daten bekomm ich einfach nicht auf das Signal!

Wenn Du nicht den geänderten assemblierbaren Code reinstellst, mußt Du 
den Fehler selber suchen.

Das Ausweinen hier nützt höchstens Deiner Psyche.


Peter

von manfred (Gast)


Lesenswert?

Was soll ich denn posten?
Arbeite mit dem Jens File Editor.
Da gibt es einmal die sogenannte .asm Datei und die .lst.
Wie möchtest du den Code denn haben? Ich dachte eigentlich als ich die 
Frage stellte, stell die lieber als PDF rein, das kann jeder öffnen!

von norad (Gast)


Lesenswert?

@Manfred!

 Ich geh mal davon aus das Du auch, das "große 51er Anwenderhanbuch" 
hast.
Kapitel 17 wird beschrieben wie es geht.

So wie ich es sehe hast Du die Adresse nicht richtig eingestellt in "".
Vollständige Adresse müsste in der Form stehen:

S|1|0|1|0|A1|A2|B|R/W|ACK

S     Startbedingung
1010b Feste Adresse des EEPROM
A1/A0 Individuelle Adresse
B     Blockselect
R/W   Read/Write Modus
ACK   Acknowlege - Bit

In dem Büchelein steht auch drin, dass es einen Multibyte- und Page -
Mode gibt.

Hardwarebeschaltung muss man auch beachten z.b Schreibschutz PRE 
Anschluss.

Wie es mit deinem Chip aussieht  musst Du halt mal Gucken.


Schreibaequenz im Byte-Modus:
Startbedingung -> Slave Adresse mit R/W senden --> ACK vom Slave 
abfragen
--> Byte Adresse senden-> ACK abfragen--> Daten zum EEPROM senden
--> ACK vom Slave abfragen --> Stopp bedingung senden

Also denn ganzen klateratatsch pro Byte.

Multi-mode:
Start bedingung -> Slave Adresse mit R/W -> Ack abfragen -> Byte Adresse
-> ACK abfragen -> 1 Byte senden -> ACK abfragen -> 2 Byte usw.
zum schluss ACK abfragen und Stop bedingung senden.

Gruß
norad

von Peter D. (peda)


Lesenswert?

manfred wrote:
> Was soll ich denn posten?
> Arbeite mit dem Jens File Editor.

Du verblüffst mich.

Wie kann man denn ein File öffnen, dort seinen Text eintippen, es 
abspeichern und übersetzen ohne zu wissen, wie es heißt ?

Wie findest Du denn dann ein altes Sourcefile wieder ?

Wie sicherst Du es ?

Schreiben sich die Programme bei Dir alleine oder mußt Du sie auch 
eintippen ?

Dann muß doch in der Editorstatuszeile stehen, wie das File heißt.
Spätestens beim Sichern muß Name + Erweiterung dastehen.


> Da gibt es einmal die sogenannte .asm Datei und die .lst.

Das, was Du selber getippt hast.


> Wie möchtest du den Code denn haben? Ich dachte eigentlich als ich die
> Frage stellte, stell die lieber als PDF rein, das kann jeder öffnen!

Nun dann versuch mal ein PDF im Editor zu öffnen und zu assemblieren, 
der Assembler wird Dir was husten.


Peter


P.S.:
Spourcen sind immer reine Textfiles (pure ASCII).
Sie lassen sich ausnahmslos mit jedem Editor lesen (Notepad usw.)
Sie lassen sich auch ganz ohne Editor lesen:

type test.asm

von norad (Gast)


Lesenswert?

@Peter

Ich denke Du bist zu streng mit ihm.

Schliesslich kann man ja im PDF Text Markieren und Kopieren und dann in 
einem Texteditor abspeichern.

Manchmal bist Du schon kleinlich. Sorry nicht böse sein Peter.

Gruß
norad

von Falk (Gast)


Lesenswert?

@norad

>Ich denke Du bist zu streng mit ihm.

Das denke ich nicht.

>Schliesslich kann man ja im PDF Text Markieren und Kopieren und dann in
>einem Texteditor abspeichern.

Warum kann man nicht einfach den Quelltext anhängen und gut? Den 
PDF-Konverter starten ist Zusatzaufwand, der zudem massiv 
kontraproduktiv ist.

>Manchmal bist Du schon kleinlich. Sorry nicht böse sein Peter.

Hat nix mit Kleinlichkeit zu tun, sondern das sind Grundlagen. Und wenn 
kleine Kinder Mist machen, dann müssen die Eltern halt mal streng sein 
un ne Ansage machen.
Sinngemäss ist es auch hier so.

MfG
Falk

von Mullemaus (Gast)


Lesenswert?

"Hat nix mit Kleinlichkeit zu tun, sondern das sind Grundlagen. Und wenn
kleine Kinder Mist machen, dann müssen die Eltern halt mal streng sein
un ne Ansage machen. Sinngemäss ist es auch hier so."

Auf keinen Fall!!!!

Du bist nicht unser Vater, und auch nicht unser Lehrer. Es kann jeder 
machen wie er will und wenn es dir nicht passt, kannst du dir ja einen 
anderen Wirkungskreis suchen.

von Peter D. (peda)


Lesenswert?

Ich wollte nicht streng sein und jeder kann machen, was er will.


Ich wollte nur ausdrücken, daß es mir völlig unverständlich ist, wie man 
eine Programmdatei erstellen kann, ohne zu wissen, wie sie heißt.

Ich halte sowas schlichtweg für unmöglich.

Ich bitte daher um Meldungen, wer programmiert und auch nicht weiß, 
welchen Namen die selbst eingetippte Datei hat.


Ich denke, Manfred veräppelt uns nur, daher der etwas sarkastische 
Tonfall.


Peter

von Manfred (Gast)


Lesenswert?

Also wenn´s sonst keine Probleme gibt. ich kann alles markieren kopieren 
einfügen!
Verstehe nicht wie man aus sowas so eine Diskussion starten kann!
Gut das jede Kindheit anders ist!

von Peter D. (peda)


Lesenswert?

Manfred wrote:
> Also wenn´s sonst keine Probleme gibt. ich kann alles markieren kopieren
> einfügen!

Nein zum Donnerwetter.

Sorry, aber das ist zuviel für mich.


Peter

von Falk (Gast)


Lesenswert?

@Mullemaus

>Auf keinen Fall!!!!

>Du bist nicht unser Vater, und auch nicht unser Lehrer.

Sicher nicht, aber . . .

>Es kann jeder machen wie er will und wenn es dir nicht passt, kannst du dir ja 
einen
>anderen Wirkungskreis

Diese Schlussfolgerung ist wohl ein klein wenig zu einfach.
Das Problem is gesamtgesellschaftlich. Wenn sich eine grössere Menge 
Leute auf begrenztem Raum vertragen will, braucht diese Gesellschaft ein 
paar Grundreglen für Verhalten und Kommunikation. Und auch wenn es 
bisweilen als politisch korrekt gilt, jeden Mist als persönliche 
Freiheit durchgehen zu lassen und mit anti-autoritären Ökogelaber jeden 
Deppen zum wertvollen Mitglied der Gesellschaft zu erklären, Mist bleibt 
Mist. Und wenn einige Leute lernresistent, und dann vielleicht auch noch 
bockig sind (kommt bei kleinen Kindern nicht selten vor ;-) dann hoffe 
ich auch, dass sie für die Konsequenzen ihrer Freiheit/Unfähigkeit 
gerade stehen. Spätestens dann, wenn ihr Chef ihnen die Tür weist, weil 
mit solchen Leuten kein Blumentopf zu gewinnen ist. Aber dann wird 
gaaaaanz schnell wieder rumgeschrien und gejammert von wegen 
Diskriminierung etc.

MfG
Falk

P.S. Niemand wird hier zu irgendwas gezwungen. Aber dennoch deutlich auf 
Fehler hingewiesen! Aber wie es scheint wird das in dieser 
weichgespülten Gesellschaft schon als Mordanschlag gewertet. Die 
Kritikfähigkeit lässt zu wünschen übrig.

P.P.S Es steht jedem gut zu Gesicht einfach mal zu sagen. "OK, ich hab 
einen Fehler gemacht, ich werde das ändern.". Das ist keine Schande, im 
Gegenteil!  Aber nein, jeder Mist muss mit tausend dummen und faulen 
Ausreden verteidigt werden.

von Mullemaus (Gast)


Lesenswert?

@Falk

LOL ich finde es klasse. Du setzt dich stärker für Grundregeln und 
Verhaltensweisen in diesem Forum ein, als der Moderator selbst. Ich 
würde mal darüber nachdenken, ob das angemessen ist. Du bist hier 
genauso Gast bzw. Teilnehmer wie jeder andere auch. Und zu maßregeln in 
dem Umfang, wie du es hier machst, steht dir nicht zu. Mir natürlich 
auch nicht, aber ich mache das ja auch nur bezogen auf deine Person. Du 
hingegen machst es in jedem Thread, an dem du dich beteiligst.

Du verlangst von anderen, dass sie mal einen Fehler zugeben sollen. Wie 
wärst, wenn du mit gutem Beispiel vorangehst und einfach mal einen Gang 
zurückschaltest? Du mußt dich auch mal in die Situation von neuen 
Teilnehmern hier im Forum versetzen. Die bekommen sofort den Eindruck, 
als wenn du das Sagen hier hättest bzw. du der Moderator bist.

So jetzt muß ich aber an die Arbeit. Mein Blackfin wartet...

von Stefan (Gast)


Lesenswert?

Hallo Leute,
ich finde grundsätzliches ist nun genug gepostet worden -ASCII oder 
nicht!

Ich habe da noch eine technische Frage.

Ich mochte zum Daten Loggen ein externes EPROM über I2C an einen Mega8 
anhängen (Taktfrequenz 8Mhz).
Ziel ist es fünf 16bit Werte zu schreiben.
Ist das mit einer Frequenz von 10Hz möglich? Wie schnell laufen eure I2C 
EPROM Übertragungen?

Im Augenblick habe ich noch nicht mit der Routine zum Datenschreiben 
begonnen, das steht jetzt als nächstes an.
Daher die Frage ob dieser Weg prinzipiell der richtige ist.


Gruß
Stefan

von Falk (Gast)


Lesenswert?

@Stefan

>Ich mochte zum Daten Loggen ein externes EPROM über I2C an einen Mega8
>anhängen (Taktfrequenz 8Mhz).
>Ziel ist es fünf 16bit Werte zu schreiben.

Die kannst du auch im interen EEPROM speichern.

>Ist das mit einer Frequenz von 10Hz möglich? Wie schnell laufen eure I2C

Kein Problem. Die meisten machen 100 kHz und mehr Busfreqeunz mit.

MFG
Falk

von Stefan (Gast)


Lesenswert?

Ja intern geht das schon, aber Speicher ist nicht gross genug!
Wenn ich 5min Aufzeichnen will sind das 3000 Zyklen a 5 Werte*2Byte = 
30k

Habe aber nur 512k EPROM intern, oder ?

Intern wäre natürlich am elegentesten - anderer µC ?

von Jörg B. (manos)


Lesenswert?

Also EPROM wirst Du sowieso nicht schreiben können in der Schaltung - 
bestenfalls EEPROM. Die größten AVR's haben max. 4 KByte EEPROM. 
Theoretisch gibt es aber auch noch die Möglichkeit, den nicht durch das 
Programm genutzten Speicherplatz im Flash zu füllen. Damit stände Dir 
dann je nach Modell genug Speicher zur Verfügung. Ist nur komplizierter 
anzusprechen soweit ich in Erinnerung habe.

von Falk (Gast)


Lesenswert?

@Stefan

>Ja intern geht das schon, aber Speicher ist nicht gross genug!
>Wenn ich 5min Aufzeichnen will sind das 3000 Zyklen a 5 Werte*2Byte =
>30k

OK, dann geht nur extern.

>Habe aber nur 512k EPROM intern, oder ?

Nein, 512 BYTE (ohne k) ;-)
Und es ist EEPROM (kleiner aber wichtiger Unterschied)

>Intern wäre natürlich am elegentesten - anderer µC ?

Nein, externer EEPROM ist schon OK.

MFG
Falk

von Stefan (Gast)


Lesenswert?

Danke euch allen erst mal,

lets go for EEPROM extern !

Melde mich sicher wieder wenn ich konkreter bin.

Gruß
Stefan (ohne "k")

PS: Für eine Empfehlung welches EEPROM geeignet ist, wäre ich noch 
dankbar.

von Falk (Gast)


Lesenswert?

Z.B. der hier bei Reichelt

ST 24C256 BN6   1,20

MFG
Falk

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.