mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Implementierung eines ADT7301 an einem MSP430FR5729


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Dennis (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich versuche einen ADT7301 Temperatursensor an einem MSP430FR5729 zu 
implementieren.

Jedoch weiß ich nicht wie ich den Sensor auf dem MSP430 Microcontroller 
ansteuere bzw wie ich es implementieren soll.

Die Verkabelung sieht wie folgt aus:
                         MSP430FR5729
                       ----------------
                      |                |
 Data Out (UCA1SIMO) -|P2.5        P2.6|- Data In (UCA1SOMI)
                      |                |
    Slave reset (CS) -|P2.3        P2.4|- Serial Clock Out (UCA1CLK)
                      |                |
                       ----------------

Der unten stehende C Code zeigt meine MSP430 Initalisierung.
#include <msp430.h>
#include "base.h"

void SPI_init(void); // initialize the SPI communication
void SPI_send(unsigned int data);
void CS_Init(void); // clock system

int main(void)
{
    WDTCTL = WDTPW + WDTHOLD; // stop Watchdog timer

    CS_Init(); // set Timing

    SPI_init(); // Initialize SPI-Module UCA1

    while (1)
    {
        //_low_power_mode_3 (); // do nothing
    }
}


void SPI_init(void)
{
    SETBIT(P2SEL1, BIT4); // Select secondary function of P2.4 (UCA1CLK)
    SETBIT(P2SEL1, BIT5); // Select secondary function of P2.5 (UCA1SIMO)
    SETBIT(P2SEL1, BIT6); // Select secondary function of P2.6 (UCA1SOMI)

    SETBIT(P2DIR, BIT3); // Declare P2.3 as Select Slave port
    SETBIT(P2OUT, BIT3); // Start with high on Select Slave P2.3

    SETBIT(UCA1CTLW0, UCSWRST); // Software reset enable. Have to be selected here
    SETBIT(UCA1CTLW0, UCCKPH); // select clock phase to rising clock phase
    SETBIT(UCA1CTLW0, UCMSB); // direction of shift register
    SETBIT(UCA1CTLW0, UCMST); // SPI master
    SETBIT(UCA1CTLW0, UCSYNC); // Synchronous mode enable
    SETBIT(UCA1CTLW0, UCSSEL_2); // SMCLK clock selected
}

void SPI_send(unsigned int data)
{
    UCA1TXBUF = data; // send data
}

void CS_Init(void) //clock system
{
    // set up Clock System
    CSCTL0 = CSKEY; // enable clock system
    CSCTL1 = DCOFSEL_3; // frequency = 8,0 MHz
    CSCTL2 = SELA__XT1CLK | SELS__DCOCLK | SELM__DCOCLK; // select clock sources
    CSCTL3 = DIVA__8 | DIVS__32 | DIVM__8; // set frequency divider
    CSCTL4 = XT2OFF | XTS | XT1DRIVE_0; // XT2 disabled, XT1: HF mode, low power, no bypass
    CSCTL0_H = 0; // disable clock system
}

Beitrag #5689025 wurde von einem Moderator gelöscht.
Autor: Clemens L. (c_l)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dennis schrieb:
> SETBIT(UCA1CTLW0, UCSWRST);

Solange das SPI-Modul im Reset ist, läuft es nicht.
Siehe z.B. MSP430FR57xx_uscia0_spi_09.c, wie man's richtig macht.

> CSCTL2 = SELA__XT1CLK | SELS__DCOCLK | SELM__DCOCLK;
> CSCTL4 = XT2OFF | XTS | XT1DRIVE_0;

Das genügt nicht, um den Quarz zum Laufen zu bringen. Siehe das selbe 
Beispielprogramm.

>     UCA1TXBUF = data;

Das funktioniert nur, wenn TXBUF gerade leer ist. Du musst vorher 
warten, bis TXIFG gesetzt ist.

: Bearbeitet durch User
Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Clemens L.
Das macht alles allerdings Sinn.

Habe das Example von MSP430 auch schon mal implementiert, aber da hatte 
ich bestimmt auch einen Fehler gehabt.
Werde es nochmal probieren :)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.