SPI: Report-Problem

Dies ist das deutsche Forum für alle Themen um den IO-Warrior. Beiträge bitte nur in Deutsch.

Moderator: Guido Körber

Post Reply
ArGo
Posts: 7
Joined: Tue Oct 28, 2008 3:47 pm
Location: Schleusingen

SPI: Report-Problem

Post by ArGo »

Hallo, ich hab ein Problem mit dem Lesen von Daten über SPI. Meine Schaltung ist so aufgebaut: Ein IOW24 kommuniziert über SPI mit einem ATmega32. Bei der Kommunikation soll ein Messwert des ATmega32 (float --> 4Byte) byteweise über SPI übertragenwerden. Da abwechselnd zwei verschiedene Messwerte gelesen werden (Strom und Spannung), soll nicht mit Dummy Daten gelesen werden, sondern mit bestimmten Bytes. Ich habe versucht in C# den IOW24 dazu zubewegen mir die Daten auszugeben es funktioniert jedoch nicht, da sicher nur ein Verständisproblem vorliegt würde ich mich freuen, wenn mir jemand helfen kann.

Code: Select all

 private void mWertTimer1_Tick(object sender, EventArgs e)
{
  byte[] Report = new byte[8];

  Report[0] = 09;
  Report[1] = 02;
  Report[2] = 51;
  Report[3] = 52;
  Report[3] = 53;
  Report[3] = 54;
  
  IOWLib.IowKitWrite(iowhandle, 1, ref Report[0], 8);
  IOWLib.IowKitRead(iowhandle, 1, ref Report[0], 8);

  textBox1.Text = Convert.ToString(Report[2]) + Convert.ToString(Report[3]);
}
Mit dem AllinOne Tool habe ich einen String QRST$ entspricht 51h+52h+53h+54h auf den SPI geschrieben und die gewünschte Ausgabe er halten, also funktionieren tut der Aufbau nur mein Programm eben nicht.
Guido Körber
Site Admin
Posts: 2883
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: SPI: Report-Problem

Post by Guido Körber »

Prinzipiell sollte die o.g. Routine die Bytes 51 und 52 (dezimal) über den SPI ausgeben. Ist den die SPI Funktion aktiv?
ArGo
Posts: 7
Joined: Tue Oct 28, 2008 3:47 pm
Location: Schleusingen

Re: SPI: Report-Problem

Post by ArGo »

Hmm, ja sie ist aktiv. ich bekomme aber nur "51" und "52" ausgegeben, aber nicht die Daten die mit diesen Bytes gelesen werden sollten.

Aktiviert habe ich SPI so:

Code: Select all

private void Form1_Load(object sender, EventArgs e)
        {
            byte[] Report = new byte[8];

            iowhandle = IOWLib.IowKitOpenDevice();

            Report[0] = 0x08;
            Report[1] = 0x01; //Enable SPI
            Report[2] = 0x07; //Mode: CPOL=0, CPHA=1, Clock Speed=62.5 KBit
            IOWLib.IowKitWrite(iowhandle, 1, ref Report[0], 8);
        }
User avatar
Christoph Jung
Posts: 674
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: SPI: Report-Problem

Post by Christoph Jung »

Das nur "52" und "53" ausgegeben werden könnte daran liegen, dass diese in der Report-Variable drin sind. Wenn die Read-Funktion fehlschlägt stehen dort immernoch die Daten aus der Write-Funktion drin. Außerdem ist mir aufgefallen, dass Report[3] mit 52, 53 und 54 gesetzt wird.
Software developer
ArGo
Posts: 7
Joined: Tue Oct 28, 2008 3:47 pm
Location: Schleusingen

Re: SPI: Report-Problem

Post by ArGo »

Das ist durch copy und paste passiert und schon korrigiert. Ich bekomme als ausgabe "522510" und das bei einer eingabe von "51525354" und einer gewünschten Ausgabe "42425555".

Das komische ist das es mit dem AllinOne Tool funktioniert.
Guido Körber
Site Admin
Posts: 2883
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: SPI: Report-Problem

Post by Guido Körber »

Report[1] = 02 legt fest, dass zwei Bytes zu senden sind, also werden auch zwei gesendet.
User avatar
Christoph Jung
Posts: 674
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: SPI: Report-Problem

Post by Christoph Jung »

Es lässt sich ganz einfach prüfen, was über den USB geht. Einfach mal das Programm "SimpleHidWrite" starten und auf den IO-Warrior einstellen. Das Programm liest alle Lese- und Schreibaktionen mit und man kann schauen, was genau passiert. Das Programm wird mit unserem SDK mitgeliefert (im Download zu finden).
Software developer
friend-of-rq
Posts: 389
Joined: Sun Feb 13, 2005 1:22 pm
Location: Gerblingerode / Duderstadt
Contact:

Re: SPI: Report-Problem

Post by friend-of-rq »

Hallo ArGo,

verbinde doch einfach mal dem MOSI und MISO mit einander,

dann solltest du beim lesen die gleichen Daten wie die gesendeten bekommen.

Einfacher Test, so habe ich meine SPI-Funktion im All-In-One anfänglich getestet.
Post Reply