Liebe Mikrocontroller.net Community, nun starte ich meinen ersten Betrag bzw. möchte zwei Fragen an euch richten. Ich befinde mich zur Zeit in meiner Diplomarbeit und suche einen Stromsparenden µC, welcher mit insgesamt 3 Sensoren und einem Bluetooth Modul über I²C kommunizieren soll. Im Idealfall möchte ich den µC über einen oder mehrere GOLD-CAP's versorgen. Voraussetzungen wären also : -I²C -geringer Stromverbrauch -Anschluss an einen externen NAND-Speicher -Linux als OS zur Enwicklung Nun bin ich auf den MSP430 gestoßen. Alle Details zu diesem hören sich schonmal gut an. Meine erste Frage : Gibt es einen vergleichbaren AVR µC? Grund dafür, ich besitze einen JTAG ICE mkII. Es ist nicht zwingend notwendig diesen zu verwenden. Das heißt, ich könnte mir den JTAG für den MSP430 bestellen. Dadurch entsteht die zweite Frage: Ist das Debuggen mit dem AVR JTAG besser,einfacher,komfortabler als mit dem MSP430 JTAG? Preislich gesehen liegt zwischen beiden ja ein gewaltiger Unterschied. Dazu muss ich sagen, dass ich bisher keine praktische Erfahrung mit der Programmierung von µC habe. Über eure Erfahrungen und Empfehlungen würde ich mich riesig freuen.
@ Stefan Neuser (Firma: Student) (stefant60) >Meine erste Frage : Gibt es einen vergleichbaren AVR µC? Alle aktuellen AVRs sind damit vergleichbar. Über Details, wie man das letzte µA sparen kann, kann man immer streiten. >Dadurch entsteht die zweite Frage: Ist das Debuggen mit dem AVR JTAG >besser,einfacher,komfortabler als mit dem MSP430 JTAG? Keine Ahnung. Hab ich bei beiden bisher nicht benutzt. >Dazu muss ich sagen, dass ich bisher keine praktische Erfahrung mit der >Programmierung von µC habe. Dann nimm den AVR mit vorhandenem JTAG-Adapter. Denn die Grenzen des ultimativen Stromsparens wirst du sowieso nicht ausreizen. Siehe auch Ultra low power und Versorgung aus einer Zelle. MFG Falk
Stefan Neuser schrieb: > Voraussetzungen wären also : > -I²C > -geringer Stromverbrauch > -Anschluss an einen externen NAND-Speicher > -Linux als OS zur Enwicklung > > Nun bin ich auf den MSP430 gestoßen. Alle Details zu diesem hören sich > schonmal gut an. > > Meine erste Frage : Gibt es einen vergleichbaren AVR µC? Genausowenig wie ein EINEN MSP430 gibt, gibt es einen AVR. Die MSP430-Serie geht von den kleinen 14-Pinnern mit 1-2k Flash bis zu 100 Pinnern mit 144k linear(!) adressierbarem Flash, und bei den AVRs ist das ebenso. > Dadurch entsteht die zweite Frage: Ist das Debuggen mit dem AVR JTAG > besser,einfacher,komfortabler als mit dem MSP430 JTAG? Preislich gesehen > liegt zwischen beiden ja ein gewaltiger Unterschied. Antwort: nein. Der MSP430 ist eigentlich etwas angenehmer, weil - keine Fuses (ok, es gibt eine, aber von der solltest Du die Finger lassen, die deaktiviert nämlich den ganzen JTAG-Teil FÜR IMMER, und die wird tatsächlich richtig durchgebrannt) - keine getrennten Adressräume für Code und Daten - 16 (MSP430) oder 24 Bit (MSP430X) Register - Viele Prozessoren unterstützen auch eine Zweidrahtversion des JTAG Spy-by-Wire genannt. Praktisch, wenn Pins knapp sind. Worauf Du achten solltest: - Nicht alle MSP430 haben einen Hardware-Multiplizierer - Nicht alle MSP430 haben einen UART. Da gibt es auch noch Abstufungen (USI, USCI, USART). Einen UART brauchst Du auch für i2c, wenn Du das nicht rein per Software machen willst. - DMA ist etwas, was die normalen AVRs gar nicht haben (erst die XMegas). Da kann der Prozessor pausieren und die Bytes fließen automatisch in den Speicher. - Wenn Du richtig Strom sparen willst: die 4'er Serie hat integrierte LCD-Controller für segmentierte LCD-Gläser (7- oder 14 Segment). Das ist deutlich sparsamer als die üblichen Textmodus-Displays, die zudem 5V brauchen. Zweitbeste Lösung sind die EA DOG/COG Displays; die laufen auch mit 3.3V. Du musst halt wissen, was Du davon wirklich brauchst. fchk
-I²C Ja, nennt Atmel aber TWI. -geringer Stromverbrauch Auslegbar, Rest siehe Falks Links. -Anschluss an einen externen NAND-Speicher Nie gemacht, -> Forensuche. -Linux als OS zur Enwicklung Ja, direkt über Editor + Makefile oder Eclipse.
@Frank K. (fchk) >Du musst halt wissen, was Du davon wirklich brauchst. Tja, doch wer weiß das schon? Heute muss doch jeder Toaster nen 32Bit ARM, 20 blaue LEDs und nen MP3 Player haben . . . :-0
Erstmal ein riesen Lob an die Community, einfach Spitze wie hier kommuniziert wird! Wie viele PINS sollte der µC haben wenn ich 3 Sensoren sowie ein Bluetooth Modul betreiben möchte? Da I²C ein Bussystem ist, kann ich alle Sensoren, sofern diese I²C sprechen, parallel am Bus betreiben. Falk Brunner schrieb: > Alle aktuellen AVRs sind damit vergleichbar. Über Details, wie man das > letzte µA sparen kann, kann man immer streiten. Welchen XMEGA bzw. MSP430 würdet Ihr mir empfehlen? Ist der JTAG von Olimex ausreichend oder weißt dieser wesentlich Nachteile zum TI JTAG auf? Hat der Parallelport JTAG bis auf die Spannungsversorgung gravierende Nachteile zur USB Version? Vielen herzlichen Dank für den hohen Informationsgehalt.
Stefan Neuser schrieb: > Wie viele PINS sollte der µC haben wenn ich 3 Sensoren sowie ein > Bluetooth Modul betreiben möchte? Da I²C ein Bussystem ist, kann ich > alle Sensoren, sofern diese I²C sprechen, parallel am Bus betreiben. I2C sind 2 Pins, also brauchst Du minimal einen 4-Pinner. D.h. ein ATtiny85 reicht. Peter
Stefan Neuser schrieb: > Welchen XMEGA bzw. MSP430 würdet Ihr mir empfehlen? Beim MSP würde ich unterscheiden zwischen MSPs mit USI und USCI. Die USI ist eine auf I2C gepimpte SPI Schnittstelle. Von daher nicht so "flüssig" zu programmieren wie die "echte" I2C Schnittstelle im USCI. Generell solltes du dich bei den F2xx Typen umschauen. F2xx mit USI hat die F20xx Serie. Mit USCI geht es bei den F21xx los. Wenn das Bluetooth Modul UART brauch, brauchst du dann eh die USCI Schnittstelle. Siehe auch: http://focus.ti.com/lit/sg/slab034r/slab034r.pdf > Ist der JTAG von Olimex ausreichend oder weißt dieser wesentlich > Nachteile zum TI JTAG auf? Hat der Parallelport JTAG bis auf die > Spannungsversorgung gravierende Nachteile zur USB Version? Einige sagen immer das der Parallele beim Debuggen langsamer sein soll. Das kann ICH allerdings nicht bestätigen. Von der Seite besteht meiner Meinung nach kein Nachteil gegenüber USB. USB ist aber etwas schneller beim programmieren. Der Olimex hat höchstens den Nachteil das evt. beim Compiler nicht gleich ein Treiber von Haus aus dabei ist. Ansonsten ist er eher besser/schneller als der TI. Der Parallele liefert übrigens auch Spannung. Nur halt nicht mit viel Strom. Aber für ne blinkende LED reichts :)
Stefan Neuser schrieb: > Hat der Parallelport JTAG bis auf die > Spannungsversorgung gravierende Nachteile zur USB Version? Diesen: Dass viele PCs keinen Parallelport mehr besitzen. Und USB da nicht weiterhilft.
Stefan Neuser schrieb: > Wie viele PINS sollte der µC haben wenn ich 3 Sensoren sowie ein > Bluetooth Modul betreiben möchte? Da I²C ein Bussystem ist, kann ich > alle Sensoren, sofern diese I²C sprechen, parallel am Bus betreiben. Genau. Fürs Bluetooth brauchst Du einen zweiten UART. > Welchen XMEGA bzw. MSP430 würdet Ihr mir empfehlen? Überlege Dir, ob Du den HW-Multiplizierer brauchst, ob Du DMA haben willst, welchen Takt Du haben willst, wieviel RAM Du brauchst, und dann gehe bei TI auf die Webseite: http://focus.ti.com/mcu/docs/mcuhome.tsp?sectionId=101&DCMP=TIHomeTracking&HQS=Other+OT+home_p_micro Da gibts ein MCU Selection Tool, das Dir dann den passenden Chip auswirft. Aus dem Stand heraus würde ich sagen 430F1611 (relativ viel RAM, MUL, DMA, 2 USART, 2. Quarz). Dafür gibts sogar ein Board von Olimex. Beim AVR würde ich defaultmäßig auf den 644p schauen. > Ist der JTAG von Olimex ausreichend oder weißt dieser wesentlich > Nachteile zum TI JTAG auf? Hat der Parallelport JTAG bis auf die > Spannungsversorgung gravierende Nachteile zur USB Version? Olimex und Linux ist nicht. Hier hatten wir schon viele Leute, die mit dieser Kombination Probleme hatten. Nimm den original TI FET430UIF. Warum sparen die Leute immer an ihren Werkzeugen? Vor allem da Du in der Diplomarbeit nicht unendlich viel Zeit hast, willst Du zumindest dort keinen Stress haben. fchk
Vielen Dank für deine ausführliche Hilfe. Frank K. schrieb: > Aus dem Stand heraus würde ich sagen 430F1611 (relativ viel RAM, MUL, > DMA, 2 USART, 2. Quarz). Dafür gibts sogar ein Board von Olimex. Ich habe mal ausgerechnet wie viel Speicher ich Maximal beschreiben möchte. Es sind insgesamt 2MB. Ich denke, dass der 430F1611 etwas überdimensioniert ist, da DMA nicht notwendig sein wird. Aber momentan bin ich sowieso erstmal überfordert und muss die bisherigen Informationen zuerst mal auswerten. Bis dahin nochmal vielen lieben Dank für die Hilfe.
@ Stefan Neuser (Firma: Student) (stefant60) >Ich habe mal ausgerechnet wie viel Speicher ich Maximal beschreiben >möchte. Es sind insgesamt 2MB. Das kann jeder uC, die Frage ist, in welcher Zeit ;-) Für sowas bietet sich FLASH mit SPI an. https://www.it-wns.de/themes/kategorie/detail.php?artikelid=667&source=2 >bin ich sowieso erstmal überfordert und muss die bisherigen >Informationen zuerst mal auswerten. Das glaube ich ;-)
Stefan Neuser schrieb: > -Linux als OS zur Enwicklung Genau hier scheiden die MSP430 aus meiner Sicht leider aus, obwohl ich ein Fan von diesen Mikrocontrollern bin und schon viele Dinge damit realisiert habe. Das Problem ist, dass der MSPGCC, welchen es auch für Linux gibt, anscheinend nicht mehr gross weiterentwickelt wird. Willst Du also direkt oder später mal z.B. einen MSP430F5xxx einsetzen, welcher für vieles ideal ist (günstig, viel Speicher, viel Peripherie, einfach in der Anwendung), dann gibts dafür leider (noch?) keine Unterstützung. Debuggen kann man mit den Gratistools ebenfalls vergessen, das ist aus meiner Sicht einfach ein riesen Gebastel und macht absolut keinen Spass. Meine Empfehlung daher; MSP430 ja, aber nur mit einem käuflichen Tool und damit wohl nur unter Windows. Von da her bist Du eventuell mit einem AVR besser dran, obwohl der MSP430 vom Chip her sicher die "modernere" Lösung wäre. Aber schlussendlich ist eine gute Toolchain fast genauso wichtig, damit man beim Entwickeln vom Fleck kommt. Und ich nehme mal nicht an, dass Du bereit wärst, Dir z.B. eine IAR Toolchain für über 1000 Euro zu leisten und Windows zu verwenden.
Crossworks gibt es auch für MSP430 und das auch für Linux. Ist privat mit 150$ erträglich. Wie gut oder schlecht weiss ich nicht, aber es werden wohl alle Devices unterstützt.
Nachtrag: Eine Alternative zu der MSP430 Serie mit guter und kostenloser Toolchain mit Linux-Unterstützung wären noch die H8 oder M16C Serien von Renesas. Toolchain: http://www.kpitgnutools.com/ Der Pferdefuss hier ist die Fehlende Unterstützung hier bei mikrocontroller.net, da hier kaum jemand diese uC's einsetzt.
A. K. schrieb: > Crossworks gibt es auch für MSP430 und das auch für Linux. Ist privat > mit 150$ erträglich. Wie gut oder schlecht weiss ich nicht, aber es > werden wohl alle Devices unterstützt. War gerade auf deren Homepage http://www.rowley.co.uk/msp430/index.htm Sieht noch gut aus und Support für die neusten Derivate scheint ebenfalls laufend gewährleistet zu sein. Wenn Stefan die $150 verschmerzen kann, sicher eine gute Lösung im Zusammenhang mit MSP430.
Hallo zusammen. Ich denke, ich werde mich für ein AVR µC entscheiden (müssen). Grund dafür wären: 1. Das AVR Studio ist kostenlos erhätlich 2. Ich besitze einen JTAG ICE mkII 3. Es gibt mehr Material (Code,HowTo's...) im Netz. 4. Günstig und oft als DIP Version erhältlich. Ganz ehrlich finde ich den MSP430 von der Architektur, dem Stromverbrauch, dem Speicher sowie weiteren Eigenschaften besser. Peter Dannegger schrieb: > I2C sind 2 Pins, also brauchst Du minimal einen 4-Pinner. > D.h. ein ATtiny85 reicht. 4-Pinner ist mir bissel zu wenig, da ich das Bluetooth Modul über UART ansprechen muss. Nun habe ich mir einige ATMEL Modelle angeschaut und liebäugel mit dem ATTiny2313. Jetzt habe ich natürlich noch einige Fragen bevor ich mich endgültig entscheide: 1. Sind 2K Bytes of In-System Self Programmable Flash ausreichend, wenn ich einem Bluetooth Modul(Bluecore4) Daten übermitteln möchte, welche ich zuvor von 3 Sensoren im Flash Speicher festgehalten habe? 2. Ich benötige unbedingt I²C zur Kommunikation mit den Sensoren sowie eine UART Schnittstelle zur Kommunikation mit dem Bluetooth Modul. Im Datenblatt werden auf der ersten Seite folgende Schnittstellen erwähnt :
1 | - One 8-bit Timer/Counter with Separate Prescaler and Compare Mode |
2 | - One 16-bit Timer/Counter with Separate Prescaler, Compare and Capture Modes |
3 | - Four PWM Channels |
4 | - On-chip Analog Comparator |
5 | - Programmable Watchdog Timer with On-chip Oscillator |
6 | - USI – Universal Serial Interface |
7 | - Full Duplex USART |
Johnny B. schrieb: > Wenn Stefan die $150 > verschmerzen kann, sicher eine gute Lösung im Zusammenhang mit MSP430 Ich bin immernoch hin und her gerissen jedoch. Die Frage ist halt, ob sich die 150$ für die CrossWorks Toolchain sowie weitere 100€ für einen Original JTAG von TI lohnt. Falk Brunner schrieb: > Das kann jeder uC, die Frage ist, in welcher Zeit ;-) > Für sowas bietet sich FLASH mit SPI an. Kann der ATTiny2313 mithilfe von Software SPI sprechen? Ist ein solcher Flash Speicher stromsparend?
Stefan Neuser schrieb: > 1. Sind 2K Bytes of In-System Self Programmable Flash ausreichend, wenn > ich einem Bluetooth Modul(Bluecore4) Daten übermitteln möchte, welche > ich zuvor von 3 Sensoren im Flash Speicher festgehalten habe? Du wirst eher nicht in Assembler programmieren, oder? Also wenn du UART und I2C brauchst, nimm doch einfach nen mega8, bzw. einen seiner Nachfolger, Vorteil: - es gibt ne Menge Codebeispiele (auch das Tutorium hier arbeitet mit mega8) - er hat einen Hardware-UART und einen HW-I2C, sprich das ganze Lowlevel-Handling ist schon drin. - er hat zusätzlich nen SPI (-> für nen seriellen Datenflash) - 8kByte Flash ist besser als 2 (insbesondere für C-Programme :-D)
Florian Löffler schrieb: > Also wenn du UART und I2C brauchst, nimm doch einfach nen mega8, bzw. > einen seiner Nachfolger, Vorteil: Ich möchte meine Schaltung am liebsten über 1-2 Gold-CAP's versorgen. Der Mega8 verbraucht 3,4mA im Active Mode und 1mA im Idle Mode. Die Schaltung soll ohne Bluetooth 8 Stunden mit ausreichend Power versorgt werden.
Klar, den mega8 gibts schon ne Weile :-D Deswegen solltest du dir mal die Nachfolger anschauen. Die sind pinkompatibel, aber der Stromverbrauch ist um einiges kleiner. z.B. mega88P, mega88PA http://www.rn-wissen.de/index.php/Atmel_Controller_Mega48_Mega88_Mega168 Außerdem werden in deiner Anwendung zunächst Bluetooth und dann der Flash die größten Stromfresser sein. ;-)
Florian Löffler schrieb: > Die sind pinkompatibel, aber der Stromverbrauch ist um einiges kleiner. > z.B. mega88P, mega88PA Der ist schon eher was, vielen Dank, ich schau mir das Datenblatt mal genauert an.
Stefan Neuser schrieb: > Hallo zusammen. > > Ich denke, ich werde mich für ein AVR µC entscheiden (müssen). > > Grund dafür wären: > 1. Das AVR Studio ist kostenlos erhätlich > 2. Ich besitze einen JTAG ICE mkII > 3. Es gibt mehr Material (Code,HowTo's...) im Netz. > 4. Günstig und oft als DIP Version erhältlich. > > Ganz ehrlich finde ich den MSP430 von der Architektur, dem > Stromverbrauch, dem Speicher sowie weiteren Eigenschaften besser. > > Peter Dannegger schrieb: >> I2C sind 2 Pins, also brauchst Du minimal einen 4-Pinner. >> D.h. ein ATtiny85 reicht. > > 4-Pinner ist mir bissel zu wenig, da ich das Bluetooth Modul über UART > ansprechen muss. Nun habe ich mir einige ATMEL Modelle angeschaut und > liebäugel mit dem ATTiny2313. Der hat kein JTAG, d.h. Dein JTAG ICE mkII nützt Dir genau gar nichts. > Kann der ATTiny2313 mithilfe von Software SPI sprechen? Ist ein solcher > Flash Speicher stromsparend? Flash-schreiben und eine Versorgung mit Goldcaps schließen sich aus. Denk doch selbst mal nach: Um in eine Flash- oder EEPROM-Zelle Ladung rein- oder rauszubekommen, reichen Deine 3.3V nicht aus. Dafür muss erst ein chipinterner Spannungswandler eingeschaltet werden, der intern irgendwas >>10V bereitstellt, damit die Ladungen sich bequemen, die Gateisolation zu überwinden. Für eine SRAM-Zelle reichts aber. fchk
Frank K. schrieb: > Für eine SRAM-Zelle reichts aber. Da SRAM ein flüchtiger Speicher ist, bringt dieser mich nicht weiter.
Hi
>Der hat kein JTAG, d.h. Dein JTAG ICE mkII nützt Dir genau gar nichts.
Doch. Damit geht auch Debugwire für ATTinys.
MfG Spess
Dann nimm hlat F-RAM, damit sollte es keine Probleme geben. http://www.ramtron.com/products/nonvolatile-memory/serial.aspx Gruß Rainer
Stefan Neuser schrieb: > Frank K. schrieb: >> Für eine SRAM-Zelle reichts aber. > > Da SRAM ein flüchtiger Speicher ist, bringt dieser mich nicht weiter. Und warum keine Backup-Batterie? Muß ja nicht groß sein. fchk
Frank K. schrieb: > Und warum keine Backup-Batterie? Muß ja nicht groß sein. Wie lange hält denn eine solche Backup Batterie? Ich möchte das Endprodukt Induktiv laden, über eine Ladetablet. Rainer schrieb: > Dann nimm hlat F-RAM, damit sollte es keine Probleme geben. > > http://www.ramtron.com/products/nonvolatile-memory... Sieht nicht schlecht aus, mit einem MB müsste ich eventuell hin kommen. Danke für die Info.
Stefan Neuser schrieb: > Frank K. schrieb: >> Und warum keine Backup-Batterie? Muß ja nicht groß sein. > > Wie lange hält denn eine solche Backup Batterie? Rechne selber aus: Eine CR2032 (Mainboard CMOS) hat eine Kapazität von 210mAh, das von mir vorgeschlagene 1 MB SRAM zieht 6uA im Standby. Die Ermittlung der Betriebsstunden ist eine Übung für den Leser. Nur nicht überrascht sein, wenn da etliche Jahre bei herauskommen ... das stimmt schon. Wenn es kompakter sein soll: eine CR1610 hat 75mAh. Selbstentladung bei Lithium-Zellen: vernachlässigbar. Ein MSP430F2274 braucht übrigens im Low Power Mode 4 0.7uA und im aktiven Betrieb bei 1 MHz 270uA. fchk
Frank K. schrieb: > Rechne selber aus: Eine CR2032 (Mainboard CMOS) hat eine Kapazität von > 210mAh, das von mir vorgeschlagene 1 MB SRAM zieht 6uA im Standby. Die > Ermittlung der Betriebsstunden ist eine Übung für den Leser. Nur nicht > überrascht sein, wenn da etliche Jahre bei herauskommen ... das stimmt > schon. Frank, ich enschuldige mich für meine dumme Frage. Als angehender Dipl. Ing. sollte ich besser recherchieren.
Ergibt bei oben genannten SRAM : 532,29 Jahre Stefan Neuser schrieb: > Ein MSP430F2274 braucht übrigens im Low Power Mode 4 0.7uA und im > aktiven Betrieb bei 1 MHz 270uA. Die ATmega48/88/168 verbrauchen auch kaum Strom : Active Mode: 250 μA at 1 MHz, 1.8V 15 μA at 32 kHz, 1.8V (including Oscillator) Power-down Mode: 0.1μA at 1.8V Dazu kommt, dass Sie folgende Schnittstellen per HW implementiert haben: -Two 8-bit Timer/Counters with Separate Prescaler and Compare Mode – One 16-bit Timer/Counter with Separate Prescaler, Compare Mode, and Capture Mode – Real Time Counter with Separate Oscillator – Six PWM Channels – 8-channel 10-bit ADC in TQFP and QFN/MLF package – 6-channel 10-bit ADC in PDIP Package – Programmable Serial USART – Master/Slave SPI Serial Interface – Byte-oriented 2-wire Serial Interface (Philips I2C compatible) – Programmable Watchdog Timer with Separate On-chip Oscillator – On-chip Analog Comparator – Interrupt and Wake-up on Pin Change Sprich I2C, SPI sowie USART :-) An alle, was haltet Ihr von diesem µC?
@ Stefan Neuser (Firma: Student) (stefant60) >Frank, ich enschuldige mich für meine dumme Frage. Als angehender Dipl. >Ing. sollte ich besser recherchieren. >t = \frac{Q}{I} >Ergibt bei oben genannten SRAM : 532,29 Jahre Na dann solltest du vielleicht noch einen VHS-Kurs in Mathematik belegen. 210mAh/6uA = 35.000h ~ 4Jahre >An alle, was haltet Ihr von diesem µC? Der ist super, wie alle AVRs ;-)
Falk Brunner schrieb: > Na dann solltest du vielleicht noch einen VHS-Kurs in Mathematik > belegen. Damn it, ich hatte mich im Taschenrechner vertippt, es fehlten der Exponent 210e-3 Danke für die Korrektur
Die MSP430 haben eine sehr mächtige Debug-Unit eingebaut, die Echtzeitdebugging ermöglicht. Die AVRs haben nichts in diese Richtung. Erst die XMegas verfügen über einegebaute Debug-Hilfen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.