Forum: Mikrocontroller und Digitale Elektronik MSP430 Byte senden


von Gast (Gast)


Lesenswert?

Hallo,

ich möchte 2Byte direkt hintereinander senden. Jetzt habe ich folgendes 
Problem:
Benutze ich den UART werden ja Start und Stop Bit eingefügt, ich möchte 
aber nur die 2Byte direkt ohne Pause aufeinanderfolgend senden.
Also hab ich das SPI versucht zu nehmen, hier hab ich jetzt zwar kein 
Start und Stop Bit mehr, allerdings macht mir der MSP430F149 eine Pause 
zwischen den beiden Paketen.
Mein Code sieht so aus
1
...
2
3
TXBUF1 = Byte1;                   
4
while (!(IFG2 & UTXIFG1));
5
TXBUF1 = Byte2;                  
6
while (!(IFG2 & UTXIFG1));
7
8
...
Also wie schon gesagt funktioniert ja eigentlich, nur halt beim UART mit 
Start und Stop Bit, welche ich nicht möchte und beim SPI mit Pause, 
welche ich nicht möchte.

Hat mir da jemand eine Lösung???

Wäre nett, Gruß

von Stefan (Gast)


Lesenswert?

An wen willst Du die 2 Bytes denn senden?

UART und SPI sind zwei grundlegend verschiedene serielle Schnittstellen, 
die Dein Empfänger auch "verstehen" können muss. Du kannst nicht einfach 
irgendwas davon nehmen.

Zur Deinem Problem:
UART ist eine asynchrone Schnittstelle ohne Taktübertragung. Start und 
Stop-bit sind zwingend notwendig, um Sender und Empfänger zu 
synchronisieren. Ohne das geht es nicht!

SPI ist eine synchrone Schnittstelle, d.h. Du hast da eine extra 
Taktleitung zur Synchronisation. Wenn Dein Sender eine "Pause" macht, 
ist auch der Takt inaktiv, d.h. die Pause ist nicht schlimm, der 
Empfänger merkt die Pause gar nicht!

von Bastler (Gast)


Lesenswert?

Ich möchte mit einem Schraubenzieher löten! Geht das?

Hört doch auf mit dem Scheiss. Uart, SPI, TWI, etc sind für etwas 
bestimmtes gemacht. Braucht sie so dan funktioniert es auch.

von Gast (Gast)


Lesenswert?

@ Stefan

die grundlegenden Eigenschaften von UART und SPI sind mir klar.
Ich brauche nur eine Schnittstelle, welche mir 2 Bytes ohne Pause und 
zusätliche Bits rausschickt.
Ein Gedanke war noch ob ich einen Timer nehmen soll mit dessen IR die 
Bytes über einen normalen Port rausgeshiftet werden sollen, wollt ich 
aber nicht. Deshalb hab ich mich für UART und SPI entschieden und wollte 
nur wissen, ob man die Schnittstellen so "misshandeln" kann, das es 
meinen Anforderungen genügt?


@ Bastler
mit einem Schraubenzieher kann man nicht löten.

von Stefan (Gast)


Lesenswert?

>die grundlegenden Eigenschaften von UART und SPI sind mir klar.
wirklich?

>Ich brauche nur eine Schnittstelle, welche mir 2 Bytes ohne Pause und
>zusätliche Bits rausschickt.
Wir wissen immer noch nicht, was für eine Schnittstelle das sein soll.
Ohne Infos -> keine Hilfe möglich

Apropos Infos... Dein MSP-Typ ist auch unbekannt.
Wenn's einer mit USI ist, hast Du sogar noch eine Chance...
Ansonsten hilft nur noch Bit-Banging!

von Christian R. (supachris)


Lesenswert?

Gast wrote:
> @ Stefan
>
> die grundlegenden Eigenschaften von UART und SPI sind mir klar.
> Ich brauche nur eine Schnittstelle, welche mir 2 Bytes ohne Pause und
> zusätliche Bits rausschickt.

Ohne Pause ist fast immer ein Trugschluss. Entweder es ist synchron, 
also SPI, dann übernimmt der Empänger eh mit der Taktflanke, also kann 
die Pause zwischen 2 Bytes vier Tage lang sein, denn es kommt dazwischen 
kein Takt raus. Oder es ist asynchron, also UART, dann gibts Start und 
Stopp-Bit.

Also, was genau willst du ansteuern, und welchen MSP430 nimmst du?

von Johnny (Gast)


Lesenswert?

Ich würde sowas mit einem Timer und einem normalen IO machen. Dann hast 
Du alles selber unter Kontrolle und die Software ist auch ohne grosse 
Änderungen auf anderen Kontrollern lauffähig.
Falls der MSP einen DMA-Controller einverleibt hat, kann man es 
vielleicht sogar mit diesem elegant lösen.

von Gast (Gast)


Lesenswert?

MSP430F149 hab ich aber im ersten Beitrag erwähnt.

Also...
ich möchte die 2 Bytes an den Funkchip ADF7012 schicken, dieser verfügt 
über einen DataIN Port.
Mein Empfänger RF Teil soll nun diese beiden Bytes empfangen.
Das Problem ist jetzt nur, das es sich beim Empfänger um den CC1100 
handelt, welcher über eine SPI Schnittstelle verfügt. Empfangene Bits 
werden über SPI an den Controller gesendet.

Jetzt wieder zum Sender:
Sende ich nun über UART, versteht das mein Empfänger als 2Bytes+2Stop 
und 2Start Bit = 20Bit. Sende ich über SPI versteht der Empfänger die 
Pause, welche auftritt als 2 '1' Bit, also insgesamt auch 20 Bit.

Das große Problem ist halt, dass der Sender RF Chip die Daten welche 
über DataIN kommen einfach sendet, und der Empfänger die empfangenen 
Daten über SPI wieder ausgibt.

Also möchte ich einfach 16 Bit ohne Pause (welche der Empfänger als '1' 
interpretiert) und/oder ohne Start und Stop Bit (welche der Empfänger 
ebenfalls dann über SPI an den Empfänger Controller sendet) schicken.

Mag jetzt sehr verwirrend sein und vielleicht mit zwei identischen Funk 
Chips einfacher zu lösen sein. Aber die Hard Ware ist gegeben und ich 
möchte da nichts ändern.

Also nochmal:
UART ohne Start und Stopbit möglich???
SPI ohne Pause möglich???
oder ander einfach Lösung???

von Stefan (Gast)


Lesenswert?

Ohne das Datenblatt des ADF7012 jetzt komplett gelesen und verstanden zu 
haben... aber da steht doch ganz klar drin, dass die zu sendenden Daten 
an TxDATA über TxCLK synchronisiert werden müssen.
Du musst Dir also ein Schema ausdenken, wo Dein µC TxCLK als 
Eingangssignal verwendet und dazu synchron die Daten ausgibt!

von Gast (Gast)


Lesenswert?

@ Stefan

TxDATA ist korrekt.
TxCLK brauch ich nicht, da ich einfaches FSK und kein GFSK verwende, das 
ist nur nötig, wenn ich über meine Daten eine Gaußkurve legen möchte, um 
störende Oberwellen zu filtern. Diese Kurve benötigt dann eine 
synchronisation mit den Bits, welche über TxCLK gegeben wird.

Die Funkübertragung funktioniert ja.

von Christian R. (supachris)


Lesenswert?

Wie ich hier Beitrag "MSP430 Bytes über SPI senden ohne Pause" schon schrieb 
geht das mit der Hardware USART nicht. Das musst du dann zu Fuß machen.

von Stefan (Gast)


Lesenswert?

Ich frage mich gerade, ob Du nicht ein generelles Problem bei Deiner 
Funkdatenübertragung drin hast. Wenn Dein Empfänger eine Pause als '1' 
interpretiert, dann läufst Du doch Gefahr, dass das auch bei Datenbytes 
passiert, wenn lange '0' oder '1' Sequenzen vorkommen?!
Du musst -denke ich- auf jeden Fall Deine Daten für die Funkstrecke 
codieren (Manchester, 4B5B, o.ä.), um von der "Zustandscodierung" auf 
eine "Flankencodierung" zu kommen!

von Christian R. (supachris)


Lesenswert?

Bist du eigentlich der aus dem alten Thread? Kommt mir so vor....
Mit dieser Art Funkübertragung bekommt man doch keine zuverlässige 
Geschichte hin, würd ich meinen.

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.