Seite 1 von 1

in CSV datei schreiben

Verfasst: Freitag 7. November 2014, 09:43
von Topi
Hallo Zusammen,
Ich habe folgendes Problem: Ich möchte mit einem raspberry pi über spi daten von einem ADC auslesen. Die Daten werden bereits in eine csv datei geschrieben. Es handelt sich dabei um 96 bits, die jedoch aus 8*12bit bestehen. Zurzeit speichert er jedes Bit hintereinander in die CSV datei, ich hätte aber gerne, dass er Blöcke von 12 bit, bzw schon umgewandelt in dezimalzahlen, die man dann vor dem schreiben bearbeitet (umwandlung in dezimalzahl um dann mit rechenoperationen die genauen Wert in V zu erhalten(Fließkommazahl)
Hier der Code:

Code: Alles auswählen

import time
import spidev

spi.open(0,1)
spi.xfer2([0x84,0x94,0xA4,0xB4,0xC4,0xD4,0xE4,0xF4])     #senden von Bytes zum SPI device
f = open ('ADC.csv', 'a')
f.write (str(spi.readbytes(96))+'n\')                               #Lesen und schreiben der empfangenen Daten
f.close()

Re: in CSV datei schreiben

Verfasst: Freitag 7. November 2014, 10:44
von Sirius3
@Topi: wie werden denn die acht 12bit-Werte gesendet? Sind 3 Byte jeweils zwei 12bit-Werte? Warum liest Du dann 96 Bytes?

Re: in CSV datei schreiben

Verfasst: Freitag 7. November 2014, 12:30
von snafu
Topi hat geschrieben:Hier der Code:

Code: Alles auswählen

import time
import spidev

spi.open(0,1)
spi.xfer2([0x84,0x94,0xA4,0xB4,0xC4,0xD4,0xE4,0xF4])     #senden von Bytes zum SPI device
f = open ('ADC.csv', 'a')
f.write (str(spi.readbytes(96))+'n\')                               #Lesen und schreiben der empfangenen Daten
f.close()
Minimalbeispiele sind gut, aber dann sollten sie auch lauffähig sein. Hier importierst du ein Modul namens ``spidev``, verwendest dann aber den Namen ``spi``. In Python sind nach Modulimporten nicht auf magische Weise weitere Namen verfügbar. Es sollte an der Stelle also entweder ``spidev.open()`` oder ``import spi`` oder möglicherweise auch ``spidev.spi.open()`` heißen - je nachdem, was das Modul einem anbietet. So wie du es gezeigt hast, funktioniert es jedenfalls nicht. Außerdem muss es beim Schreiben der Daten nicht ``+ 'n\'`` heißen, sondern ``+ '\n'``. Auch das würde mit einem Fehler abbrechen - und zwar schon bevor überhaupt nur eine Programmzeile ausgeführt wurde. Also: Bitte demnächst mal den Code vor dem Posten testen. Und wenn es Pseudocode ist, dann solltest du dies IMHO auch so kennzeichnen, damit die Intention klar wird.

Re: in CSV datei schreiben

Verfasst: Freitag 7. November 2014, 13:59
von Topi

Code: Alles auswählen

    import time
    import spidev
     
spi = spidev.SpiDev()

    spi.open(0,1)
    spi.xfer2([0x84])     #senden von Bytes zum SPI device
    s = spi.readbytes(2)
    t = ("%s%s" % (s[0], s[1]))
    u = (int(t[0:11]))/4096*5
    f = open ('ADC.csv', 'a')
    f.write ('u')                               #Lesen und schreiben der empfangenen Daten
    f.close()
So, habe das fehlende ergänzt. Ich sende jetzt auch nur 1 Byte für einen Kanal des ADC. S sind dann die 2 bytes die vom ADC zurück geschickt werden. Dabei sind von den 2 bytes, die ersten 12 bits, die bits die gesucht werden. Kann man das so machen?

Re: in CSV datei schreiben

Verfasst: Freitag 7. November 2014, 14:44
von Sirius3
@Topi: ob man das so machen kann, mußt Du doch selbst am einfachsten beantworten können, wenn Du es einfach mal ausprobierst.
Das Problem ist ja unabhänig davon, woher die Daten kommen. Mach doch ein Beispiel ohne dieses ganze spi-Zeugs, sondern mit Beispieldaten, was Du liest, was Du schreiben willst, was Du im Moment bekommst, wo es Fehler gibt, usw... dann kann es jeder hier auch ausprobieren.