Forum: Mikrocontroller und Digitale Elektronik msp430 i²C UND SPI


von Timo P. (latissimo)


Lesenswert?

Hallo,

mein verwendeter MSP hat eine gemeinsame I²C und SPI Schnittstelle. Das 
bedeutet doch, dass ich nicht mehr die möglichkeit habe, SPI und I2C- 
Teilnehmer parallel(zeitlich gesehen) zu betreiben.

Muss ich auf externe Schnittstellen als IC ausweichen?
Oder Gibt es fertige SW-Routinen, die eine gleichwertige Schnittstelle 
realisieren? Dann ist meine CPU-Auslasstung doch hoch oder? Will den 
Controller mit 32kHz ext. Clock laufen lassen.

Danke für Lösungen

von Christian R. (supachris)


Lesenswert?

Da der nur eine CPU hat, kannst du eh nicht 2 Sachen gleichzeitig 
machen. Du kannst aber immer noch zwischen I2C und SPI umschalten, die 
Anschlüsse sind ja bei fast allen MSP430 extra rausgeführt. Was 
verstehst du denn unter gleichzeitig? Und 32kHz als MCLK ist wirklich 
nur in ganz besonderen Fällen sinnvoll, wenn es wirklich auf µW 
ankommt...ansonsten nimmt man den DCO dafür, der wacht extrem schnell 
auf, braucht wenig Strom. Bei einem ordentlichen MSP430 Design ist die 
CPU nur ganz kurz während der Interrupt-Abarbeitung aktiv, die restliche 
Zeit im LPM...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

"mein verwendeter MSP" - welcher?

Das hängt vom verwendeten MSP430-Derivat ab. Die "alten", wie 
beispielsweise der 'F16x, die können tatsächlich nur SPI oder I2C 
oder asynchron seriell.

In neueren MSP430-Varianten wird eine Kombination aus USCI_A und USCI_B 
verwendet, diese kann gleichzeitig SPI und I2C (oder asyn. UART und 
I2C oder asyn. UART und SPI).

> Will den Controller mit 32kHz ext. Clock laufen lassen.

Das sagt exakt gar nichts, denn damit lässt sich -je nach verwendeter 
Variante- auch der interne DCO betreiben. Und damit stehen -je nach 
verwendeter Variante- auch etliche MHz zur Verfügung.

von Jörg S. (joerg-s)


Lesenswert?

>In neueren MSP430-Varianten wird eine Kombination aus USCI_A und USCI_B
>verwendet...
Oder nur USI, dann geht wirklich nur SPI ODER I2C.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ja, sorry, da hatte ich mich missverständlich ausgedrückt.
Es gibt sehr unterschiedliche Hardwarevarianten des MSP430, deswegen ist 
es wichtig, zu wissen, um welche Variante es geht.

Würde der Threadstarter beispielsweise einen 'F5438 verwenden, wäre 
seine Frage unverständlich, da dieser vier USCI_A/B-Paare aufweist und 
so simultan vier I2C- und vier SPI-Schnitttellen bedienen kann.

von Timo P. (latissimo)


Lesenswert?

es geht speziell um den MSP430F2274

von Timo P. (latissimo)


Lesenswert?

UART ist ja auch noch da.

alle 3 lassen sich jedenfalls nicht nutzen :(

UART und SPI teilen sich nämlich einen Pin und zwar folgenden:
P3.4/UCA 0TXD /UCA0SIMO

also werde ich einfach UART und das TWI nutzen

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Der '2274 verwendet dieselbe USCI_A und USCI_B-Kombination, wie sie auch 
im '5438 anzutreffen ist, halt nur einmal.

USCI_A0 ist für SPI zu verwenden, USCI_B0 ist für I2C zu verwenden.

Diese beiden kannst Du simultan verwenden.

Wenn Du noch zusätzlich eine UART benötigst, so muss USCI_A0 dran 
glauben bzw. je nach Bedarf umkonfiguriert werden. Oder Du verwendest 
eine Software-UART, was je nach zu übertragender Datenmenge auch kein 
Problem darstellen muss.

von Christian R. (supachris)


Lesenswert?

Rufus t. Firefly schrieb:
> Der '2274 verwendet dieselbe USCI_A und USCI_B-Kombination, wie sie auch
> im '5438 anzutreffen ist, halt nur einmal.
>
> USCI_A0 ist für SPI zu verwenden, USCI_B0 ist für I2C zu verwenden.
>
> Diese beiden kannst Du simultan verwenden.
>
> Wenn Du noch zusätzlich eine UART benötigst, so muss USCI_A0 dran
> glauben bzw. je nach Bedarf umkonfiguriert werden. Oder Du verwendest
> eine Software-UART, was je nach zu übertragender Datenmenge auch kein
> Problem darstellen muss.

Oder die Timer UART, das ist ziemlich geschickt gemacht beim MSP430 mit 
dem Timer A.

von Jörg S. (joerg-s)


Lesenswert?

Wenn der SPI ein Master sein soll, würde ich das als Software machen, 
ist doch viel einfacher als UART. Selbst ein I2C Master ist noch 
einfacher in Software zu machen als UART...

von Timo P. (latissimo)


Lesenswert?

Habe einen Beitrag eröffnet, der mir als Ergebnis eine SW-UART 
ausgespuckt hat. Diese werde ich wohl auch nutzen müssen.

von Christian R. (supachris)


Lesenswert?

Hm, was genau willst du denn machen? In deinem ersten Beitrag hast du 
von UART nix geschrieben.

von Timo P. (latissimo)


Lesenswert?

Was genau ich machen will?

Also die UART will ich auf jeden Fall nutzen. Für einen X-Port. Das SPI 
und das TWI brauche ich für die Auswertung verschiedener Sensoren. ca 10 
digitale sensoren.

von Christian R. (supachris)


Lesenswert?

Achso. Ja, da bräuchtest du einen der MSP430 mit den 4 USARTs drin, da 
ginge das alles gleichzeitig. Mit dem F2274 gehts nicht alles in HW.

von Timo P. (latissimo)


Lesenswert?

controller ist leider vorgeschrieben, also muss ich wohl eine der drei 
Interfaces via SW aufbauen.

  ODER:

Ich will die sensordaten alle was weiß ich vllt 10 min auslesen. Für die 
Zeit des Auslesens sind SPI und I2C aktiv.
Jede Stunde etwa ist die UART an für die Datenübermittlung via X-Port. 
Vllt hilft mir das auch, weil so kann ich die Schnittstellen zeitlich 
voneinander trennen, mal läuft es so, mal läuft es so, das wäre die 
Lösung für mich.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Bei den Zeitvorgaben ist eine sequentielle Ansteuerung sicherlich der 
gangbarste Weg. I2C steuerst Du mit USCI_B0 an, SPI und UART mit 
USCI_A0. Mit einer zusätzlichen Steuerleitung (irgendein freier 
Port-Pin) schaltest Du die eine doppelt verwendete Signalleitung 
zwischen SPI- und UART-Betrieb um.

von Timo P. (latissimo)


Lesenswert?

"umschalten"

Heißt das, dass ich eine Art Wechselschalter (als Halbleiter) nutze, der 
mir entweder den einen oder den anderen Weg frei schaltet?

Weil wenn die doppelt genutzte Leitung einfach UART-Signale an 
SPI-Teilnehmer sendet, gibt es sicher nix gutes...
umgekehrt natürlich genauso.

Wie realisiere ich solch einen Wechsler am einfachsten? Ne 
Transistorschaltung? oder gibt es IC`s?

von Jörg S. (joerg-s)


Lesenswert?

>Wie realisiere ich solch einen Wechsler am einfachsten? Ne
>Transistorschaltung? oder gibt es IC`s?
Z.B. mit einer Hand voll Logik Bausteinchen (74xx08, 74xx00 usw.)

Ich persönlich würde den SPI Master aber einfach in ein paar Zeilen Code 
als Software realisieren.

von Timo P. (latissimo)


Lesenswert?

Hallo!
Gibts einen bestimmen Grund für die Auswahl, was die SW-Schnittstelle 
anbelangt? Ich meine warum SPI, warum nicht UART oder I²C?
Ist der Programmieraufwand geringer?

mfg Timo

von Jörg S. (joerg-s)


Lesenswert?

>Ist der Programmieraufwand geringer?
Ja. Vor allem verbraucht man für SPI oder I2C keine kostbaren Timer :)
Für SPI musst du nur Portpins auf high-und low legen ohne dich groß um 
das Timing zu kümmern. Einfacher gehts nicht.

Z.B.
Lese-Schreibroutine für SPI (74HC165/74HC595)
1
unsigned char rw_74HC165_74HC595 (unsigned char data_out)
2
{
3
  unsigned char i;
4
  unsigned char data_in;
5
  
6
  data_in = 0;
7
  
8
  // 74HC165 Eingaenge in Shift Register uebertragen
9
  LOAD_L;
10
  LOAD_H;
11
  
12
  for(i = 0x80; i != 0; i >>= 1)
13
  {
14
    // Bit ausgeben
15
    if (data_out & i) MOSI_H;
16
    else              MOSI_L;
17
18
    // Bit lesen
19
    if (MISO_IN_H) data_in |= i;    
20
    
21
    // Takt ausgeben
22
    CLK_H;
23
    CLK_L;
24
  }
25
  
26
  // 74HC595 Ausgaenge setzen
27
  SET_H;
28
  SET_L;
29
  
30
  return data_in;
31
}

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.