ADUC842 sendet kein ACK

Gast #607556
Lesenswert?

Hallo,

könnt ihr mir vielleicht helfen. Ich programmiere zur Zeit eine 
Kommunikation zwischen dem PC und dem Mikrocontroller ADUC842 der Firma 
Analog Devices. Die Kommunikation soll über den I²C-Bus erfolgen. Für 
die Programmierung verwende ich die im Datenblatt vorgegebenen Bits MDO 
(Master Data Output), MDE (Master Data Enable), MCO (Master Clock 
Output) und MDI (Master Data Input). Allerdings bekomme ich, wenn ich 
die Funktion i2c_write_byte verwende, immer MDI = 1, also kein 
Acknowledge vom Mikrocontroller, zurück. Hat jemand eine Idee woran das 
liegen könnte? Ich arbeite mit dem Compiler µVision3 von Keil.
Danke schonmal für die Hilfe.

Carola
Gast #607572
Lesenswert?

Hallo,
also dies ist der Auszug aus meiner Funktion i2c_write_byte:

  // Empfang des Slave-Ack ermöglichen
  MDE = 0;
    zeit();
    MCO = 1;
    zeit();
   ack = MDI;
    MCO = 0;          // Takt erzeugen
    zeit();

   if (ack)      // Wenn kein Ack vom Slave
     {
       return(ack);    // Fehlermeldung
     }
    else                    // Bei empfangenen Ack des Slaves
              {
       return(ack);           // Bestätigung
     }

Um die Zeile ack = MDI; geht es mir. Denn dort soll der PC den Wert 
übernehmen, den der Slave auf die Datenleitung geschrieben hat. 
Allerdings bekomme ich immer eine 1, also kein Acknowledge zurück. Mein 
Problem ist, dass ich nicht herausfinde woran das liegen kann.

carola
Gast #607757
Lesenswert?

siehe Datenblatt: The I2C interface is implemented as a full hardware 
slave and software master.

Die Programmierung der Bits aus der Fkt. i2c_write_byte ist nur im 
Master-Betrieb notwendig. Im Slave Mode muss nur das I2CDAT-Register 
beschrieben werden.

siehe auch:
http://www.analog.com/UploadedFiles/Application_Notes/412405076856483265967078526285536153903450693251uC001_-_MicroConverter_I2C_Compatible_Interface.pdf
Gast #607928
Lesenswert?

Hallo nochmal,

also ich habe mich vertan, ich arbeite im Software Master Mode. 
Entschuldigung. Deswegen muss ich in der i2c_write_byte die Bits 
programmieren. Ich verstehe aber nicht, warum ich kein Ack oder kein 
NoAck zurückgeschickt bekomme. Vielleicht könnt ihr mir helfen. Ich 
suche schon seit ein paar Tagen nach dem Fehler und mir fällt auch 
nichts mehr ein wo ich suchen soll.
Danke schonmal im voraus.

Carola
Gast #608412
Lesenswert?

hallo,

ich versuche den IC AD5933 von der Firma Analog Devices zu adressieren. 
Der IC ist ein Impedance Converter.
Aber gesteuert wird das über den PC. Ich empfange und sende die Daten 
mit Hilfe eines HyperTerminal.

carola
#641093
Lesenswert?

Hi,
was genau machst du mit dem Ad5933? Ich arbeite auch mit dem Ad5933. 
Allerdings arbeite ich mit dem AduC7020 als Master von Analog um den 
Ad5933 anzusteuern. Nun habe ich aber Probleme mit dem Imedanzconverter, 
dass ich ihn richtig konfiguriere. Hast du schon Efolge zu verzeichnen?

MFG Marcus

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren