Forum: Mikrocontroller und Digitale Elektronik SPI auf Board XMEGA256A3BU Xplained


von Al N. (Gast)


Lesenswert?

Hallo,


ich will auf besagtem Board

http://www.atmel.com/Images/doc8394.pdf

ein Dogl-Display per SPI an PORTD betreiben. Leider ist das nicht 
möglich, es findet keine Datenübertragung statt, welches ich per Oszi 
festgestellt habe.

Mit der gleichen Konfiguration an PORTC funktioniert es ohne Probleme so 
wie es soll.

An PORTD wird das SPI auch geteilt mit dem Flash und dem 
On-Board-Display, dafür habe ich extra eine Solution in Atmel-Studio 
gemacht ohne das Board anzugeben, also ich benutze nur den Prozessor am 
Board, nicht die Board-Komponenten.

Dennoch lässt sich nicht das SPI an PORTD für das Display nutzen, obwohl 
ich auch schon den Chip-Select-Leiter des On-Board-Display 
durchgeschnitten habe. Danach ging aber das komplette Board nicht mehr, 
daher habe ich dann Verbindung wieder gelötet.

Meine Frage ist: Hat jemand auch Probleme mit diesem SPI an PORTD bei 
diesem Board.
Gibt es da noch einen Trick, den benutzbar zu machen oder hat ihn jemand 
schon überhaupt für eine SPI-Anwendung erfolgreich zum Einsatz gebracht?



Gruß und schönen Sonntag.

von Christian D. (neo87)


Lesenswert?

Ich habe besagtes Board auch hier, habe aber bis jetzt nur das 
Onboard-Display an PortD verwendet, das ging problemlos. Ich greife 
allerdings nicht per USB sondern mit nem JTAG-ICE-3 drauf zu. Vielleicht 
klemmt's ja da, weil der USB-Port auch an PD6(MISO) und PD7(SCK) hängt.

von Christian D. (neo87)


Lesenswert?

Entschuldiung, falsche Info. An Header J4 (den willst du doch benutzen 
oder?) ist nur PD0-PD3 ausgeführt, die anderen gehören zu PE0-3. Du 
musst also den USARTD0 oder USARTE0 im SPI-mode verwenden. an J4 gibt es 
keinen SPI nur USART's, die du ja in den SPI-mode schalten kannst.

von Al N. (Gast)


Lesenswert?

Christian Dreihsig schrieb:
> Ich habe besagtes Board auch hier, habe aber bis jetzt nur das
> Onboard-Display an PortD verwendet, das ging problemlos. Ich greife
> allerdings nicht per USB sondern mit nem JTAG-ICE-3 drauf zu. Vielleicht
> klemmt's ja da, weil der USB-Port auch an PD6(MISO) und PD7(SCK) hängt.


Ich benutze den USB-Port nur zur Spannungsversorgung, ich hänge an den 
PC.

Daran könnte es klemmen, weil da Datenaustausch stattfinden könnte. Aber 
wie versorgst du dann das Board mit Spannung? Nimmst du ein Pin-Paar 
(VCC/GND) an einem der Header?

Das geht glaube ich nicht, da an diesen PINS der Ausgang eines 
Spannungreglers (5V -> 3,3V) hängt.

von Al N. (Gast)


Lesenswert?

Christian Dreihsig schrieb:
> Entschuldiung, falsche Info. An Header J4 (den willst du doch
> benutzen
> oder?) ist nur PD0-PD3 ausgeführt, die anderen gehören zu PE0-3. Du
> musst also den USARTD0 oder USARTE0 im SPI-mode verwenden. an J4 gibt es
> keinen SPI nur USART's, die du ja in den SPI-mode schalten kannst.


Gibt es hier einen leicht einsetzbaren Code-Snippet, um USARTD0 als SPI 
zu verwenden?

Ich benutze die USARTE0 als I2C-Bus ohne Probleme. Wie ist das möglich, 
obwohl es doch eigentlich USARTE0 sein soll?

von Christian D. (neo87)


Lesenswert?

Entschuldigung das ich erst jetzt antworte aber ich musste mit meiner 
Frau weg ;)

So jetzt zu deinem Problem, ich glaube du bringst hier ein bisschen was 
durcheinander.
Erstmal kannst du das UsartE0 nicht als I2C verwenden. Ich nehme an du 
benutzt das TwiE auf PE0 und PE1. Das teilt sich einen Pin mit dem 
USARTE0. Beides gleichzeitig geht nicht.

Aber lass uns mal von vorne anfangen. Als erstes solltest du mal einen 
Blick in das Datenblatt des Evalboards werfen: 
http://www.atmel.com/Images/doc8394.pdf dort findest du auf Seite 8 die 
Beschaltung des Headers J4. Pin 1-4 geht auf PE0-3, Pin 5-8 geht auf 
PD0-3.

Wenn du jetzt ins Datenblatt des Devices guckst: 
http://www.atmel.com/Images/Atmel-8362-8-and-16bit-AVR-microcontroller-ATxmega256A3BU_datasheet.pdf 
findest du auf Seite 58-59 die alternativen Funktionen von PortD & 
PortE. Und dort steht dann Beispielsweise das SPID auf PD4 - PD7 liegt. 
Die sind nicht auf J4 des Evalboards herausgeführt! (Warscheinlich weil 
Sie für's USB-Interface benutzt werden)
Deswegen kannst du dort auch nichts mit dem Oszi messen.

Wenn du also unbedingt dein Display an den PortD hängen willst, bleibt 
dir nur den UsartD0 im SPI-mode zu benutzen. Das hätte sogar den Vorteil 
das du die Daten per DMA ans Display senden könntest. Das DMA kann 
nämlich nicht auf das SPI-Interface zugreifen, nur auf's USART(was man 
ja als SPI konfigurieren kann). Deswegen verwende ich meistens die 
USART's im SPI-mode.

Ich hoffe das schafft ein wenig Klarheit, auch wenn Erklären nicht so 
meine Stärke ist.

von Al N. (Gast)


Lesenswert?

Hallo Christian,


ich danke Dir sehr, Du hast es sehr gut beschrieben um damit wesentlich 
weiter zu kommen.

Wenn es Dir nichts ausmacht, kannst Du mir auch einen Codebeispiel geben 
für eine Initialisierung und Benutzung des USART-SPI und besonders wenn 
man es auch noch über DMA machen kann. Ich weiß das klingt jetzt sehr 
fordernd. Naja wie dem auch sei.


Gruß

Al N.

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.