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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.