Zusammenfassung
Diese C-Bibliothek beschreibt die Ansteuerung des 16-Kanal AD-Wandlers MAX11131 über SPI mit einem Mikrocontroller der MSP430-Serie. Als Mikrocontroller wird der MSP43F5359 und als Entwicklungsumgebung die IAR Embedded Workbench genutzt.
Downloads MAX11131-Bibliothek
AD-wanlder-max111xx-c-library.zip
Kurzbeschreibung
Der Ad-Wandler MAX11131 hat Schreibe- und Lesebefehle und kann über SPI angesprochen werden. Die Chip Select-Leitung signalisiert dabei den Start und Ende eines Frames. Der MAX11131 bietet die Möglichkeit entweder 16 Kanäle als Single Ended oder 8 Kanäle Differenzial zu nutzen.
Alle Funktionen der Bibliothek „max11131.c“ werden nachfolgend erläutert:
void MAX11131_SPI_init(void) | |
---|---|
Initialisiert SPI-UCB1 (Port 8) des Mikrocontrollers MSP430F5359IPZ | |
Parameter | - |
Return | - |
unsigned char MAX11131_SPI_transmit(unsigned char data) | |
---|---|
Senden und empfangen über SPI über Kanal UCA1 des MSP430F5359 | |
Parameter | data; Information die über SPI gesendet werden soll |
Return | Information die über SPI empfangen wurde |
unsigned int MAX11131_transmit(unsigned int command) | |
---|---|
Sendet und Empfängt zum und vom MAX11131 über die SPI-Schnittstelle. Die !CS-Funktion zum signalisieren eines Frames ist hier schon drin. Für die Befehle siehe die Defines und Datenblatt ab Seite 15. Beachte es wird ein 2 Byte Befehl gesendet. Je nach Befehl wird auch geantwortet. Die Antwort muss aber der letzten Befehl der Versand wurde zugeordnet werden und nicht den aktuellen der Versand wird | |
Parameter | command; Befehl der dem MAX11131 versandt werden soll |
Return | Antwort die vom MAX11131 erhalten wurde |
MAX11131_bipolar_chanel(char k) | |
---|---|
Funktion sollte nur intern genutzt werden. Switch-Anweisung zur Auswahl des Bipolar-Kanals | |
Parameter | k; Kanal der ausgewählt werden soll |
Return | Gibt das entsprechende Register zurück |
unsigned int MAX11131_range_chanel(char k) | |
---|---|
Funktion sollte nur intern genutzt werden. Switch-Anweisung zur Auswahl des Range-Kanals | |
Parameter | k; Kanal der ausgewählt werden soll |
Return | Gibt das entsprechende Register zurück |
unsigned int MAX11131_unipolar_chanel(char k) | |
---|---|
Funktion sollte nur intern genutzt werden. Switch-Anweisung zur Auswahl des Unipolar-Kanals | |
Parameter | k; Kanal der ausgewählt werden soll |
Return | Gibt das entsprechende Register zurück |
unsigned int MAX11131_csel_chanel(char k) | |
---|---|
Funktion sollte nur intern genutzt werden. Switch-Anweisung zur Auswahl der AD-Kanäle | |
Parameter | k; Kanal der ausgewählt werden soll |
Return | Gibt das entsprechende Register zurück |
void MAX11131_Echo_aktiv (char status) | |
---|---|
Aktiviert die Echo-Funktion des MAX11131 für die Konfig-Register. Hierbei: Aktiviere-Echo -> Sende neue Konfig zur Zeit t -> Sende wieder neue Konfig zur Zeit t+1 und bekomme als Echo von MISO die Konfig aus Zeit t falls alles korrekt abgelaufen ist. | |
Parameter | status; Bei TRUE wird Echo aktiv, bei FALSE nicht |
Return | - |
void MAX11131_test (void) | |
---|---|
Teste den MAX11131 indem ich einen Echo sende und daraufhin eine Konfig, als Resultat sollte 0x8380 kommen | |
Parameter | - |
Return | - |
void MAX11131_ADC_conf(void) | |
---|---|
Die Funktion stellt den AD-Wandler ein. Dazu muss der Anwender die #defines in der Header-Datei manipulieren (vgl. auch unten). Die Vorgehensweise stammt aus dem Flussdiagramm der Seite 32; MAX11131 Datenblatt; Jahr 2015. Variable GLOBAL in der Header zu finden und gegeben falls bearbeiten (TRUE oder FALSE) RefSel = TRUE: Single-Ended Referenz ; FALSE: Differenziele Referenz SoP_FD = TRUE: Pseudo oder Single-Ended ; FALSE: Voll-Differenziell SinEnd = TRUE: Single-Ended ; FALSE: Pseudo-Differenziell UniBip = TRUE: Unipolar ; FALSE: Bipolar ran = TRUE: Referenz +/-Vref ; Referenz +/-Vref/2 ; Nur bei Bipolar von Interesse anz = Anzahl der Kanäle, wähle zwischen 0 bis 7 |
|
Parameter | - |
Return | - |
void MAX11131_init(void) | |
---|---|
Initialisiere den MAX11131 indem ich ihm zuerst Konfiguriere und dann Dummy-Werte auslese | |
Parameter | - |
Return | - |
unsigned int MAX11131_get_ADC_eins(char ch) | |
---|---|
AD-Wert aus einzelnen Kanal bekommen | |
Parameter | ch; Kanal der ausgewählt werden soll |
Return | Gibt den entsprechende AD-Wert zurück |
unsigned int* MAX11131_get_ADC(char start, char end) | |
---|---|
Siehe dazu "Figure 12; Datenblatt Seite 33; Stand 2015". Hier gibt es zu viele Möglichkeiten um die Funktion wieder mit TRUE/FALSE Händeln zu können. Wähle mir aus, was zum Projekt passt. Hier Eingestellt sind: Externe Clock, Manuell, Kanalauswahl, No Reset, Power-Mode Normal. Den Kanal/Kanäle muss man sich selber über "start" und "end "wählen. !!! Wenn ich mehrere Kanäle Messe, dann beachte: Ich messe jetzt für Kanal N und bekomme den Wert von Kanal N-1 zuerst!! |
|
Parameter | start; Von Anfangskanal bis |
end; Endkanal | |
Return | Gibt AD-Wert-Array zurück |
unsigned int MAX11131_mean(char ch, int cnt, int pow) | |
---|---|
Berechne Mittelwert für den jeweiligen kanal ch mit shift-Division (zeitsparender als normale Division). Achte darauf das cnt = vielfache von 2 ist und pow die Potenz dazu. | |
Parameter | ch; Kanal der gemittelt werden soll |
cnt; Anzahl der Werte (müssen vielfache von 2 sein -> 2^n) | |
pow; Die Potenz n | |
Return | Gibt den Mittelwert zurück |