MCP4725 DAC und STM32

OP #5747758
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ß
Angehängte Dateien:
Gast #5747831
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.
OP #5747891
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
Gast #5748069
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.

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