Forum: Mikrocontroller und Digitale Elektronik STM32F4: SPI: MISO Flanken zeigen komisches Verhalten


von Daniel V. (voda) Benutzerseite



Lesenswert?

Guten Morgen liebes Forum,

Zur Zeit versuche ich die Bilddaten eines ADNS3090-Sensors auszulesen. 
Meine Daten auf der MISO zeigen ein komisches Verhalten. Laut Datenblatt 
ist der SPI-Modus 3. Das Auslesen der Chip-ID klappt auch wunderbar.

Hier mein Code:
1
/*SPI-Initialisierung*/
2
//ADNS3090_NSS_LOW;
3
4
SPI_I2S_DeInit(SPI2);
5
SPI_InitTypeDef SPI_Init_ADNS3090;
6
SPI_Init_ADNS3090.SPI_Direction         = SPI_Direction_2Lines_FullDuplex;
7
SPI_Init_ADNS3090.SPI_DataSize          = SPI_DataSize_16b;          
8
SPI_Init_ADNS3090.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16;  
9
SPI_Init_ADNS3090.SPI_CPHA              = SPI_CPHA_2Edge;      
10
SPI_Init_ADNS3090.SPI_CPOL              = SPI_CPOL_High;        
11
SPI_Init_ADNS3090.SPI_CRCPolynomial     = 0;
12
SPI_Init_ADNS3090.SPI_FirstBit          = SPI_FirstBit_MSB;  
13
SPI_Init_ADNS3090.SPI_Mode              = SPI_Mode_Master;
14
SPI_Init_ADNS3090.SPI_NSS               = SPI_NSS_Soft;
15
SPI_Init(SPI2, &SPI_Init_ADNS3090);
16
SPI_Cmd(SPI2, ENABLE);  
17
[c]
18
19
und die Funktion:
20
[c]
21
void adns3090_FrameCapure_Config(void)
22
{
23
 ADNS3090_NSS_LOW;
24
    adns3090_Write(SPI2, ADNS3090_FRAME_CAPTURE, 0x83);
25
 ADNS3090_NSS_HIGH;
26
 delay_nms(1510/1000); 
27
}

Kurze Funktionsbeschreibung:
Um den Inhalt des Frame-Register (0x13) auszulesen, muss der Wert 0x83 
in dieses Register geschrieben werden. Die Writefunktion wird mit MSB=1 
aktiviert. Also: 0x80&0x13 als Adresse und 0x83 als Wert = 0b10010011 
0b10000011. Das liegt auch auf dem Bus. Aber warum verhält sich die 
Antwort vom Sensors, also die Flanken so komisch (fast schon kapazitiv)?


Danke und Gruß
Daniel

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Daniel V. schrieb:
> Aber warum verhält sich die Antwort vom Sensors, also die Flanken so
> komisch (fast schon kapazitiv)?
Welche Linie in deinen Screenshots meinst du?

Weil die MISO-Leitung nach dem Deselektieren aller Slaves hochohmig ist, 
wird sie dann langsam auf irgendeinen Pegel einpendeln, wenn nicht z.B. 
ein Pullup für einen definierten Zustand sorgt.

von Daniel V. (voda) Benutzerseite


Angehängte Dateien:

Lesenswert?

Lothar M. schrieb:

> Weil die MISO-Leitung nach dem Deselektieren aller Slaves hochohmig ist,
> wird sie dann langsam auf irgendeinen Pegel einpendeln, wenn nicht z.B.
> ein Pullup für einen definierten Zustand sorgt.

Ohh, sorry. Ich meine natürlich das Rosa-Signal. Pullups sind aktiviert.

Signale:
NSS  -> Kanal 1 (ge)
CLK  -> Kanal 2 (bl)
MISO -> Kanal 3 (rt)
MOSI -> Kanal 4 (dunkel-bl)

Danke und Gruß
Daniel

: Bearbeitet durch User
von hp-freund (Gast)


Lesenswert?

Daniel V. schrieb:
> Das Auslesen der Chip-ID klappt auch wunderbar.

Dann mach doch mal ein Oszi Bild davon.


In deinem Beispiel lässt Du dem ADNS3090 weder die Zeit zu antworten, 
noch gibst Du ihm die erforderlichen Takte dazu.
Was soll er damit machen?

von hp-freund (Gast)


Lesenswert?

Habe das Datenblatt noch mal angesehen, der Befehl kann R/W sein.
Also nehme ich meinen Beitrag zurück.

von Daniel V. (voda) Benutzerseite


Angehängte Dateien:

Lesenswert?

Keiner mehr eine Idee? Schaltungsfehler? Dabei habe ich mich an die 
Vorlage im Datenblatt (bis auf den Spannungsteiler bei Reset und NPD, da 
die Spannung 3,3V beträgt) gehalten.

Danke und Gruß
Daniel

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.