wiki:ErgBerUNIC

UNI-C Universeller Messwerterfassungs-Controller

browser:Bilder/UNIC-Bridge-Platinen.JPG

UNI-C ist eine All-in-One-Lösung, die praktisch IFP, ADA-IO, AD16-8, DA12-8 und ein kleines FPGA-Modul auf einer Platine vereint.

Firmware für den ATmega644-Controller sowie FPGA-Beispielkonfigurationen (zur Demo den Inhalt des Ordners sdcard auf SD-Karte kopieren) ab sofort verfügbar!

FPGA-Beispielkonfigurationen:

  • blink.bit lässt die LED auf der FPGA-Bridge aufblitzen. Gut zur grundsätzlichen Funktionskontrolle.
  • ports.bit verwandelt das FPGA in einen Portbaustein mit einstellbarer Datenrichtung für jedes Bit. SPI-Register 2 (SubCh 62) legt die Datenrichtung fest, SPI-Register 3 (SubCh 63) den Ausgangswert. Aktueller Port-Zustand kann auf SubCh 63 auch gelesen werden.
  • pwm.bit ist ein fortgeschrittenes Beispiel zur Kommunikation zwischen UNI-C und FPGA-Bridge. Spannung an Eingang ADC0 wird in ein PWM-Signal umgesetzt, das die LED auf der FPGA-Bridge steuert und als gleicher Spannungswert am DAC0 automatisch wieder ausgegeben wird. Die Wandlungsrate beträgt hier rund 1 kHz.
  • startup.ini wird beim Einschalten automatisch ausgeführt. Hier ein LabScript, das die pwm.bit-Konfiguration lädt, einige Register einstellt (etwa Helligkeit der LED) und sich dann beendet.

Ergänzungen und Berichtigungen

Im Schaltbild zur FPGA-Bridge ist der serielle Anschluss PL19 (3,3V-TTL-Pegel) nicht eingezeichnet. Der Schaltplan im Schematics-Ordner wurde entsprechend korrigiert. Der Anschluss weist die gleiche Pinbelegung wie der serielle Anschluss auf der Interface-Zusatzplatine auf. Verbindet man beide, ist bei entsprechender Konfiguration eine direkte Kommunikation mit dem FPGA möglich. Ich empfehle hier den kompakten FIFO-UART von Ken Chapman, Xilinx (im kostenlosen PicoBlaze-Paket enthalten).

Unser erster Firmware-Upload war versehentlich für eine Quarzfrequenz von 16 statt 20 MHz kompiliert worden. Die Version für 20 MHz haben wir jetzt nachgeschoben. Die ZIPs lassen sich durch den Suffix _16 und _20 auseinanderhalten - es handelt sich hierbei nicht um eine Versionsnummer! Achtung: Erste Kompilate der 20-MHz-Version wiesen durch zu starke Optimierung einen Fehler im Parser auf. Dieser Fehler ist mit Datum 05.03.2012 behoben.

browser:Bilder/unic-platinenfehler.jpg

Durch ein dummes Missgeschick des Layouters (ähem, das war ich!) fehlen auf der UNI-C-Hauptplatine zwei Leiterbahnen zur Stromversorgung der Optokoppler. Eine Korrektur durch zwei Drahtbrücken ist sehr leicht anhand des Fotos möglich. Der Fehler wirkt sich nur bei Verwendung der RS-232-Buchse aus.

Bitte verwenden Sie keine SDHC- oder SDXC-Karten (meist bei Kapazitäten > 2GByte). Es funktionieren alle einfachen SD-, MMC- und Micro-SD-Karten (mit Adapter) bis 2 GByte.

SubChannel-Belegung

Die SubChannel-Belegung orientiert sich an den SubChannels des ADA-IO- und des FPGA-Moduls. Ausnahmen sind hier die FPGA-Register 0 bis 19 auf SubCh 60 bis 79, die Skalierungen/Offsets? ab SubCh 100 und der Frequenzzähler-Eingang auf SubCh 8 (Eingang T1, Port PB1). Er wird über Subch 9 konfiguriert (Modus, Frequenzbereich). Im Unterschied zur Darstellung im Artikel erzeugt der Controller kein PWM-Signal. Dies erledigt ggf. die FPGA-Bridge viel eleganter. Neu ist die bequeme Baudraten-Einstellung direkt über SBD=<baudrate> (getestet bis 57600). Bitte beachten Sie unbedingt die eigene Syntax-Tabelle des UNI-C-Moduls!

FPGA-Register

Die Freigabe-Flags des SPI-Registers 0 in der FPGA-Bridge wurden um acht Write-Enable-Flags erweitert. Der Controller schreibt nun die acht ADC-Werte ADC0 bis ADC7 nur dann in die FPGA-Register 8 bis 15, wenn das zugehörige Bit 0 bis 7 der Write-Enable-Flags gesetzt ist. Dies beschleunigt die Befehlsabarbeitung, wenn die ADC-Werte im FPGA gar nicht (alle) gebraucht werden.

Findet der Controller nach Laden einer FPGA-Konfiguration nicht das "Magic Word" $AA55 in der oberen Hälfte des SPI-Registers 0, wird keines der Register automatisch befüllt oder ausgelesen. Die SPI-Register im FPGA bleiben, so vorhanden, selbstverständlich über die SubChannels 60 bis 79 zugänglich.

Die Darstellung im c't-Sonderheft-Artikel bezüglich der eingeschriebenen und ausgelesenen ADC- und DAC-Werte ist nicht ganz korrekt: Der Controller erwartet für die vier DAC-Kanäle 0 bis 3 keine Raw-, sondern "Festkomma"-Werte im Bereich -10000 ($D8F0, -10V) bis +10000 ($2710, +10V), d.h. der Messwert ist mit 1000 multipliziert abzuliefern. Die Polaritätsumschaltung und die Default/Kanal?-Offsets und -Skalierungen werden auch bei den aus dem FPGA gelesenen Werten berücksichtigt!

Gleiches gilt für die ADC-Werte 0 bis 7, die dem FPGA in den SPI-Registern 8 bis 15 übergeben werden. Hier reicht der Wertebereich mit der Default-Skalierung von 0 ($0000, 0V) bis +10000 ($2710, +10V). Negative Werte sind bei gesetztem Jumper und entsprechender Skalierung möglich.


Hier die vollständige Tabelle der SPI-Register:

Vom FPGA gelieferte Registerinhalte
SPI-Register/Langwort?MSB LSBBeispielBemerkungen
0 - Flags$AA$55WRenaRDena$AA550330SubCh 60, vom FPGA vorgegeben
1 - DatumTagMonatJahrJahr$09112011SubCh 61, vom FPGA vorgegeben
2 - RelaisREL3REL2REL1REL0$00000204SubCh 62, vom FPGA vorzugeben, falls RDena-Bits gesetzt
3 - PortsInp3Inp2Inp1Inp0$0000FFFFSubCh 63, frei verwendbar
4 - DAC0xxxxMSBLSB$00000204SubCh 64 ff., vom FPGA vorzugeben, falls RDena-Bit 4 gesetzt
5 - DAC1xxxxMSBLSB$00000204vom FPGA vorzugeben, falls RDena-Bit 5 gesetzt
6 - DAC2xxxxMSBLSB$00000204vom FPGA vorzugeben, falls RDena-Bit 6 gesetzt
7 - DAC3xxxxMSBLSB$00000204vom FPGA vorzugeben, falls RDena-Bit 7 gesetzt
Vom Controller beschriebene Register
SPI-Register/Integer?MSB LSBBeispielBemerkungen
8 - ADC0xxxxMSBLSB$00002376SubCh 68 ff., vom Controller geliefert, falls WRena-Bit 0 gesetzt
9 - ADC1xxxxMSBLSB$00000000vom Controller geliefert, falls WRena-Bit 1 gesetzt
10 - ADC2xxxxMSBLSB$0000FF24vom Controller geliefert, falls WRena-Bit 2 gesetzt
11 - ADC3xxxxMSBLSB$00000000vom Controller geliefert, falls WRena-Bit 3 gesetzt
12 - ADC4xxxxMSBLSB$00000000vom Controller geliefert, falls WRena-Bit 4 gesetzt
13 - ADC5xxxxMSBLSB$00000000vom Controller geliefert, falls WRena-Bit 5 gesetzt
14 - ADC6xxxxMSBLSB$00000000vom Controller geliefert, falls WRena-Bit 6 gesetzt
15 - ADC7xxxxMSBLSB$00000000vom Controller geliefert, falls WRena-Bit 7 gesetzt

RDena Read EnablesBit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0
Enable-FlagDAC3DAC2DAC1DAC0REL3REL2REL1REL0
WRena Write EnablesBit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0
Enable-FlagADC7ADC6ADC5ADC4ADC3ADC2ADC1ADC0

Die SPI-Register 16 bis 19 (über SubCh 76 bis 79 erreichbar) werden nicht verwendet und können frei benutzt werden. Gleiches gilt für diejenigen Register, deren Enable-Flagbit auf "0" gesetzt ist.

Last modified 5 years ago Last modified on Mar 5, 2012, 6:10:15 PM