Forum: Mikrocontroller und Digitale Elektronik Temperatur Sensor mit STM32 und HAL Bibliotheque


von Dieter (Gast)


Lesenswert?

Hallo,

ich hätte eine Frage bezüglich der Ansteuerung des Temperatursensors 
EMC1428 via I2C mit einem STM32 Microcontrollers.

Und zwar verwende ich zu Konfiguration der einzelnen Pins CubeMx und 
somit auch die HAL Bibliotheque.
Ich wollte nun bei euch um einen Denkanstoß bitten wie ich diese 
Kommunikation in C realisieren kann, da ich ein Frischling auf dem 
Gebiet des STM32 bin.

Ich habe bereits den I2C richtig konfiguriert und die Device Adresse für 
den EMC1428 Chip (0x92) ermittelt.

Vielleicht kann mir einer von euch weiterhelfen wie ich am besten die 
Temperaturdaten vom Sensor auslese und zugleich speichere, damit ich sie 
im nächsten Zug dann Umrechnen kann um eine temperaturabhängige 
Lüftersteuerung zu verwirklichen.

Tipps und Tricks würden mir sehr weiterhelfen :)


Vielen Dank schonmal für eure Hilfe.


Viele Grüße,
Dieter

von hp-freund (Gast)


Lesenswert?

Hallo Chris ähh Dieter ;-)

Da hast Du dir einen Brummer zum Anfang ausgesucht.

Ist gar nicht so einfach etwas dazu zu finden, aber hier ist etwas:
https://github.com/Azure/sonic-sdi-device-drivers/blob/master/src/sdi_emc142x.c
https://github.com/Azure/sonic-sdi-device-drivers/blob/master/sonic/sdi_emc142x_reg.h

Dazu noch die anderen Dateien in den Verzeichnissen.

Mehr kann ich dazu nicht sagen da ich den Chip nicht hier habe.

von Bülent C. (mirki)


Lesenswert?

Ist eigentlich ganz simple...
Du brauchst in etwas solche Funktionen zum senden und empfangen
1
void pcm1774_sendByte(unsigned char address, unsigned char data)     
2
{
3
  uint8_t data2[2];
4
  data2[0] = address;
5
  data2[1] = data;
6
    
7
  HAL_I2C_Master_Transmit(&hi2c1, PCM_1774_ADDRESS, (uint8_t *)data2, 2, 100);
8
  
9
10
  
11
}
12
13
uint8_t pcm1774_readByte(uint8_t regValue)
14
{
15
  uint8_t RxBuffer[1];
16
  HAL_I2C_Mem_Read(&hi2c1, PCM_1774_ADDRESS, regValue, I2C_MEMADD_SIZE_8BIT, RxBuffer, 1, 10000);
17
  return RxBuffer[0];
18
}

von Dieter (Gast)


Lesenswert?

hp-freund schrieb:
> Hallo Chris ähh Dieter ;-)
>
> Da hast Du dir einen Brummer zum Anfang ausgesucht.
>
> Ist gar nicht so einfach etwas dazu zu finden, aber hier ist etwas:
> https://github.com/Azure/sonic-sdi-device-drivers/...
> https://github.com/Azure/sonic-sdi-device-drivers/...
>
> Dazu noch die anderen Dateien in den Verzeichnissen.
>
> Mehr kann ich dazu nicht sagen da ich den Chip nicht hier habe.

Ist ganz praktisch, wenn man zwei Vornamen besitzt :D

Ich danke dir für deine schnelle Antwort und vor allem für deine Hilfe 
:)


Viele Grüße

von Dieter (Gast)


Lesenswert?

Bülent C. schrieb:
> Ist eigentlich ganz simple...
> Du brauchst in etwas solche Funktionen zum senden und empfangenvoid
> pcm1774_sendByte(unsigned char address, unsigned char data)
> {
>   uint8_t data2[2];
>   data2[0] = address;
>   data2[1] = data;
>
>   HAL_I2C_Master_Transmit(&hi2c1, PCM_1774_ADDRESS, (uint8_t *)data2, 2,
> 100);
>
>
>
> }
>
> uint8_t pcm1774_readByte(uint8_t regValue)
> {
>   uint8_t RxBuffer[1];
>   HAL_I2C_Mem_Read(&hi2c1, PCM_1774_ADDRESS, regValue,
> I2C_MEMADD_SIZE_8BIT, RxBuffer, 1, 10000);
>   return RxBuffer[0];
> }

Ich danke dir für deine Hilfe und für den Denkanstoß :)


Viele Grüße

von Dieter (Gast)


Lesenswert?

Hallo,

ich hätte noch eine Frage und zwar funktioniert bei mir jetzt die 
Kommunikation mit dem EMC1428 einwandfrei.(noch einmal vielen Dank für 
den Denkanstoß)

Doch ich möchte nun eine Funktion schreiben, die verschiedene 
vorgegebene Register des Chips nacheinander ausliest und mir jeweils den 
Wert zurückgibt, damit ich z.B. mehrere Temperaturen auslesen und 
vergleichen kann oder falls ich später noch weitere Temperatursensoren 
an dem Chip anbringe, würde mir so eine Funktion die Code Erweiterung 
einfacher machen. Da ich die neuen Register dann nur als #define 
hinzufügen könnte und sonst nichts verändern müsste.

Hätte von euch jemand einen Tipp wie ich das am geschicktesten angehen 
kann bzw. hat jemand schon Erfahrung mit dem Schreiben einer solchen 
Funktion ?



Vielen Dank schon mal für eure Hilfe :)


Gruß,
Dieter

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.