Forum: Mikrocontroller und Digitale Elektronik SPI-Verfahren


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von richard (Gast)


Lesenswert?

Ich habe zwei ad-wandler(slaves) der mit einem master kommuniziert. 
Allerdings werden bei einem die Bits nicht richtig übertragen obwohl 
gleich programmiert und angeschlossen. Am chip select liegt 3,3v an

von M. K. (sylaina)


Lesenswert?

Schaltplan und Code wären sicher hilfreich ;)

von Peter D. (peda)


Lesenswert?

Wenn die SPI-Lib eine Black-Box ist, kann man das SPI auch zu Fuß 
programmieren mit Bit setzen, Bit löschen Befehlen. Dann kann man es 
exakt so ablaufen lassen, wie es im Timingdiagramm im Datenblatt 
abgebildet ist. Eventuell muß man die Delayfunktion benutzen, damit die 
Signale nicht zu schnell sind.

Geht es immer noch um den MCP3008?

von EAF (Gast)


Lesenswert?

richard schrieb:
> Am chip select liegt 3,3v an

An welchem?

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Lesenswert?

M. K. schrieb:
> Schaltplan und Code wären sicher hilfreich ;)
Bekannt aus Funk und Fernsehen und dem 
Beitrag "AD Wandler misst falsch" sowie dem 
Beitrag "Raspberry - AD-Wandler"

: Bearbeitet durch Moderator
von Johannes M. (johannesm)


Lesenswert?

Chip select ist üblicherweise Low Aktiv, d.h. damit der Chip ausgewählt 
ist, sollte 0V (bzw. ein Low level Pegel entsprechend dem Datenblatt) an 
dem Pin anliegen.

: Bearbeitet durch User
von Cyblord -. (cyblord)


Lesenswert?

richard schrieb:
> Ich habe zwei ad-wandler(slaves) der mit einem master kommuniziert.
> Allerdings werden bei einem die Bits nicht richtig übertragen obwohl
> gleich programmiert und angeschlossen. Am chip select liegt 3,3v an

Mit Logic Analyzer prüfen was auf dem  SPI wirklich passiert.

von richard (Gast)


Lesenswert?

1
class MCP3008:
2
    def __init__(self, bus = 0, device = 0):
3
        self.bus, self.device = bus, device
4
        self.spi = SpiDev()
5
        self.open()
6
        self.spi.max_speed_hz = 1000000 # 1MHz
7
 
8
    def open(self):
9
        self.spi.open(self.bus, self.device)
10
        self.spi.max_speed_hz = 1000000 # 1MHz
11
    
12
    def read(self, channel = 0):
13
        cmd1 = 4 | 2 | (( channel & 4) >> 2)
14
        cmd2 = (channel & 3) << 6
15
 
16
        adc = self.spi.xfer2([cmd1, cmd2, 0])
17
        data = ((adc[1] & 15) << 8) + adc[2]
18
        return data
19
            
20
    def close(self):
21
        self.spi.close()

an beiden CS ist 3,3v

von PittyJ (Gast)


Lesenswert?

Chipselect macht man immer selber, weil die SPI-Bibliothek nicht weiss, 
welchen GPIO man nimmt.

Wo wird in dem Code der Chip-Select geschaltet? Das finde ich nicht.

von Endstop (Gast)


Lesenswert?

richard schrieb:
> an beiden CS ist 3,3v

Wie Johannes M. schon gesagt hat: bei dem IC mit dem du kommunizieren 
willst muss CS auf 0V gezogen werden, bei allen anderen auf 3.3V damit 
sie diese Kommunikation nicht stören.

von Wolfgang (Gast)


Lesenswert?

richard schrieb:
> Ich habe zwei ad-wandler(slaves)

Vielleicht hängst du dich an den bereits laufenden Thread mit dran.
Da geht es um genau das gleiche Problem.
Beitrag "Raspberry - AD-Wandler"

richard schrieb:
> an beiden CS ist 3,3v

Damit wirst du den Wandler nicht ansprechen können. Der erwartet 0V, 
weil der Eingang invertierend arbeitet.
Mit welcher Spannung betreibst du den MCP3008?
Verwendest du den für den MCP3008 passenden SPI-Mode?

von richard (Gast)


Lesenswert?

das finde ich selber nicht habe es nicht geschrieben

von Wolfgang (Gast)


Lesenswert?

richard schrieb:
> das finde ich selber nicht habe es nicht geschrieben

Dann nimm einen Logikanalysator und gucke, was auf dem Bus los ist - 
erst mit jeweils nur einem der beiden ADCs angeschlossen und dann mit 
beiden.

von richard (Gast)


Lesenswert?

https://tutorials-raspberrypi.de/raspberry-pi-mcp3008-analoge-signale-auslesen/ 
würde gerne einen anderen GPIO verwenden momentan ist es der GPIO8 und 
möchte mal den darüber probiern (GPIO25) aber wo sage ich dem Programm 
das den ? finde nichts dazu auch in dieser spidev nicht

von Rolf M. (rmagnus)


Lesenswert?

Lothar M. schrieb:
> M. K. schrieb:
>> Schaltplan und Code wären sicher hilfreich ;)
> Bekannt aus Funk und Fernsehen und dem
> Beitrag "AD Wandler misst falsch" sowie dem
> Beitrag "Raspberry - AD-Wandler"

Ja, jedes mal das gleiche Problem, aber immer unzureichend beschrieben, 
jedes mal heißt er anders, jedes mal ignoriert er die Antworten. Also 
ganz offensichtlich ein Troll.

von Peter D. (peda)


Lesenswert?

richard schrieb:
> würde gerne einen anderen GPIO verwenden

Ja, die Doku ist extrem mager.
Schau mal in die Kommentare:
"wenn du CS1 statt CS0 verwendest, musst du device auf 1 ändern."

von Sebastian M. (basti_481803)


Lesenswert?

> Ja, die Doku ist extrem mager.
> Schau mal in die Kommentare:
> "wenn du CS1 statt CS0 verwendest, musst du device auf 1 ändern."

meine nicht den Slave sondern mein Cs0 hängt an Gpio8 und womöglich ist 
der ja kaputt. Der drübere Gpio25 würd ich verwenden. aber iwo im 
Programm muss ich ja dann das hinterlegen, also iwo eine 8 zu 25 machen

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Sebastian M. schrieb:
> und womöglich ist der ja kaputt.
Das kann man Messen. Gibt einfach mal eine Dauer-'0' an diesem Pin aus. 
Und dann eine Dauer-'1'. Und miss, ob das Ding reagiert.

Und nicht vergessen: nur 1 Benutzername pro Thread!
Siehe die simplen Nutzungsbedingungen

von Stefan ⛄ F. (stefanus)


Lesenswert?

Schon wieder ein neuer Thread zum selben Thema. Wozu soll das gut sein?

Also ich habe die Nase voll, ich finde das Verhalten des TO Respektlos 
(nicht nur wegen dem 3. Thread).

von PittyJ (Gast)


Lesenswert?

Ich habe das Gefühl, da macht jemand nur copy & paste und wundert sich 
dann, dass nichts geht.
Eigentlich sollte davor ein paar Basics kommen:
Was ist ein GPIO, wie programmiere ich den.
Was ist ein SPI-Bus, und wie funktioniert der.
Und davor noch: was ist eine Programmiersprache, und wie erstelle ich 
selber Code.

Programmieren ist mehr als copy & paste.

von Dieter D. (Firma: Hobbytheoretiker) (dieter_1234)


Lesenswert?

Erstmal verlinke ich hier noch mal auf die nun geschlossenen Threads. 
Dort sind einige Bilder zu sehen.

Hier wäre kurz nach dem Beginn die Schemaschaltung aufgeführt:
Beitrag "AD Wandler misst falsch"

Hier sind einige Bilder vom Aufbau, die nicht ausgelassen werden 
sollten:
Beitrag "Raspberry - AD-Wandler"

Hauptsächliche Fehler wären zum Beispiel fehlende Kondensatoren zur 
Glättung, bzw. Störungsminimierung.

Zu erwähnen wäre noch der Kabelwulst auf den Bildern. Es ist sehr 
wahrscheinlich, dass Du noch EMV-Problem in dem Aufbau hast. Auf den 
GPIO-Leitungen befinden sich viele kleine Klicks, die stören können. Es 
gibt zum Beispiel sogar für die kleinen µC Anleitungen, dass bestimmte 
Befehle und Routinen deshalb parallel unterlassen werden sollen, weil 
dessen eigenen internen Klicks beim Messen stören.

In so eine Problematik scheinst Du voll hineingerasselt zu sein.

von Rainer V. (a_zip)


Lesenswert?

Stefan ⛄ F. schrieb:
> Schon wieder ein neuer Thread zum selben Thema. Wozu soll das gut sein?

Ja, finde ich auch! Hat offensichtlich keinen Zweck...
Rainer

von guest (Gast)


Lesenswert?

Sebastian M. schrieb:
> meine nicht den Slave sondern mein Cs0 hängt an Gpio8 und womöglich ist
> der ja kaputt. Der drübere Gpio25 würd ich verwenden. aber iwo im
> Programm muss ich ja dann das hinterlegen, also iwo eine 8 zu 25 machen

Das ist keine Konfiguration, die im Programm gemacht wird! Zumindest 
nicht beim RasPi, da ist der Kernel-Treiber für sowas zuständig.
Wie man das konfiguriert darfst Du selber nachlesen:
https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#spi-software

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

Sebastian M. schrieb:
[......[

Jetzt ist ENDLICH klar wer sich hinter den drei Gastnamen und 
unnötigen Threads versteckt.

von kw (Gast)


Lesenswert?

Lothar M. schrieb:
> M. K. schrieb:
>> Schaltplan und Code wären sicher hilfreich ;)
> Bekannt aus Funk und Fernsehen und dem
> Beitrag "AD Wandler misst falsch" sowie dem
> Beitrag "Raspberry - AD-Wandler"

Man nennt das auch Multithreading...

von DrDr (Gast)


Lesenswert?

kw schrieb:
> Man nennt das auch Multithreading...

Nee, eher multiple Persönlichkeit

von Dieter (Gast)


Lesenswert?

DrDr schrieb:
> Nee, eher multiple Persönlichkeit

Nee, eher Alzheimer. Nicht mehr wissen in welchem Forum man mit welchem 
Namen war und ist.

von Wendels B. (wendelsberg)


Lesenswert?

Magnus M. schrieb:
> Jetzt ist ENDLICH klar wer sich hinter den drei Gastnamen und unnötigen
> Threads versteckt.

Es würde mich nicht wundern, wenn er auch noch der "Forenfreund" wäre.

von richard (Gast)


Lesenswert?

> 
https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#spi-software

danke aber finde es nicht genau in welchem Programm das abzuändern ist

von Erich (Gast)


Lesenswert?


Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.