Ist
die Schaltung aufgebaut, ist es nun möglichdie einzelne
Ausgänge zu schalten, der Eingang DIO5 ist vorerst
uninteressant, da der MCP3002 erst eine korrekte Kommunikation braucht
ehe er antwortet. Es macht natürlich keinen Sinn DIO0 bis DIO2 mit
Programm-Schaltern zu versehen und diese manuell zuschalten. Allerdings
reicht dies aus, um zu prüfen ob alles richtig aufgebaut wurde.
CS wird nur bei Kommunikationsbeginn von High auf Low geschaltet, die
CLK liefert die Taktfrequenz und muss abwechselnd von High auf Low
geschaltet werden. Abschließend muss Din am Anfang der
Kommunikation speziell eingestellt werden, hier gebe ich High, High,
Low, High vor! (Das bedeutet: Start, Single Channel, Kanal 0,
höherwertiges Bit zuerst)
Also ist klar während einer kompletten Kommunikation muss CS
2mal auf High, CLK 16 mal auf Low und 16 mal auf High, Din 3mal
auf High und einmal auf Low geschaltet werden. Um es einfach zu halten,
erstellt man ein Array Typ Bool mit
einer Indexgröße von 38, da CLK 38 mal geschaltet werden
muss, ebenso müssen die Signale für die CS und Din
über diese Größe definiert sein.
Dies
entspricht nun dem CLK Signal aus der FIGURE 5-1 auf Seite 14 vom
Datenblatt MCP3002, folglich ergibt sich daraus für Din :
Worauf
geachtet werden muss ist das die Pegel von Din oder CS über eine
Periode von CLK dauern müssen, damit der MCP3002 die Signale
versteht, für CS :
Da
es konfortabler ist einfach die Ausgänge direkt parallel zu setzen nutz
man am besten den Mod7/DIO3:0 FPGA I/O Node.
Nun
muss man noch die Binären Daten in Integerzahlen umwandeln.
DIO0 steht für 1, DIO1 steht für 2 und DIO2 steht für 4.
Der
Rest sollte sich von selbst erklären. In der Sequenz wird CS auf
High gesetzt, um dem MCP3002 zum erstenmal den Startvorgang zu
signalisieren. Über Count (Ticks) stellt man die f_CLK ein und
für einen Tick benötigt die cRio 25ns. f_CLK soll ca. 3,2 MHz
sein, der Kehrwert der Frequenz ergibt den Zeit Wert 312,5ns. Eine
Periode soll also 312,5 ns sein. Da man diesen Wert allerdings
nicht mit 25 ns erreicht nimmt man den nächst gelegen (z.B.
300ns). Rechnerisch muss man hier noch beachten, dass das Programm so
aufgebaut ist das der CLK Ausgang erst Low dann High geschaltet wird,
eine Periode hier aber aus Low und High besteht, somit ergibt sich
für Count (Ticks) der Wert 150 (ns).
Wenn
man das Programm soweit aufgebaut hat und DIO5 per Anzeige überwacht,
müsste man schon erste Ergebnisse beobachten können. Die
Verarbeitung des Signals ergibt sich wieder aus dem Diagramm FIGURE
5-1. Das IC antwortet sofort nachdem Din übergeben wurde mit einem
Null Bit, dann mit Bit 9, B8... B1 und B0. Klar ist hier (von
links nach rechts) B0 hat den Wert 1, B1 entspricht 2, B3 der 4,....,B8
dem Wert 256 und B9 ist gleich 512. Da der MCP3002 ein 10 Bit Wandler
ist steht dem Anwender eine Auflösung von
5V/1024=0,0048828125 V = 4,88mV zur Verfügung.
Die
Logik ist recht simpel, auch wenn der Programmausschnitt auf den ersten
Blick verwirrend aussieht. Den Bits 9 bis 0 von Dout sind die Zahlen aus
"Array" zugeordnet. Dies geschieht über CLK. Wenn die Logik die
untere Case-Struktur frei gibt geschieht die Zuweisung Bit9 bis Bit0
zu Zahlenwert 512 bis 1, dabei werden die Bits mit ihrem Faktor
multipliziert und anschließend addiert. Wird Din auf High
gesetzt, fängt das Programm erneut bei Bit9 (eigentlich beim NullBit)
an zu zählen. Die Auswertung von CS erneuert das "result" in der obersten
Case-Struktur, damit keine überflüssigen Ergebnisse weiter
gereicht werden. Was man nicht vergessen darf ist , dass der MCP3002
vor Bit9 ein Nullbit schickt, somit wartet man auf 11 Bits, wobei das
erste immer Low Pegel hat. Das Messergebniss muss natürlich noch
umgerechnet werden. (5V/1024)*Messwert = Spannungswert.
Sollte die Kommunikation nicht auf Anhieb klappen, die f_CLK
verändern, den Kanalwechseln über Din (CH0/ CH1), Signalpegel und
Anschlüsse
überprüfen, die Pegel CLK verschieben oder die Pegel von Din
out verändern. Hilfreich bei der Fehlersuche ist ein Oszilloskop. Welches den Anschluss Dout überwacht.
Hier noch ein Vergleich zwischen dem MCP3002 und dem Modul NI 9205.
Der
MCP3002 bietet natürlich nur 10 Bit. Daher auch der
Treppen-Signalverlauf, gegenüber dem Modul NI 9205 mit 16 Bit.
Durch die Verschaltung und Programmierung des MCP3002 + FPGA VI,
besteht leicht die Möglichkeit drei weitere MCP3002
anzuschließen, die die selben Steuersignale bekommen und einzeln
jeweils einen Dout haben. Somit kann man 4 Analoge Eingänge mit
einer Abtastrate von ca. 200 kHz oder durch Umschalten von Din 8 Analoge
Eingänge mit einer Abtastrate von ca.100 kHz erstellen.