mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MAX9850 - DAC in C - Problem beim I2C Schreiben


Autor: Claudio H. (hedie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich habe mir den MAX9850 ADC mit integriertem Headphone Amplifier 
besorgt....

Ich habe mir in C eine I2C Funktion geschrieben....
Mit einem EEPROM Funktioniert alles bestens doch mit dem MAX9850 leider 
nicht....

Meine C Funktionen für I2C:
void I2CStop(void)
{
  SDA = 0;
  SCL = 1;
  Wait100ms(1);
  SDA = 1;
  Wait100ms(1);
  SCL = 1;  
}

void I2CStart(void)
{
  SDA = 1;
  SCL = 1;
  Wait100ms(1);
  SDA = 0;
  Wait100ms(1);
  SCL = 0;  
}

void writeI2C(unsigned char ucData)
{
  unsigned char ucCount = 0;
  unsigned char ucMasked = 0;
  
  while(ucCount != 8)
  {
    ucMasked = (0x80 & ucData);
    if(ucMasked > 0)  SDA = 1;
    if(ucMasked == 0) SDA = 0;
    
    SCL = 1;
    Wait100ms(1);
    SCL = 0;
    Wait100ms(1);
    
    ucCount ++;
    ucData = (ucData << 1);
  }  
  
  IO.PCR6 = 0xFE;           //SDA als Eingang
  SCL = 1;              //Auf acknowledge warten
  while(SDA != 0);
  Wait100ms(1);
  SCL = 0;
  Wait100ms(1);
  IO.PCR6 = 0xFF;           //SDA als Ausgang
}

unsigned char readI2C(void)
{
  unsigned char ucCount = 0;
  unsigned char ucMasked = 0;
  
  IO.PCR6 = 0xFE;           //SDA als Eingang
  
  while(ucCount != 8)
  {
    SCL = 1;
    Wait100ms(1);
    if(SDA == 1) ucMasked = (ucMasked | 0x01);
    if(SDA == 0) ucMasked = (ucMasked & 0xFE);
    if(ucCount < 7) ucMasked = (ucMasked << 1);
    
    SCL = 0;
    Wait100ms(1);
    
    ucCount ++;    
  }
  IO.PCR6 = 0xFF;           //SDA als Ausgang
  
  SDA = 1;
  SCL = 1;
  Wait100ms(1);
  SCL = 0;
  Wait100ms(1);
  
  return ucMasked;
}

Hier das Datenblatt des Chips: 
http://datasheets.maxim-ic.com/en/ds/MAX9850.pdf

Nun das Problem...

Wenn ich über meine Funktion an der Register adresse 0x09 0x40 hinein 
schreibe und danach dieses Register wieder auslese bekomme ich 0x40...

dies klappt bis zum wert 0x7F einwandfrei... Sobald ich jedoch 0x80 oder 
mehr schreibe kommt immer! 0xFF zurück....

Getestet wurden meine Funktionen mit einem EEPROM da kam immer das 
korrekte zurück...

Getestet habe ich auch mit zwei verschiedenen Chips... somit schliesse 
ich mal eine Fehlfunktion aus...

Ich bin echt verzweifelt... weshalb kommt ab 0x7F immer 0xFF zurück?

Ich hoffe ihr könnt mir helfen...

Liebe Grüsse
Claudio

Autor: Claudio H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Push.....

Bitte hilfe....

Autor: Fred (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
push

Autor: Thomas O. (kosmos)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich verstehe den Sinn nicht die Daten die man an einen DAC übertragen 
hat wieder auszulesen. Ein EEPROM ist ja für Schreib- und Lesezugriffe 
gedacht, ein DAC aber doch nur zum Empfang digitaler Daten und zur 
Ausgabe analoger Signale.

Autor: Michelle Konzack (Firma: electronica@tdnet) (michellekonzack) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Claudio H. schrieb:
> Hallo
>
> Ich habe mir den MAX9850 ADC mit integriertem Headphone Amplifier
> besorgt....

Den hab ich auch, nur noch nicht im Einsatz...

> Nun das Problem...
>
> Wenn ich über meine Funktion an der Register adresse 0x09 0x40 hinein
> schreibe und danach dieses Register wieder auslese bekomme ich 0x40...

Ehm, das ist das "LRCLK LSB" und kann meines erachtens nicht mehr als 
0x7F. Der zweite Teil ist ja Register 8 "LRCLK MSB"

Grüße
Michelle

Autor: Marius S. (lupin) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hey Claudio, ich hab auch mal angefangen mit meinem MAX9850 zu basteln 
(seit ein paar jahren plane ich das ja schon hehe).

Bist du noch an der Adapterplatine interessiert? Im Anhang kannst die 
sehen (und den Rest meines Versuchsaufbaus). Hab letztens noch eine 
bestückt.

Auf dem Display steht "read: aa", da habe ich Register 0x2 mit 0xAA 
beschrieben und zurück gelesen. Der Font ist weichgezeichnet btw. :)

Jetzt muss ich das I2S ans laufen bringen...

Autor: Phil S. (zippi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ob Claudio das noch liest^^

Naja ich hab vor 1 Jahr auch mal mit dem IC gearbeitet. Hier ist mal 
meine init:

SEND_TWI(0x06, 0x00);
SEND_TWI(0x07, 0x44);
SEND_TWI(0x08, 0x80);
SEND_TWI(0x09, 0x11);
SEND_TWI(0x0a, 0x00);
SEND_TWI(0x05, 0x30);
wait_msdac(100000);
SEND_TWI(0x05, 0x7f);
wait_msdac(100000);
SEND_TWI(0x05, 0xff);

aufbau:
SEND_TWI("register","wert");

gruß

Autor: Lupin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke zippi. 100 Sekunden Wartezeiten? :)

Womit hast du den angesteuert? Wenn es ein SAM7 war kannst gerne mehr 
blicken lassen :-)

Autor: Phil S. (zippi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lupin schrieb:
> Danke zippi. 100 Sekunden Wartezeiten? :)
>
> Womit hast du den angesteuert? Wenn es ein SAM7 war kannst gerne mehr
> blicken lassen :-)

Hehe, ne das sind eigentlich us. Also 100ms warte zeiten^^.

Der code war für ein altes AVR32 board. Habe auch schön musik damit 
abgespielt. Bin aber umgestiegen auf den "tlv320dac32".

gruß

Autor: Marius S. (lupin) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum bist du auf den tlv32dac32 umgestiegen?

Gibt es eigentlich noch einen anderen DAC außer den MAX9850 der ohne die 
großen Entkoppel-Kondensatoren auskommt? Das finde ich beim MAX9850 ein 
feature welches ihn von anderen unterscheidet.

Autor: Phil S. (zippi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Gibt es eigentlich noch einen anderen DAC außer den MAX9850 der ohne die
>großen Entkoppel-Kondensatoren auskommt?
Jap das kann der TLV320dac32.

Aber ich nutze eine Schaltung in der ich 1. ein headphone out habe und 
einmal eine kleine audio box. Mit dem TLV320dac32 kann man dann zwischen 
box oder kopfhörer hin und her schalten. Deswegen bin ich umgestiegen.

Bei dieser schaltung brauchte man dann aber die 2 koppel Cs. Gibt da 
also viele verschaltungs varianten.

Ein weiterer vorteil ist, dass der DAC auch 24bit und 96khz kann.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.