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ß
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!
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.
@ 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.
>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!
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?
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.
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???
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!
@ 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.
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!
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.