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
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...
"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.
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.
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
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.
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.
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...
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.
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.
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.
"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?
>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.
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
>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)