Forum: Mikrocontroller und Digitale Elektronik 16 Bit über USART schieben


von joe (Gast)


Lesenswert?

Hallo,

ich hab das folgende Problem. Ich habe einen Baustein, welcher ein 16 
Bit Datenwort empfangen soll. Zur verfügung habe ich die USART 
Schnittstelle eines ATMEGA 48 Controllers.

Diese kann laut datenblatt aber nur 8 Bit laden und diese dann 
rausschieben.
Und mit jeder neuen Sequenz wird lt Datenblatt ein Stopbit mit gesendet.

Ist das was ich vorhab dann mit diesem Controller überhaupt möglich?

Vielen Dank

von Marcus W. (blizzi)


Lesenswert?

Hallo joe,

möglich ist es auf jeden Fall, z.B. per Software-UART.

Gruß Marcus

von joe (Gast)


Lesenswert?

Hallo,

erstmal vielen Dank.

Aber wie meinst du das? Software UART? Also selbst ne Schnittstelle 
schreiben und die Atmelinterne nicht verwenden?

von Ralph (Gast)


Lesenswert?

1. Wie wird das Datenwort gesendet? d.h. welche Schnittstelle verwedet 
der Sender?
2. Uart ist immer 8 Bit ==> 16 but werden dan  aks 2 * 8 Bit gesendet 
und du bekomst aus dem Rx Register das Byte OHNE die Stopbits.

von jan (Gast)


Lesenswert?

Hallo,

also ich schiebe die Daten synchron mit dem Takt durch die USART 
Schnittstelle.

2*8 Bits senden.... Bist du sicher, dass kein Stopbit mit gesendet wird? 
Ich habs ausprobiert und mir aufm scope angeguckt.
Ich bin noch etwas neu mit den atmels... daher bitte ich um 
Verständnis:)

von Frank (Gast)


Lesenswert?

Was er meint ist, dass das Stopbit zwargesendet wird, aber von der 
empfangenden UART wieder "ausgefiltert" wird.

Falls der Empfänger kein UART sein sollte, kannst Du ja das SPI 
verwenden, da geht das auch ohne Stopbit.

Frank

von joe (Gast)


Lesenswert?

Achso,

nein auf der Empfängerseite befindet sich ein Baustein mit einer 
Einfachen seriellen Schnittstelle. Die erwartet taktsynchron 16 Bit ohne 
Stoppbit usw.

Mit dem SPI müsste das gehen meinst du?

von Johannes M. (johnny-m)


Lesenswert?

Ralph wrote:
> 2. Uart ist immer 8 Bit ==> 16 but werden dan  aks 2 * 8 Bit gesendet
> und du bekomst aus dem Rx Register das Byte OHNE die Stopbits.
Nö. Für UART gibts keine Norm, die irgendeine Datenbreite vorschreibt.

von Marcus W. (Gast)


Lesenswert?

Bezüglich des Software-UART hast du mich richtig verstanden.
Ist nur bissl kritisches Timing, da gibts hier im Forum aber schon 
Ansätze dafür und Beispielcode.

von Falk B. (falk)


Lesenswert?

@ joe (Gast)

>Einfachen seriellen Schnittstelle. Die erwartet taktsynchron 16 Bit ohne
>Stoppbit usw.

Dan ist ein UART sowieo nicht brauchbar, der ist nämlich asychron. Siehe 
Seriell

>Mit dem SPI müsste das gehen meinst du?

Ja.

AVR-Tutorial: Schieberegister

MfG
Falk

von joe (Gast)


Lesenswert?

Dan ist ein UART sowieo nicht brauchbar, der ist nämlich asychron.

Ich benutze den USART im synchron mode.

von joe (Gast)


Lesenswert?

Und ich möchte 16 Bit taktsynchron loswerden.

von Christian R. (supachris)


Lesenswert?

Na einfach 2 mal 8 Bit losschicken, und das Chip-Select-Signal 
zwischendurch nicht wegnehmen. Die USART-State-Machine erzeugt doch nur 
bei Datenbits den Takt, zwischendurch ist doch kein Takt, also keine 
Datenübernahme. Und StoppBit gibts bei SPI nicht.

Also am MSP430 klappt das bestens, man muss nur richtig abfragen, ob das 
1. Byte raus ist, weil der Prozessor ja viel schneller als die SPI sein 
kann.

von joe (Gast)


Lesenswert?

Hallo,

moment der Takt wird permanent rausgegeben oder etwa nicht?
Und welche Bits in welchem Register muss ich setzten, dass die USART
Schnittstelle nicht ein Stopbit mitsendet?

von Karl H. (kbuchegg)


Lesenswert?

Die USART macht immer mindestens 1 Stoppbit.

von joe (Gast)


Lesenswert?

Mein reden so steht es auch im Datenblatt.

Daher will ich eigentlich nur ein paar kleine Fragen beantwortet haben:

1. USART macht immer 1 Stopbit -> 16 bit mit USART senden kann ich dann 
ja wohl vergessen ohne Stopbit mittendrin. Oder gibt es einen trick?

2. Was währe nun einfacher Software USART selber basteln oder SPI?

3. Wie läuft das bei der SPI ist da die Wortbreite die man senden will 
beliebig?

von Frank B. (frank_b) Benutzerseite


Lesenswert?

Notfalls schreib Dir selbst eine Routine die das in Software macht und 
die Pins toggelt, wenn Dir das Hardware-TWI zu kompliziert ist.


1. Datenleitung auf HI oer LO, je nach BIT
2. Taktleitung  HI
3. Taktleitung LO
4. gehe zu 1.

von Karl H. (kbuchegg)


Lesenswert?

Frank Egal wrote:
> Notfalls schreib Dir selbst eine Routine die das in Software und die
> Pins toggelt,

Meine Rede.
Der 7-Zeiler wäre schon längst fertig.

von Falk B. (falk)


Lesenswert?

@ joe (Gast)

>moment der Takt wird permanent rausgegeben oder etwa nicht?

Nein, wozu auch? Im synchronen Betrieb für jedes Bit einen Takt. Ohne 
zusätzlich Start- oder Stopits. Siehe [SPI]].

Im asynchronen Betrieb wir keine Takt ausgegeben, dafür abe Start- und 
Stopbit automatisch angefügt UART.

>Und welche Bits in welchem Register muss ich setzten, dass die USART
>Schnittstelle nicht ein Stopbit mitsendet?

Macht sie im synchronen Betrieb nicht.

MFG
Falk

von Christian R. (supachris)


Lesenswert?

Karl heinz Buchegger wrote:
> Die USART macht immer mindestens 1 Stoppbit.

Nur, wenn man sie im UART-Betrieb benutzt. Aber er will ja eine 
SPI-Schnittstelle, auch wenn er das vielleicht selbst gar nicht so recht 
weiß.

von joe (Gast)


Lesenswert?

Deswegen frag ich ja.

Gut ich beschäftige mich erstmal weiter mit dem Datenblatt. Ich glaube 
der Teil USART in SPI mode is ganz interessant für mich.

Danke nochmals

von Karl H. (kbuchegg)


Lesenswert?

Christian R. wrote:
> Karl heinz Buchegger wrote:
>> Die USART macht immer mindestens 1 Stoppbit.
>
> Nur, wenn man sie im UART-Betrieb benutzt. Aber er will ja eine
> SPI-Schnittstelle, auch wenn er das vielleicht selbst gar nicht so recht
> weiß.

Bringt mich jetzt nicht durcheinander. :-)

Es gibt doch folgende Möglichkeiten

* USART - asynchron
* USART - synchron
* SPI


USART - synchron ist aber nicht dasselbe wie SPI.
Oder doch?

Ich kann aus der Doku 'USART - Frame Formats' nichts erkennen,
wonach Start und Stopbits im synchronen Betrieb nicht gesendet
werden würden.

von Christian R. (supachris)


Lesenswert?

Also ich kenn´s vom ATMega nich so wirklich genau, aber dürfte ja 
ähnlich sein wie am MSP430, da gibts bei der USART folgende 
Möglichkeiten:

- UART -> asynchron (UART, also RS232 usw.)
- USART -> synchron I2C
- USART -> Synchron SPI

Und SPI kann der ATMega garantiert auch. USART bedeutet ja, dass er 
synchron und asynchron kann.

von Karl H. (kbuchegg)


Lesenswert?

Christian R. wrote:
> Also ich kenn´s vom ATMega nich so wirklich genau, aber dürfte ja
> ähnlich sein wie am MSP430, da gibts bei der USART folgende
> Möglichkeiten:
>
> - UART -> asynchron (UART, also RS232 usw.)
> - USART -> synchron I2C
> - USART -> Synchron SPI
>
> Und SPI kann der ATMega garantiert auch. USART bedeutet ja, dass er
> synchron und asynchron kann.

Eben. Aber der Mega (zb Mega8) hat unterschiedlche Pins für
USART, SPI und TWI

USART:  RxD, TxD, XCK
SPI:    MISO, MOSI, SCK, SS
TWI:    SCL, SDA

Daraus schliesse ich, dass das unterschiedliche Hardwareeinheiten
sind.
Benutzt mal also dezidiert die USART, dann kommt man um Start-
Stopbit nicht herum. Zumindest ist das meine Lesensart der Doku.
Was natürlich nicht heisst, dass man mittels SPI oder TWI nicht
ohne Start-/Stop arbeiten kann. Aber dann ist man nicht mehr an
der USART sondern bei SPI oder TWI. Aber das wurde ja schon weiter
oben angeregt.

von Christian R. (supachris)


Lesenswert?

Jup, so ist es am MSP430 auch, nur dass es nur ein Hardware-Modul gibt. 
Aber eben mit getrennten Anschlüssen. Man kann aber nur eins von den 
dreien gleichzeitig benutzen.

Wie dem auch sei, ich vermute ganz stark, er will einen ADC oder DAC 
oder sowas ansprechen und das läuft ja im Normalfall per SPI, da sind 16 
Bit kein Thema.

von joe (Gast)


Lesenswert?

Okay ich vermute auch mal, dass ich dann auf das SPI ausweichen muss.
Dementsprechend muss ich auch das Layout ändern, weil ich die Hardware 
Pins vom USART nicht nehmen kann.

von joe (Gast)


Lesenswert?

So die Lösung des Problem ist USART in SPI Mode. So kann man die Pins 
der Usart Schnittstelle als SPI Pins benutzen.

Ich bedanke mich nochmal bei allen die mir geholfen haben.

Des Weiteren USART synchron sendet immer ein Stopbit ....so will es das 
Datenblatt.

von Christian R. (supachris)


Lesenswert?

Na dann. Ist ja auch die Standard-Variante. Synchron mit Stoppbit usw 
ist ja ein ziemlicher Sonderfall....weiß selber nicht mal, wo man das 
nimmt....

von joe (Gast)


Lesenswert?

Wieso???

Das ist ein Digitales Poti, welches ein 16 bit Datenwort haben will.

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.