Forum: Mikrocontroller und Digitale Elektronik ADUC842 sendet kein ACK


von carola (Gast)


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

von Mike (Gast)


Lesenswert?

poste ma schaltung!

von Mike (Gast)


Lesenswert?

uh sry doche nicht geht ja ums proggen! ;-)


MFG mike

von carola (Gast)


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

von Olli (Gast)


Lesenswert?

Wer oder was ist hier Master bzw. Slave?

von carola (Gast)


Lesenswert?

Der PC ist der Master und der Mikrocontroller der Slave.

von Olli (Gast)


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

von carola (Gast)


Lesenswert?

Danke für die Hilfe. Werde dass dann mal ausprobieren.

von carola (Gast)


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

von Olli (Gast)


Lesenswert?

Wenn der ADUC842 der Master ist, welchen Slave-Baustein versuchst du 
dann zu adressieren? Den PC?

von carola (Gast)


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

von Marcus M. (marcus)


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

von Jörn (Gast)


Lesenswert?

Hi,

ich habe gerade genau das gleiche Problem mit dem AD5933
ich bekomme einfach kein ACK.

Andere Busteilnehmer funktionieren einwandfrei.

Konntest du das Problem lösen?

Gruß Jörn

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.