Forum: Mikrocontroller und Digitale Elektronik Hardware TWI / I2C Mega16


von Martin (Gast)


Lesenswert?

Hallo!
Ich möchte gerne Hardware I2C auf einem Mega16 proggen.
Ich programmiere in C. Ein byte auf einen PCF8574 schreiben geht ohne
Probleme, code nach datenblatt S.183.
Doch das lesen geht nicht. Leider ist nirgensbeschrieben, wie mann ein
byte vom bus liest, oder wie mann ein NACK generieren lässt.

Kann mit jemand weiterhelfen?

von Sebastian (Gast)


Lesenswert?

wenn du lesen willst mußt du das letzte bit der adresse auf 1 setzten

start-->(7 bit adresse+ rw(0|1)) 1=lesen 0=schreiben

von Martin (Gast)


Lesenswert?

Ja, das ist mir schon klar.
Zuerst schreibe ich die Slaveadresse + Readbit. Danach will ich die
Daten vom Bus lesen. Doch das klappt irgendwie nicht. Ich vermute dass
es am NACK bit scheitert. Ich habe im Datenblatt nirgens gefunden, wie
man es generiert...

von Sebastian (Gast)


Lesenswert?

das NACK ist ähnlich dem ack

ein takt mit sda auf 0 oder 1 (0 ack und 1 nack)
 irgendwo steht das. guck dir mal die application notes von atmel dazu
an http://atmel.com/dyn/resources/prod_documents/doc2564.pdf

seite 3

An Acknowledge (ACK) is signaled by the receiver
pulling the SDA line low during the ninth SCL cycle. If the receiver
leaves the SDA
line high, a NACK is signaled.

von Martin (Gast)


Lesenswert?

Ja, aber mir ist nicht klar, wie ich das von der Hardware generieren
lasse. Ich hab mal auf einem 8051er software i2c geschrieben, da war es
kein Problem ein NACK zu proggen ;-)

Aber kennst du kein Beispiel wo I2C über die Hardware Register genutzt
wird?

von Sebastian (Gast)


Lesenswert?


von Martin (Gast)


Lesenswert?

Besten Dank für die APPNOTE!
Wollte die Library: I2C_Master testen, doch mein compiler will mir
keine Hex datei rausspucken (ICCAVR). Er bringt ca 5 Errors in der
library!

von thkais (Gast)


Lesenswert?

Seite 189 im Datenblatt, in der Tabelle:
z.B:
"$40 SLA+R has been transmitted, ACK has been received."
Wenn in dieser Situation TWEA = 0 dann "Data byte will be received and
NOT ACK will be returned".

Ich würde empfehlen, Seite 170 bis 198 nicht nur unters Kopfkissen zu
legen, sondern auch zu lesen. Da ist alles beschrieben. Ehrlich.

Schönen Gruß
Thomas

von AxelR. (Gast)


Lesenswert?

ich habe die Hardware I2C-Schnittstelle interruptgesteuert in FastAVR
abgebildet.
Da ich mir sowas auch nicht aus den Fingern sauge - hier habe ich es
her:
http://hubbard.engr.scu.edu/embedded/avr/avrlib/docs/html/i2c_8c-source.html

Im prinzip war es dann doch alles ziemlich einfach. Der TWI-INT. kommt
bei jedem Pup aufm I2C. Im TWI Status register sieht man als erstes
nach, welcher wert da drinn steht, und verzweigt mit einer Switch
anweisung zum eigentlichen geschehen. Ist die notwendige Aktion
erledigt, muss man die entsprechenden Bits(Acknowledge, Stop, Start
etc.) im TWCR setzen und den Int. verlassen.

Ich habe den o.g. Link jetzt vom Papier abgetippt, hoffe, der geht
noch...

AxelR.

von Martin (Gast)


Lesenswert?

Tag zusammen!
Danke für eure Bemühungen!!

Manchmal ist die Welt schon böse... als ich am Abend das Datenblatt zum
xten mal gelsen hatte, war es mir plötzlich klar ;-)

Hab nun mein eigenes funktionierendes script.

Einen schönen Tag noch!

Martin

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.