auslesen des ADC - MAX127

Gast #1530592
Lesenswert?

Erst einmal ein frohes Fest.

Ich habe einen ATmega8 mit 16Mhz und möchte einen MAX127 (ADC) auslesen. 
Dieser wird mit I2C angesteuert. Als Pullp habe ich die internen des 
ATmega aktiviert. Die TWI Bibliothek, welche ich verwende, habe ich 
schon mehrfach bei anderen Projekten eingesetzt und da hat immer alles 
einwandfrei funktioniert. Das Problem diesmal ist, das ich zwar Daten an 
den MAX127 senden kann und auch jedes mal ein ACK erhalte, aber ich 
keine Datene auslesen kann. Also die START-Condition geht noch und beim 
auslesen geht der ATmega dann ins timeout.

Die Beschaltung habe ich aus dem Datenblatt Seite 1 entnommen. Da der 
MAX127 2xVdd besitzt war ich ein wenig irretiert, habe aber nur eines 
auf +5V gelegt.

Danke schon mal im voraus
Das Projekt und das Datenblatt hänge ich an den Beitrag an.
Angehängte Dateien:
#1531917
Lesenswert?

1. Die beiden VDDs sollte man miteinander verbinden.
2. SDA und SCL verdienen vernünftige Abschlußwiderstände nach VDD (1,7 k 
... 4,7 k). Die AVR-internen Pull-Ups sind ausschließlich dann sinnvoll, 
wenn unbenutzte Eingänge des AVR auf ein definiertes Potential gelegt 
werden sollen.

Sind Abblockkondensatoren u.ä. sinnvoll angeordnet?
Passen die Wartezeiten zwischen Anstoßen einer AD-Konversion und Abholen 
des Ergebnisses?

Bernhard
Gast #1531928
Lesenswert?

Die Ablockkondensatoren sind natürlich direkt am ADC angeordnet. Die 
beiden Vdd werd ich auch noch mal verbinden, wobei ich meine das schon 
probiert zu haben. Mit der Wartezeit ist das so eine Sache. Laut 
Datenblatt ist die conversion time max. 10µs. Da ich in der TWI_read_ack 
bzw. TWI_read_nack ja den timeout von 250ms drin habe, sollte das schon 
passen. Das Schreiben des Konfigurationsregisters klappt ja auch. 
Deswegen scheint die Kommunikation grundsätzlich zu funktionieren. Aber 
ich werd auch mal richtige Pullups probieren.
Gast #1533051
Lesenswert?

Ich habe meine TWI Bibliothek jetzt noch um die Statuscodes erweitert. 
Das Problem ist anscheinend, dass ich beim zweiten TWI_Start zum Lesen 
des ADC Wertes eine 0x48 (TWI_MasterRX_ADR_NACK) zurück erhalte. Es 
sollte aber eigentlich eine 0x40 (TWI_MasterRX_ADR_ACK) sein.
#1533662
Lesenswert?

Ich vermute du wartest vergeblich auf das ACK, weil beim TWIRead eine 
andere Zieladresse existiert als beim TWIwrite:

        .
        .
        .
  uint8_t tmp=0;

  error=TWI_start(>>>>>>>>>0b0101000<<<<<<<<<<<,TWIwrite);

        .
        .
        .
        .
        .
        .

        {error=TWI_start(>>>>>>>>>0b1001000<<<<<<<<<<<,TWIread);}

  if (error!=true) {error=TWI_read_ack(&vor);}
        .
        .
        .

Der MAX127 reagiert nur auf die Adresse 0b0101xxx

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