heise online
  • c't
  • iX
  • Technology Review
  • Mac & i
  • mobil
  • Security
  • Netze
  • Open Source
  • Developer
  • c't-TV
  • Download
  • Telepolis
  • Resale
  • Foto
  • Autos
  • Preisvergleich
  • Stellenmarkt
  • Abo
  • weitere Angebote
    • Shop
    • Artikel-Archiv
    • Veranstaltungen
    • Whitepapers
    • heise-marktplatz
    • IT-Markt
    • Tarifrechner
    • Jobs bei Heise

c't Magazin
  • Startseite
  • Artikel
  • c't-Projekte
  • Hotline & FAQ
  • Treiber & mehr
  • Kolumnen
Software zu Projekten Allgemeine Hinweise
Archiv-Suche Newsletter RSS-FeedRSS

c't › c't-Projekte

c't-Lab
  • Login
  • Help/Guide
  • About Trac
  • Preferences
  • Wiki
  • Timeline
  • Roadmap
  • Browse Source
  • View Tickets
  • Search

Context Navigation

  • Start Page
  • Index
  • History
  • Last Change

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.

Download in other formats:

  • Plain Text

Trac Powered

Powered by Trac 0.11.7
By Edgewall Software.

http://www.ctmagazin.de/
http://www.ctmagazin.de/projekte/

  • Datenschutzhinweis
  • Impressum
  • Kritik, Anregungen bitte an c't-WWW
  • Mediadaten
  • Copyright © 2011 Heise Zeitschriften Verlag
  • International: The H, The H Security, The H Open Source