Hallo,
ich hab einen Sensor der mit Clock, DataIn/Out und Chipselect
ausgestattet ist. Den Sensor möchte ich nun über einen µC mittels SPI
ansprechen. Dazu habe ich zwischen MISO und MOSI des µC einen 1k Ohm
Widerstand gemacht. Ist das ok oder gibts da ne andere Methode?
Das Problem ist halt das DataIn/Out des Sensors nur 1 Pin ist und ich
ihn beschreiben muss um etwas auszulesen.
Gruß Maddin
Nabend,
das übliche Problem:
Gib uns bitte etwas mehr Informationen.
(Zum Beispiel von welchen Sensor du sprichst)
Ob das klappt oder wie man das besser macht hängt ganz davon ab wie die
Schnittstelle im Detail funktioniert.
Gruß,
Sven
Es handelt sich um den MAX6662 von Maxim. Das ist ein 12 Bit
Temperatursensor. Getestet wird das SPI mit dem AT32UC3C-ek Board.
SPI funktioniert denke ich auch. Wenn ich etwas sende geht der
ChipSelect auf low und ich kann die Clock über ein Oszi messen und auch
am MOSI sehe ich was.
Maddin schrieb:> Den Sensor möchte ich nun über einen µC mittels SPI ansprechen.
Ich würde das per Software machen, dann kann ich die Richtung des
Portpins einfach selber umschalten...
Es geht ja darum SPI zu testen, da dies für ein anderes Projekt benötigt
wird. Da ich noch nie nen 32 Bit µC programmiert habe wollte ich einfach
den Sensor mal auslesen, da ich dachte es wär realtiv einfach.
Hab es so verdrahtet aber nix kommt an. Ich hab mal MOSI und MISO des µC
miteinander verbunden und dann verschiedene Werte gesendet und wieder
eingelesen. Die Werte die empfangen wurden passen zu den gesendeten. Von
daher denke ich, dass das SPI an sich läuft.
Ich habe auch schon versucht CS auf low zu legen, dann 3 mal die write
Funktion aufrufen und 2 mal read aufrufen und dann den CS wieder auf
high legen. Funktioniert aber ebenfalls nicht. Das CS auf low bzw high
geht habe ich auch gemessen.
Maddin schrieb:> Ich habe auch schon versucht CS auf low zu legen, dann 3 mal die write> Funktion aufrufen und 2 mal read aufrufen und dann den CS wieder auf> high legen.
Mach doch einfach das, was das Datenblatt sagt.
Serial Interface Protocol
The serial interface consists of three signal lines: chip
select (CS), bidirectional data line (SIO), and serial
clock (SCLK). Only the master (external) drives CS and
SCLK. Both the master and the MAX6662 drive SIO.
When CS is high, the MAX6662 does not respond to any
activity on clock and data lines. When CS goes low, a
transaction begins. A valid transaction has 24 clock
cycles provided from SCLK after CS goes low—no more
and no fewer. Any communication with more or fewer
than exactly 24 clocks is ignored.
hey @ all,
ich habe ein ähnliches problem. im rahmen einer studienarbeit muss ich
mich ebenfalls mit dem uc3c und spi beschäftigen. es sollen halt 2
weitere prozessoren mit dem uc3c über spi kommunizieren.
hab schon etwas zeit gebraucht um mit dem neuen framework zu arbeiten
bzw allgemein mich an das avrstudio 5 zu gewöhnen. die beispiele rund
ums spi finde ich auch nicht so hilfreich.
die arbeit wird wohl scheitern da auch mein prof noch nicht so ganz den
durchblick hat....
Das Senden funktioniert definitiv. Nur kann ich nichts empfangen. Ich
hab das Board mal ans STK500 angeschlossen und den Atmega8 darauf als
Slave programmiert. Wenn ich vom UC3C was bekomme schickt der Atmega
direkt was zurück. Nur beim UC3C kommt nichts an.
Hallo,
das habe ich auch schon probiert. Funktioniert aber nicht. SCK wird
anscheinend nach dem Senden abgestellt. Ich weiss aber nicht wie SCK
dauerhaft läuft.
Maddin schrieb:> Ich schicke doch 8 Bit und erwarte 16 zurück.
Das ist auch OK, aber:
Knut Ballhause schrieb:> Only the master (external) drives CS and> SCLK.
Das heisst, dass du insgesamt 24Bit hinschicken musst, da der Slave
selber keinen Clock generiert.
Also: ein Kommando-Byte hinsenden, dann noch zwei weitere um einen Clock
für den Slave bereit zu stellen. Was du in den zwei weiteren Byte
sendest, ist egal - kann 0x00 oder 0xFF oder sonst was sein. SPI ist ja
immer in einer Schleife - du kannst nichts senden, ohne was zu
empfangen. Was du mit den Daten machst, ist ja egal. Heißt für dich:
Ignoriere das erste Byte, was in deinem uC ankommt, da dieses nur zum
Hinschicken der Daten war und die nächsten zwei Byte musst du asuwerten.
Ist bei SPI immer so.
Hi
>das habe ich auch schon probiert. Funktioniert aber nicht. SCK wird>anscheinend nach dem Senden abgestellt. Ich weiss aber nicht wie SCK>dauerhaft läuft.
Üblicherweise funktioniert das so:
Zum Lesen sendest du das Befehlsbyte und 2 Dummybyts. Nach jedem
Dummybyte liest du das SPI-Empfangsregister aus.
MfG Spess
Ich habe jetzt MOSI und MISO am UC3C gebrückt und sende einen Wert und
lese direkt danch das Register aus. Dazu habe ich die beiden Funktionen
aus der spi.c genommen.
1
if(gpio_get_pin_value(SWITCH)==false){
2
spi_write(SPI_TMP,0xC1);
3
spi_read(SPI_TMP,data_in);
4
}
5
6
7
if(data_in==0xC1)
8
gpio_set_pin_low(LED);
So sollte doch die LED leuchten oder? Es tut sich aber nichts. Hab ich
denn grundlegend bei der Initialisierung des SPI einen Fehler gemacht?
Also ich kenne deine Funktionen nicht, aber wie soll das hier gehen:
Maddin schrieb:> spi_read(SPI_TMP, data_in);
Willst du da ein Byte hinschicken, in das das Ergebnis eingetragen wird?
Oder verstehe ich da jetzt was falsch?