PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : EXT. Speicher



teslanikola
23.03.2005, 09:49
Hallo,
hab ne fragen: Ich möchte Variablen in einen EXt. Speicher speichern, ihc hab sowas noch nie gemacht.Was für nen Speicher würdet ihr mir empf., wie schließe ich ihn an den µC ( at90s2313 ) und vorallem, was muss ich da in mein Quellcode schreiben ( Initialisierung, Lesen, Schreiben ). Hoffe ihr könnt mir Helfen.

Michael
23.03.2005, 10:07
Hallo teslanikola,
beim Lesen deiner Sig tun mir die Augen weh, schlag doch nochmal im =Maschine]Duden (http://duden.xipolis.net/34f7b8ee6a23f60b46bd64ad9accd2425/suche/trefferliste.php?suchbegriff[AND) nach!
Zu deiner Frage: Du solltest dich auf einen Speicher festlegen. Parallel/seriell oder flüchtig/nichtflüchtig...
Gruß, Michael

teslanikola
23.03.2005, 10:31
Hallo Michael, wie du merkst bin ich ein Greenhorn auf dem gebiet, was ich brauche ist ein Nichtflüchtiger Speicher, ich dachte da an ein EEPROM, ich hab sowohl ein serielles ( I²C ) alsauch ein paralleles da. Da das Parallele mehr Speicher hat ( 28C16 mit 2k*8 ) währe dieses besser als mein serielles ( 24C04 mit 512*8 ). Kannst du mir helfen?

Michael
23.03.2005, 11:15
Hallo teslanikola,
hmm, rechne doch einfach mal nach:
ein 28C16 hat 11 Adressleitungen, 8 Datenleitungen, CE, WR, OE und RB.
selbst wenn du CE wegläßt und RB über eine Zeitschleife einsparst und die Adress- und Datenleitungen via "Chipsatz" multiplexst, bleiben, ääh, 14 I/O-Ports für die Ansteuerung. Wieviel hatte nochmal der 2313?
Auf der anderen Seite steht der 24c04 mit, ähh, 2 I/Os?
Ich schlage dir die serielle Variante vor, die gibt es ja auch mit mehr Speicher.
Vielleicht willst du ja noch mehr als den Speicher anschließen. Ein LCD-Display, oder Sensoren/Tasten, etc.?
Da kommen die eingesparten I/O ganz recht.
Gruß, Michael

teslanikola
23.03.2005, 11:31
Du hast mich überzeugt, bring auch nichts von 16I/O´s 14 für nen speicher zu benutzten. Seriell ist ne tolle Idee. Aber das einzigste Problem ( bis jetzt ) wie Steuer ich mein ser. Speicher an??

Michael
23.03.2005, 22:18
Hallo teslanikola,
räusper, der 2313 hat nur 15 I/Os.



wie Steuer ich mein ser. Speicher an??

per Software?
Ein Beispiel gibt es in C:\Programme\deinBascomVerzeichnis\Samples\I2C.bas
Gruß, Michael

teslanikola
24.03.2005, 10:40
Haste recht er hat nur 15 I/Os hab mich verzählt ( war zu faul ins Datenblatt zu gucken )

teslanikola
24.03.2005, 10:51
Was heist des??? Ist &H40 ne Addresse oder nen Pin??

I2csend &H40 , 255 'all outputs high
I2creceive &H40 , B1

Wo muss ich SDA und SCL anschließen??? Und was für ne Addresse muss ich meinem I²C jumpern??
Muss ich die Pins von SCL und SDA als output configutieren??

Danke schon mal für deine Hilfe.

Michael
24.03.2005, 11:10
Hallo teslanikola,

Wo muss ich SDA und SCL anschließen???
CONFIG SDA = PORTB.7 'PORTB.7 is the SDA line
CONFIG SCL = PORTB.5 'PORTB.5 is the SCL line
(direkt aus der Hilfe kopiert....)

Und was für ne Addresse muss ich meinem I²C jumpern??
Datenblatt des I2C-Bausteins lesen! Jeder Baustein hat eine andere Adresse.

Muss ich die Pins von SCL und SDA als output configutieren??
nein, aber du mußt externe Pull Up Widerstände anschließen.

Danke schon mal für deine Hilfe.
kein Problem, ich gebe dir aber nicht die Lösung. Das wäre dann keine Hilfe mehr.
Von mir bekommst du nur den Weg gezeigt.
Gruß, Michael

teslanikola
24.03.2005, 12:52
Servus,
hab mal des Datasheet angeschaut, ich finde da keine Addresse, da steht nur, dass es Addressen eingänge gibt, die man verschieden Jumpern muss???
Und was bedeutet dieser Code??
I2csend &H40 , 255 'all outputs high
I2creceive &H40 , B1

Werner_Just
24.03.2005, 14:27
Hallo Teslanikola,


hab mal des Datasheet angeschaut, ich finde da keine Addresse, da steht nur, dass es Addressen eingänge gibt, die man verschieden Jumpern muss???

Dann schau nochmal!

Ganz blass aus der Erinnerung:
Afaik hat jeder I2C Baustein eine feste Adresse und eine einstellbare Adresse. Beide zusammen ergeben zusammen mit dem Bit zur Unterscheidung ob Schreib oder Lesezugriff die Adresse mit der der Chip softwaremäßig angesteuert wird.

feste Adresse meist 4bit, bit 4-7 der Softwareadresse
variable Adresse 3bit, bit 1-3 der Softwareadresse
schreib/lese Zugriff, bit 0 der Softwareadresse.

Die Aufteilung kann von Baustein zu Baustein unterschiedlich sein. -> ins Datenblatt schauen.

Um das bit für den Schreib/Lesezugriff brauchst Du dich nicht kümmern. Das wird von den Send- und Receive Routinen automatisch gesetzt. Bei der Adressierung ist es immer "0"


Aus der BASCOM Hilfe:
"For example a PCF8574 has address &H40. To write to the chip use &H40, to read from the chip, use &H41. When emulating a PCF8574 we would specify address &H40."

> Und was bedeutet dieser Code??
> I2csend &H40 , 255 'all outputs high
Sende den Wert 255 an den I2C-Chip 0100 000 (1)
Also an den Chip mit der HW-Adr 0100 und der variablen Adr 000. Die letzte "1" der Adresse legt den Lesezugriff fest.

> I2creceive &H40 , B1[/quote]
Lese den Wert B1 aus dem I2C-Chip 0100 000 (0)
Also aus dem Chip mit der HW-Adr 0100 und der variablen Adr 000. Die letzte "0" der Adresse legt den Schreibzugriff fest.

Ohne Gewähr!

Ciao,
Werner

teslanikola
24.03.2005, 15:25
Hallo glaube ich habs gefunden ( Addresse )

also sind die bits 4 - 7 festgelegt und mit bit 1 - 3 kann ich die Addresse verändern und mit dem bit 0 bestimme ich ob ich lesen oder schreiben möchte, richtig? Aber wieso gibt es dann noch den R'W Pin??

Werner_Just
24.03.2005, 20:04
Hallo Teslanikola,

si, die I2C-Adesse Deines Bausteins ist
1010xxx0 fürs schreiben und
1010xxx1 fürs lesen.

Bein C1 und C2 kannst Du acht Bausteine ansprechen, beim C4 vier, beim C8 zwei und beim C16 nur einen, weil die 'variablen' Adressen bei C4 - C16 ganz oder teilweise als Speicheradressen mit verwendet werden.

Wo hast Du denn das mit dem R/W Pin her?
Imo besitzen die 24Cx-Typen nur 8 Pins.
3 um die veriable Adresse festzulegen
2 als Versorgungsspannung
2 als I2C Leitungen
1 als Writeprotect

Ciao,
Werner

teslanikola
24.03.2005, 21:35
Sorry, war mein fehler hab mich verlesen. Kann man die addresse in Dezimalen angeben oder muss man Hex, wie rechne ich das in Hex um??

Werner_Just
25.03.2005, 10:17
Hallo Nikola,


Kann man die addresse in Dezimalen angeben oder muss man Hex, wie rechne ich das in Hex um??

Man kann sie in jedem bleiebigen Format angeben. Hexadezimal eignet sich aber besonders gut, weshalb es sich als Format für Adressen quasi als Standard durchgesetzt hat.

Zur Umrechnung:

DU BIST ZUM KOTZEN FAUL! [-(
Das ist nix was wofür man ein Forum benötigt. Man kann es in jedem Lexikon oder Lehrbuch zur Digitaltechnik nachlesen. Zudem gibts auch noch Google, wo zu solchen Fragen mehrere tausen Treffer gelistet werden.

Suchs Dir selber raus!

Ciao,
Werner

Michael
25.03.2005, 10:27
Hallo teslanikola


wie rechne ich das in Hex um??

mit dem, was du in der Schule gelernt hast, oder mit dem Windows-Taschenrechner.

Gruß, Michael

teslanikola
25.03.2005, 11:13
Sorry, wenn ich so dumm frage, aber in der Schule hab ich das mit HEX NICHT gelernt!!

Michael
25.03.2005, 11:24
Hallo teslanikola,


aber in der Schule hab ich das mit HEX NICHT gelernt!!

hmmm, meine Tochter ist in der 6.Klasse, die haben das in diesem Jahr gehabt. Wahrscheinlich weiß sie es aber auch nicht mehr.
Wenn du es noch nicht gemerkt hast: Aufpassen lohnt sich!

Mit <0x1E Sekunden Suche habe ich aber für dich die passende Nachhilfe (http://de.wikipedia.org/wiki/Hexadezimalsystem) gefunden.
Gruß, Michael

teslanikola
25.03.2005, 14:06
Hallo michael,
ich bins der Faule aus den Forum, ich habe es echt nicht gehabt ( mit nen 1er in Mathe habe ich wohl aufgepasst ), habe jetzt ( QUICK&DIRTY ) was auf nem Steckboard gesteckt ung ne Test Prog geschrieben, und siehe da es funkt. Danke für eure Hilfe
PS.: Die Addresse hab ich in DEZ. angegeben!!!

Werner_Just
25.03.2005, 19:42
Hallo Nikola,


PS.: Die Addresse hab ich in DEZ. angegeben!!!

irgendwie schade das Du allem was Du nicht verstehst aus dem Weg gehst.
Denn dumm bist Du sicher nicht. Du machst nur nichts daraus.

Ciao,
Werner

teslanikola
25.03.2005, 22:29
Servus Werner


irgendwie schade das Du allem was Du nicht verstehst aus dem Weg gehst.
Denn dumm bist Du sicher nicht. Du machst nur nichts daraus.

Nur zur Anmerkung:


PS.: Die Addresse hab ich in DEZ. angegeben!!!
War sarkastisch gemeint ( HEX: W = A0 R = A1 )
Danke für eure Hilfe!!


$regfile = "2313def.dat" .
$crystal = 10000000
Config Portb = Output

Config Sda = Portd.5
Config Scl = Portd.6


Dim Adres As Byte
Dim Value As Byte
Dim W As Byte
Dim A As Integer
Dim B As Byte
Dim C As Byte

Declare Sub Write_eeprom(byval Adres As Byte , Byval Value As Byte)
Declare Sub Read_eeprom(byval Adres As Byte , Value As Byte)

Const Addressw = &HA0 ' Addresse WRITE
Const Addressr = &HA1 ' Addresse READ



For A = 1 To 512 ' Erzeuge 512 Zufallszahlen und schreibe sie ins EEPROM
C = A
B = Rnd(255)
Call Write_eeprom(c , B)

Next A

Do ' Lese Variable aus EEPROM
For A = 1 To 512
C = A
Call Read_eeprom(c , W)
Portb = W ' Setze Port = Var.
Waitms 500 ' Warte ne 1/2 Sek.
Next A ' Springe zurück un nächste Var. zu lesen
Loop




Sub Write_eeprom(byval Adres As Byte , Byval Value As Byte)
I2cstart
I2cwbyte Addressw
I2cwbyte Adres
I2cwbyte Value
I2cstop
Waitms 10
End Sub



Sub Read_eeprom(byval Adres As Byte , Value As Byte)
I2cstart
I2cwbyte Addressw
I2cwbyte Adres
I2cstart
I2cwbyte Addressr
I2crbyte Value , Nack
I2cstop
End Sub