Hallo
ich hätte eine Frage zu der SPI Schnittstelle. Das Problem ist, dass auf
der Datenleitung nur die letzten 8bit ausgegeben werden, d.h. bei 0xffff
gibt er nur 0x00ff aus. Obwohl ich die 16bit eingestellt habe.
Bei dem Bild ist die blaue Spur der CLK, die rote Spur ist das
gewünschte Signal und die grüne Spur ist das Signal, dass ich
tatsächlich erhalte.
Ich verwende den dsPIC33FJ256MC710A, den PCD Compailer con CCS, und das
dsPICDEM MCLV Board.
ah ok ich denke ich hab da was gefunden.
Ich kenn mich mit PIC nicht so gut aus, aber das sollte allgemein gültig
sein.
versuch mal sowas hier (ich achte mal nicht auf syntex^^)
#include <33FJ256MC710A.h>
#include <stdio.h>
#include <stdlib.h>
#fuses XT,PR_PLL, NOWDT
#use delay (crystal=8M,clock=80M)
#use SPI(DI=PIN_F7, DO=PIN_F8,CLK=PIN_F6,bits=16)
main()
{
spi(uint16_t byte)
}//main ende
uint16_t spi(uint16_t byte)
{
byte= 0xaaaa
set_tris_f(0);
set_tris_e(0);
setup_spi(SPI_MASTER |SPI_MODE_16B| SPI_CLK_DIV_7 |SPI_L_TO_H);
while(1)
{
spi_write(byte);
delay_us(3);
}
}//spi ende
Setze nach der Initialisierung mit "setup_spi(SPI_MASTER |SPI_MODE_16B|
SPI_CLK_DIV_7 |SPI_L_TO_H);" nochmal die SPI-Schnittstelle auf 16 Bit
mit: SPI1CON1.MODE16 = 1; (oder wie das beim CCS gemacht wird).
(wäre ja nicht die erste fehlerhaft Lib eines Compilers)
Rufus Τ. Firefly schrieb:> Wie sieht denn der Prototyp der Funktion spi_write aus?
jo also wenn das geschriebene bis jetzt nicht funktioniert hat, würde
ich auch mal in der funktion spi_write() nachschauen...
wenn da ne 8bit variable irgendwo übergeben wird, kannst du vorher
modelieren was du willst
Stehen bei deinem Compiler irgendwelche Warnungen?
Viele Leute reagieren nur bei Fehlern auf Compiler Meldungen ;)
Auch die Warnungen bedeuten was...
Ps. du kannst deinen Compiler auf empfindlich stellen. Somit bringt er
dir mehr Warnungen. Ist oftmals die beste Lösung bei nicht 100%
funktionierendem Code
Also der dsPIC33 ist ein 16-Bit Kontroller und dessen FSR sind alle 16
Bit Breit - da will ich doch hoffen das da keine 8-Bit-"Dinger"
übergeben werden. Wenn doch, dann Compiler in die Tonne!
Chris B. schrieb:> Also der dsPIC33 ist ein 16-Bit Kontroller und dessen FSR sind alle 16> Bit Breit -
und alle möglichen an SPI anschliessbaren "Gegenstücke" arbeiten
natürlich auch auf 16-Bit-Basis...
Justus Skorps schrieb:> Chris B. schrieb:>> Also der dsPIC33 ist ein 16-Bit Kontroller und dessen FSR sind alle 16>> Bit Breit ->> und alle möglichen an SPI anschliessbaren "Gegenstücke" arbeiten> natürlich auch auf 16-Bit-Basis...
Nein, aber wenn ich schon auf 16-Bit-Mode stelle dann wird das
hoffenlich auch einen Grund haben - oder etwa nicht?
Chris B. schrieb:> Justus Skorps schrieb:>> Chris B. schrieb:>>> Also der dsPIC33 ist ein 16-Bit Kontroller und dessen FSR sind alle 16>>> Bit Breit ->>>> und alle möglichen an SPI anschliessbaren "Gegenstücke" arbeiten>> natürlich auch auf 16-Bit-Basis...>> Nein, aber wenn ich schon auf 16-Bit-Mode stelle dann wird das> hoffenlich auch einen Grund haben - oder etwa nicht?
Schon.
Es hat aber auch einen Grund, warum die spi_write Funktion das einen
feuchten Kehrricht interessiert.
Schliesslich benutzt man einen DSPic um einen auf Speed zu machen. Dem
widersprucht es ein bischen, wenn spi_write jedesmal wieder neu
analysiert, ob du den SPI auf 16 Bit geschaltet hast. Soweit kann man
das einem Entwickler schon zumuten, dass er in so einem Fall dann eben
nicht spi_write sondern spi_write_16 benutzt.