Forum: Mikrocontroller und Digitale Elektronik NO ACKNOWLEDGE Signal für I2C erzeugen


von pet (Gast)


Lesenswert?

Hallo,
wie erzeuge ich ein NO ACKNOWLEDGE (NACK) Signal mit dem Hardware
TWI-Interface eines AVRs?

Ich will Daten aus einem I2C-EEprom lesen und das letzte zu empfangene
Byte muss mit einem NACK Signal vor der Stoppbedingung gekennzeichnet
werden.
Mit dem TWI-Controll-Register kann ja nur ACK Signale erzeugen, aber
keine NACK.
Der AVR Arbeitet als Master.

von Axel R. (Gast)


Lesenswert?

Beschreib uns mal, wie Du ein ACK-Signal erzeugst.

von pet (Gast)


Lesenswert?

ja so:
TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWEA);
  while(!(TWCR & (1<<TWINT)));

von Axel R. (Gast)


Lesenswert?

geht das?
TWCR = (1<<TWINT) | (1<<TWEN) | (0<<TWEA);
  while(!(TWCR & (1<<TWINT)));

bzw:

TWCR = (1<<TWINT) | (1<<TWEN);
  while(!(TWCR & (1<<TWINT)));

also Bit6 (TWEA) nicht setzen, probier mal

von AxelR: (Gast)


Lesenswert?

und hassu probiert?

von pet (Gast)


Lesenswert?

noch nicht, habe noch kein I2C EEprom!

Ich glaube das ist so richtig.
Ich habe nach einem anderen IC2-Code im Internet gesucht und die haben
es genauso gemscht:

unsigned char i2c_readNak(void)
{
  TWCR = (1<<TWINT) | (1<<TWEN);
  while(!(TWCR & (1<<TWINT)));

    return TWDR;

}/* i2c_readNak */

Aber wieso kommt man darauf um ein Nack zu erzeugen das Bit TWEA nicht
zu setzen?

von Daniel aka Khani (Gast)


Lesenswert?

Hallo pet,


"Aber wieso kommt man darauf um ein Nack zu erzeugen das Bit TWEA
nicht
zu setzen?"

Weil es so im Datenblatt steht ;-).
Ist schon ganz richtig so - Du bist auf dem richtigen Weg.

MfG, Daniel

von pet (Gast)


Lesenswert?

im welchem Datenblatt steht das genau?
habe nämlich nichts gefunden.

von AxelR: (Gast)


Lesenswert?

Wenn es kein "NACK" Bit gibt, bleibt ja wohl die einzige Möglichkeit
das "ACK" bit nicht zu setzen bzw. es zu löschen.
Dazu muss man nicht studiet haben ;-))

von pet (Gast)


Lesenswert?

lol
Ok, klingt logisch

DANKE

von Axel R. (Gast)


Lesenswert?

Gern geschen,
jetzt habe ich wieder eimal faxen machen bei anderen gut ;-))

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.