in CSV datei schreiben

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Topi
User
Beiträge: 2
Registriert: Freitag 7. November 2014, 09:26

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()
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

@Topi: wie werden denn die acht 12bit-Werte gesendet? Sind 3 Byte jeweils zwei 12bit-Werte? Warum liest Du dann 96 Bytes?
Benutzeravatar
snafu
User
Beiträge: 6908
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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.
Topi
User
Beiträge: 2
Registriert: Freitag 7. November 2014, 09:26

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?
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
Antworten