MCP3008 SPI Programmcode in C Library BCM2835.h

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hi,

    ich besitze nun schon seit längerer Zeit ein RPI und bin im Moment dabei den AD-Wandler MCP3008 in C anzusteuern und auszulesen.
    Ich habe die Library BCM2835.h installiert und auch erfolgreich schon die examples von http://www.open.com.au/mikem/bcm2835/ zum laufen gebracht.

    Jetzt hänge ich jedoch daran den gängigen Code von Adafruit http://learn.adafruit.com/reading-a-anal…essary-packages , welcher im Python Code geschrieben ist, auf C anzupassen.
    Ich begreife noch nicht zu 100% wie ich den AD-Wandler auslesen kann.

    Kann mir irgendjemand dafür einen Tipp, Denkanstoß, Programmbeispiel oder irgendwas was mir weiterhilft dafür geben?

    Ich wäre extremst dankbar.


    mfg

  • Der Trick bei SPI ist, daß es ein Duplex-Bus ist. Du schreibst und liest immer gleichzeitig.
    Das heißt aber auch, daß Du nur lesen kannst wenn Du auch schreibst, auch wenn Du nur Unsinn schreibst, schreiben mußt Du.
    Ich kenne den MCP3008 jetzt nicht, ich hab immer mit dem MAX1247 gearbeitet aber ich kann mir das Datenblatt mal anssehen.
    Ich spiele grad mit MCP23S17, t6963 Displays und LCDProc und muß sagen, teilweise ist der SPI auf dem PI ähh, gewöhnungsbedürftig.

  • Du sendest und empfängst mit der 'bcm2835_spi_transfer'-Routine, bzw mit 'bcm2835_spi_transfern' oder 'bcm2835_spi_transfernb'.
    Vorher schaltest Du mit 'bcm2835_spi_begin' die Pins auf SPI und setzt mit 'bcm2835_spi_setBitOrder', 'bcm2835_spi_setChipSelectPolarity', 'bcm2835_spi_setClockDivider' und 'bcm2835_spi_setDataMode' die Bit-Reihenfolge (msb/lsb first), CS high oder low und die Geschwindigkeit.

  • Wäre ich nicht so voreilig und hätte den Zusatz wieder gelöscht,hätte ich es hier präsentiert.
    Habe bereits mit Gordon (Von WiringPi) Kontakt aufgenommen, er hat mir dazu noch was geschrieben, wenn es funktioniert gebe ich Bescheid

  • Hallo Theo,
    dann musst du mal die Datenblätter vergleichen.

    Prinzipell musst du als erstes immer Register setzen, damit der AD Wandler das macht was du willst. Single shot oder Continus usw. Dann gibt es in der Regel ins besonderen bei schnellen AD eine Art wie dieser signalisiert, dass die / der Wert(e) fertig sind.

    Wenn du die reine Kommunikation via SPI am laufen hast ist das ja schon mal die halbe Miete. Du musst dann halt nur entsprechend des Datenblattes dein Init usw. anpassen.

    Was willst du damit überhaupt machen? 10 bit 200kps ist schnell aber nicht sehr genau.

    Gruß

    Jörg

    • Offizieller Beitrag

    Ich will dir ja nicht die Hoffnung nehmen (kleiner Leichenschänder ;) ) aber der User war zuletzt am 03.01. online.

    Ich denke du fährst besser wenn du einen neuen thread eröffnest und dein Problem inkl. Fehlermeldungen beschreibst.

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

    Einmal editiert, zuletzt von dbv (1. August 2013 um 23:27)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!