Forum: Mikrocontroller und Digitale Elektronik MCP4725 DAC und STM32


von Mark S. (mark522)


Angehängte Dateien:

Lesenswert?

Hallo everybody,

Ich wollte den MCP4725 12 Bit DAC Chip verwenden, damit ich analogen 
Spnnungsbereich von 0-5 V erzeugen kann.Nun habe ich 2 Probleme. Mein 
Ansatz war wie folgt: zuerst habe ich die Kommunikation mit dieser 
Funktion geprüft.

Die Led hat auch geblinkt. Dann habe ich eine Variable definiert, deren 
Wert von 0-4954 (12bit DAC). zur Zeit ist mir nicht so wichtig, wie sich 
die Variable verändern lässt. Dann müdas Datenblatt des MCP4725 3 Bytes 
(beim normalen Mode) geschickt werden über 12c.

Das erste Problem ist, wenn ich die Date in Bitschreibweise schreibe, 
lässt sich der Code kompilieren, jedoch nicht hochladen. Aber wenn ich 
diese im Hex-Format schreibe klappt es ja. z.B. :

if(HAL_I2C_IsDeviceReady(&hi2c1,0b11000100, 2,10)==HAL_OK){ //0xC4 
slave adress   in HEX
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_13);
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_14);
HAL_Delay(50);
}

2.Problem ist, dass der Code unten nicht funktioniert. Ich habe nur MSB 
und LSB von Daten geshiftet:
i2c_send_data[0]=0x40; // Adresse von Register in den zu schreibende
    // DAC 12 bit Register
i2c_send_data[1]=0x00>>val; // bits 7-0
i2c_send_data[2]=0x00<<val; // bits 7-4

// slave adress second para.,
HAL_I2C_Master_Transmit(&hi2c1,0xC4,i2c_send_data,3,10);
  }

und oben natürlich die Variablen definiert :
uint8_t i2c_send_data[3];
uint16_t val=2000;

Kann jemand bitte helfen?

Gruß

von pegel (Gast)


Angehängte Dateien:

Lesenswert?

Wie kommst du auf die 4 in der Adresse C4? 4 entspricht A1.
Hast du den Chip ab Werk programmieren lassen?

von pegel (Gast)


Lesenswert?

Über das zerlegen der Variablen solltest du auch noch einmal nachdenken.

Mein Vorschlag:

i2c_send_data[1] = (val & 0x00FF);         // bits 7-0
i2c_send_data[2] = ((val & 0xFF00) >> 8);  // bits 11-8

Und das nächste mal die c Datei auch als solche anhängen, denn wir mögen 
es schön bunt.

von pegel (Gast)


Lesenswert?

pegel schrieb:
> Wie kommst du auf die 4 in der Adresse C4?

Ich vermute du hast den MCP4725A1, richtig?

von Mark S. (mark522)


Lesenswert?

pegel schrieb:
> Wie kommst du auf die 4 in der Adresse C4?
die Adresse ist zwar 0b1100001==0x61. Aber die HAL-Funktion inkludiert 
auch R/W bit. deswegen ist 0b1100001(0 master write)=0xC2. sorry 0xC4 
habe ich zuletzt geändert.

pegel schrieb:
> Und das nächste mal die c Datei auch als solche anhängen, denn wir mögen
> es schön bunt.

das war mir lieber bunt. aber weiß nicht wie

pegel schrieb:
> i2c_send_data[1] = (val & 0x00FF);         // bits 7-0
> i2c_send_data[2] = ((val & 0xFF00) >> 8);  // bits 11-8

bin leider nicht so vertraut mit der Bitmaskierung.

pegel schrieb:
> Ich vermute du hast den MCP4725A1, richtig?

https://cdn-shop.adafruit.com/datasheets/mcp4725.pdf

das, was ich habe.

LG

von Mark S. (mark522)


Lesenswert?

entschuldigung aber 0xC4 ist schon richtig. Die die Adresse ist zwar 
0b1100001==0x61, jedoch muss das nach links geshiftet werden. und dann 0 
bit addieret für Master schreibt also 0b1100 0100(0 master write)=0xC4.

von pegel (Gast)


Lesenswert?

Es gibt verschiedene Adressen Varianten des IC. Siehe Seite 47 im 
Datenblatt. Deshalb der Zusatz A0 bis A3.

Ohne Angabe bekommt man den A0 mit Adresse 0xC0, deshalb muss deiner der 
A1 sein.

Für die Buntheit einfach beim hochladen die Endung .c lassen und nicht 
durch .txt ersetzen.

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.