ADS8344 funktioniert nur mit langsamen SPI

Gast #3972889
Lesenswert?
• ▲
▼
Hallo zusammen,

Ich versuche derzeit einen ADS8344 auszulesen. Dies funktioniert soweit 
eigentlich. Jedoch habe ich das Problem, dass es nur funktioniert wenn 
ich einen sehr langsamen SPI Takt verwende. Das heisst, mit 130kHz Takt 
funktioniert alles ohne Probleme. Sobald ich aber auf beispielsweise 
1MHz erhöhe, funktioniert es nicht mehr. Laut Datenblatt sollten bis zu 
2.3MHz möglich sein.

Funktioniert nicht mehr bedeutet, dass immer der Wert 0 ausgelesen wird.

Ich verwende folgenden Code:
1
uint16_t ads8344_read(void)
2
{
3
    uint8_t temp = 0;
4
    uint32_t result = 0;
5

6
    ADS8344_ENABLE = 0;
7

8
    spi3_read_send(ADS8344_CONFIG | 1 << ADS8344_STARTBIT ); //CONFIG = 0x04 Startbit = 7
9

10
    // MSB from ADC
11
    temp = spi3_read_send(0);
12
    result = temp << 9;
13

14
    // LSB from ADC
15
    temp = spi3_read_send(0);
16
    result |= temp << 1;
17

18
    // last bit from adc
19
    temp = spi3_read_send(0);
20
    result |= temp >> 7;
21

22
    ADS8344_ENABLE = 1;
23

24
    return result;
25
}

Übersehe ich irgendwo etwas im Datenblatt?

Grüsse
Gast #3972892
Lesenswert?
• ▲
▼
Fritz schrieb:
> Jedoch habe ich das Problem, dass es nur funktioniert wenn
> ich einen sehr langsamen SPI Takt verwende. Das heisst, mit 130kHz Takt
> funktioniert alles ohne Probleme.

Da geht bei mir als erstes die Signallampe: "auslesen mit der falschen 
Clockflanke?" an, als zweites: "Crosstalk zwischen Clock und Daten"

MfG Klaus
Gast #3972912
Lesenswert?
• ▲
▼
Der SPI Mode sollte soweit eigentlich stimmen. Das SPI Modul habe ich 
auf Mode 0 konfiguriert. Also CLK Idle Zustand ist low und Datenwechsel 
auf fallender Flanke.

Crosstalk habe ich soeben gemessen. Scheint nicht vorhanden zu sein. Ich 
habe ein Bild von der Übertragung der ersten 8 Bit angehängt.
Angehängte Dateien:
Gast #3972928
Lesenswert?
• ▲
▼
Okay ich hab es nun hinbekommen. Es läuft mit 2MHz. Die einzige Änderung 
die ich gemacht habe, ist ein Delay nach dem Senden des ersten Bytes 
eingefügt. Ich habe ein Minimum Delay von cirka 5.5us empirisch 
ermittelt.
Laut Datenblatt sollte dieses Delay jedoch nicht nötig sein.

Der Code mit dem Delay:
1
uint16_t ads8344_read(void)
2
{
3
    uint8_t temp = 0;
4
    uint32_t result = 0;
5

6
    ADS8344_ENABLE = 0;
7
    spi3_read_send(ADS8344_CONFIG | 1 << ADS8344_STARTBIT); //CONFIG = 0x04 Startbit = 7
8

9
    __delay32(400); //Delay 400 Cycles = 5.8us
10

11
    // MSB from ADC
12
    temp = spi3_read_send(0);
13
    result = temp << 9;
14

15
    // LSB from ADC
16
    temp = spi3_read_send(0);
17
    result |= temp << 1;
18

19
    // last bit from adc
20
    temp = spi3_read_send(0);
21
    result |= temp >> 7;
22

23
    ADS8344_ENABLE = 1;
24
    
25
    return result;
26
}
Gast #3972978
Lesenswert?
• ▲
▼
spess53 schrieb:
> Wie fragst du BUSY ab?
>
> MfG Spess

Ich dachte das müsste ich im external clock Mode nicht abfragen. Im 
Datenblatt steht folgendes:
1
"BUSY will go HIGH for one clock period after the last bit of the control byte is shifted in"
oder auch:
1
"Since one clock cycle of the serial clock is consumed with BUSY going HIGH"

Deshalb dachte ich ich müsste das Busy nichtabfragen und könnte direkt 
mit dem auslesen beginnen.
Liege ich da falsch?

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.