×

Arduino und SPI - TLC549


Gepostet Oktober 2017, Kategorie: I2C & SPI


Thumbnail: Arduino und SPI - TLC549

Der TLC549 ist ein 8-Bit AD-Wandler. Die Daten werden bei diesem IC über das SPI-Protokoll übertragen. Dieser IC wird in diesem Post über den Arduino Uno angesteuert.


Inhaltsverzeichnis


    Datenblatt: http://www.ti.com.cn/cn/lit/ds/symlink/tlc549.pdf

    Aufbau

    Aufbau|50 Schaltplan|50

    An den analogen Eingang des TLC549 wird ein Potentiometer angeschlossen, um eine Spannung einstellen zu können, die durch den ADC gemessen werden soll.

    Über die Anschlüsse REF+ und REF- werden die Referenzspannungen des AD-Wandlers definiert. Schließt man 5 V und GND an diese Pins an, so wird des Messbereich des ADC auf 0 bis 5 V festgelegt.

    Der Clock-Pin wird mit der SCK-Leitung des SPI-Bus verbunden. Der DOUT-Pin wird mit der MISO-Leitung des SPI-Bus verbunden. Der CS-Pin (Chip-Select) kann mit einem beliebigen Pin des Arduinos verbunden werden. Die MOSI-Leitung wird nicht benötigt bei diesem IC, da keine Daten vom Master an den Slave übertragen werden müssen.

    Programmierung

    Eine Hilfe stellt das folgenden Bild aus dem Datenblatt auf Seite 3 dar.

    Ablauf einer Messung|75

    Das folgenden Programm gibt die Daten des AD-Wandlers über die serielle Schnittstelle aus.

    Bei der Initialisierung ist zu beachten, dass die SPI-Clock durch 16 geteilt werden muss, da die im Datenblatt verzeichnete Maximalfrequenz 1.1 MHz beträgt.

    Durch die Anweisung digitalWrite(CS, LOW); wird der TLC549 eingeschaltet und während des Programmablaufes nicht mehr ausgeschaltet.

    Die Abfrage der Daten erfolgt durch die Anweisung SPI.transfer(0x00). Indem Daten über den SPI-Bus gesendet werden, taktet die SPI-Clock und gleichzeitig werden die Daten vom Slave empfangen. Das empfangene Byte wird von der Methode SPI.transfer() zurückgegeben und anschlißend über die serielle Schnittstelle an den PC übertragen.

    #include <SPI.h>
    const uint8_t CS = 10;
     
    void setup() {
      Serial.begin(9600);
      SPI.begin();
      SPI.setClockDivider(SPI_CLOCK_DIV16);
     
      pinMode(CS, OUTPUT);
      digitalWrite(CS, LOW);
    }
     
    void loop() {
      Serial.println(SPI.transfer(0x00));
      delay(20);
    }