Hallo ins Forum, ich habe einen ADS131M03 erfolgreich an meinem STM32H745 zum Laufen gebracht. Der ADS131 gibt über einen Pin ein Signal aus wann eine Wandlung abgeschlossen ist und die Daten bereit sind zum Auslesen. Die Samplingrate des ADS131 kann zwar bis max. 64kSPS eingestellt werden. Mir reichen für meine Anwendung eingentlich 1 bis 2kSPS.) Mittels Interrupt angestoßen durch das externe Signal kann ich natürlich die Werte einlesen und verarbeiten. So weit so gut. Aber der Controller hat noch sehr viel anderes zu tun. (ILI9341 und FreeRTOS sind am Start) Daher hätte ich das gerne etwas effizienter - etwa in der Art: Wenn das Data-Ready-Signal (low-active) vom ADS131 an einem Pin des STM32H7 ankommt sollte ohne Zutun der CPU ein SPI_Receive_DMA erfolgen und die Werte (5x 32bit "brutto" (= "NOP_Befehl" + 3x 32-bit Werte Kanal 1, 2 & 3 (=netto) + CRC-Daten) mittels DMA in ein Array geschrieben werden. Erst wenn das abgeschlossen ist sollte ein Interrupt kommen, damit ich die Werte verarbeiten kann. Option: Es können auch eine definierte Anzahl von Werten am Stück (in einer definierten Zeit) gelesen werden und der Interrupt kommt erst dann wenn alle Werte eingelesen sind. Bei meiner intensiven Recherche habe ich Ideen gefunden, "etwas Ähnliches" mittels eines extern (vom ADS131) getriggerten Timers zu machen, der dann wiederum das CS-Signal ansteuert (das machen die SPIs aller ST-Controller ja leider (?) nicht automatisch) und zudem auch den DMA anstößt, der wiederum den SPI-Transfer aktiviert... (oder so ähnlich...?) Keines der gefundenen Themen passt aber wirklich auf mein Beispiel.. Daher Frage ich erst mal im Land der Dichter und Denker nach... ...bevor ich mich in die Abgründe der ST-Community begeben ;-) Falls da jdm eine Idee hat wäre ich sehr dankbar. Viele Grüße Sheldon P.S.: Soweit ich bei meiner Suche erfahren habe schütteln andere Controller (TI ?) diese Funktionalität aus dem Handgelenk - die STM32H7-Serie (muss nicht unbedingt ein 745 sein) ist bei dieser Anwendung aber (leider) "gesetzt"... :-( Falls deratiges bei einem ESP32 geht wäre das aber für ein anderes Projekt durchaus interessant
> Daher Frage ich erst mal im Land der Dichter und Denker nach...
Ich einem Land der Denker wuerde man das Datenblatt zur Rate
ziehen und dann einfach nun ja denken.
Im Internet wuerde man eher suchen wenn man im Land der Bloeden und
Abschreiber lebt. Das mindeste was man von einem Dichter und
Denker erwarten kann das er ein bereits selbst erarbeites
Gedicht zur Diskussion stellt.
Ueber einzelne Verse koennen wir dann ja immer noch diskutieren. .-)
Willst Gutes du und Schönes schaffen,
Das lebensvoll das Leben mehre,
Mußt du dich ernst zusammenraffen
Und darfst nicht scheu'n der Arbeit Schwere.
Da hilft kein Schwärmen bloß und Hoffen,
Kein Traum von künftiger Entfaltung;
Nein, ringen mußt du mit den Stoffen,
Und stark sie zwingen zur Gestaltung.
(Friedrich Julius Hammer)
Vanye
Sheldon G. schrieb: > Bei meiner intensiven Recherche habe ich Ideen gefunden Scheinbar hast du dann nicht im Datenblatt intensiv recherchiert? Dort könntest du prüfen, was für Triggerquellen die DMA-Einheit (ein Channel) hat. Gibt es die Möglichkeit auf ein Signal an einem GPIO Pin zu reagieren (DMA starten). Dann würde ich prüfen, was kann die DMA-Unit für Interrupts erzeugen. Z.B. wenn ein DMA-Transfer fertig ist. Wenn du finden solltest, dass ein DMA Transfer mit einem GPIO-Signal starten kann und am Ende des Transfers ein IRQ erzeugen, dann hast du alles gefunden, was du brauchst. Ich vermute ganz stark, dass das beides möglich ist. Die Lösung kann man aber genauso gut mit einer Timer gesteuerten Mimik lösen. So wie unten beschrieben. Setzt voraus, dass ein DMA Transfer in der halben AD-Zykluszeit fertig ist. Wird er wohl schaffen ;) Allerdings könnte es einen sehr kleinen Jitter für die Abtastwerte geben. Hängt von der IRQ-Latency des STM32H7 ab.
1 | Init DMA-transfer |
2 | Init SPI |
3 | Init ADS131 für manuellen Start der AD-Wandlung und starte 1. Wandlung |
4 | Init Timer IRQ und starte Timer mit der halben AD-Zykluszeit (also halbe Samplezeit) |
5 | |
6 | while( 1 ) |
7 | { |
8 | // mach was |
9 | } |
10 | |
11 | void timerIrqFunction(void) |
12 | { |
13 | static uint32_t state = 0; |
14 | |
15 | if( state == 0 ) |
16 | { |
17 | Starte eine manuelle AD-Wandlung |
18 | Starte DMA transfer |
19 | state = 1 |
20 | } |
21 | else |
22 | { |
23 | // Dma transfer ist fertig |
24 | VerarbeiteAdDaten() |
25 | state = 0 |
26 | } |
27 | } |
Und noch eine Anmerkung. Du hast dir eine CPU gesucht die mit mehreren 100MHz arbeitet und einen 24-Bit AD Wandler. Deine Fragen lassen vermuten, dass du nach dem Motto handelst, viel hilft viel. Kann man so machen. Du fürchtest, dass deine CPU überlastet wird weil ein Display angesteuert werden soll und auch noch FreeRTOS läuft. Ich glaube, deine CPU wird einschlafen. Für nicht genutzte CPU-Zyklen gibt es auch kein Geld zurück ;) Nur damit du eine Vortellung bekommst, was so machbar ist... Vor knapp 20 Jahren arbeitete ich an einem Satellitenprojekt, dessen Hauptrechner mit einem ADSP21020 bestückt war. Das ist ein Signalprozessor, der lief mit 18MHz (ja 18, kein Tippfehler). Da lief ein RTOS drauf und diese CPU hat folgende Aufgaben erledigt.
1 | - Telekommando und Telemetrie verarbeitet |
2 | - Lageregelung des Satelliten |
3 | - Auswertung aller Sensoren |
4 | - Ansteuerung aller Aktoren |
5 | - Power Kontrolle aller Einheiten + Laderegelung der Akkus + Solarstring-Kontrolle |
6 | - Ansteuerung des Nutzinstrumentes (irgendwas soll der Sat. ja tun) |
7 | Die Nutzlast bestand wiederum aus 4 HW Einheiten, die separat kommandiert wurden |
8 | - "Regelung" der Heizung des Treibstoffsystems |
Na ja, so grob. Es wurden jetzt keine besonderen Optimierungsversuche unternommen, was Laufzeit betrifft. Der Satellit funktioniert heute noch und unter einer gestressten CPU hat er nie gelitten. :) Und du hast Angst dass dein STM32H7 mit mehreren 100MHz wegen einem Display und einem RTOS + AD-Wandlung zu langsam wird? Dann ist vermutlich im Konzept was falsch. Nun ja er könnte auch noch wer weiß was für komplexe und rechenintensive Aufgaben haben, die die CPU an ihre Grenze bringen, ja.
:
Bearbeitet durch User
Sheldon G. schrieb: > Die Samplingrate des ADS131 kann zwar bis max. 64kSPS eingestellt > werden. Mir reichen für meine Anwendung eingentlich 1 bis 2kSPS.) > Daher hätte ich das gerne etwas effizienter - etwa in der Art: Bei der Samplerate ist das eher akademisch, aber sei's drum. > Bei meiner intensiven Recherche habe ich Ideen gefunden, "etwas > Ähnliches" mittels eines extern (vom ADS131) getriggerten Timers zu > machen, der dann wiederum das CS-Signal ansteuert (das machen die SPIs > aller ST-Controller ja leider (?) nicht automatisch) und zudem auch den > DMA anstößt, der wiederum den SPI-Transfer aktiviert... (oder so > ähnlich...?) Warum um so viele Ecken gedacht? Der "Synchronous Master Mode" des ADC sollte ganz hilfreich sein. H7 seitig SPI-Slave, mit DMA ins RAM, fertig. Es muss dann allerdings immer "NULL" and den ADC zurück gesandt werden. Dafür gibt's im SPI-Interface sogar extra Vorkehrungen, s. "53.5.2 Unterrun flag" im RM.
Der H7 kann CS Signale generieren (SS-Pin) SPI1,SPI2,SPI3 haben je 16Byte Fifos. Direkte DMA Triggerung über externen Eingang und den DMAMUX Generator geht scheinbar nur in der D3 Domain und nicht in der D2 wo die SPI angebunden sind. Beispiel für BDMA in D3: an5224-stm32-dmamux-the-dma-request-router-stmicroelectronics.pdf Für die D2 Domain (DMA1,DMA2) wird empfohlen mit dem externen Eingang einen nicht benötigten Timer zu Triggern der dann die DMA triggert.
Hallo nochmal, ob Ihr's glaubt oder nicht - mit dem "Reference Manual" meines Controllers habe ich schon viele invensive Stunden verbracht. Mit dem Datenblatt auch - aber in dem stehen derartige Dinge sicher nicht drin. (...hätte man mal mit nem ST-Controller gearbeitet wüsste man das wohl !?) Leider variieren teils je nach Kapitel die Begrifflichkeiten gerne mal. Z.B. wird "Channel" unterschiedlich verwendet, "Event" ebenso... und da gibt es noch viele mehr. Zudem variieren die Begrifflichkeiten auch zwischen den Registern im RM, bei dem was man im CubeMX dafür auswählen kann und dann noch bei den ST-Beispielcodes. Das macht es nicht gerade einfacher wenn man zwei oder mehr integrierte Module (z.B: SPI, DMA, Timer, NVIC) zur Zusammenarbeit bringen will. Bei einer ST-Online-Schulung hat selbst der ST-Dozent sich äußerst negativ über die eigenen Datenblätter geäußert. Soweit mal dazu... Zur "überdimensionierten Hardware": Bei der Anwendung ist der Preis des Controllers (fast) vollkommen egal. Warum sollte ich also einen kleineren nehmen? Dass der Controller den Job auch so wie ich es habe schaffen wird ist das eine. Wenn es so funktionieren würde wie ich es mir erhoffe muss ich mir bezüglich Timing etc bei anderen Dingen keine Gedanken machen. ...und falls es die Hardware hergeben würde - warum soll ich es dann nicht nutzen? @Vanye R. ...und woher nimmst Du das "Datenblatt" wenn nicht aus dem Internet. Konkete Frage an 900ss D.: Ist Deine Antwort so zu verstehen, dass Du weißt, wie es funktioniert und willst es nur nicht schreiben (genau dafür sind Internetforen ja bekanntlich da) oder denkst Du nur das es so funktionierten könnte - weißt es aber sebst auch nicht. Was bei Deinen vielen "könnte" und "sollte" nämlich fehlt ist die Ansteuerung des CS. Das machen die STs eben leider nicht automatisch. Das steht auch schon in meiner Frage oben. Dummerweise macht es ja mehr Spaß sarkastische Antworten zu schreiben als Fragen erst mal richtig zu lesen... ;-) @ Andreas B.: Im Datenblatt vom ADS131"M"03 finde ich nichts zu einem "Synchronous Master Mode". Google findet da auch nichts. Fündig werde ich hier nur im RM des STM32H7 - da aber auch nur beim USART !? ...oder im Datenblatt vom ADS131"A"04 Evtl. kann ich den "A" aber anstatt des "M" verwenden => danke für den indirekte Tip.
Sheldon G. schrieb: > @ Andreas B.: > Im Datenblatt vom ADS131"M"03 finde ich nichts zu einem "Synchronous Ups, ja, das "M" übersehen. > Master Mode". Google findet da auch nichts. Fündig werde ich hier nur im > RM des STM32H7 - da aber auch nur beim USART !? Nein, gemeint ist, dass das SPI vom H7 im slave mode arbeitet, und dabei gleichzeitig mit dem Empfang der Werte vom ADC natürlich auch wieder an den ADC zurück sendet. Da es da aber eigenlich nichts zu senden gibt, füllt man den TxFIFO erst gar nicht, sondern schreibt einfach NULL ins UDRDR Register, wie im Abschn. 53.5.2 im RM des H7 beschrieben. > ...oder im Datenblatt vom ADS131"A"04 > Evtl. kann ich den "A" aber anstatt des "M" verwenden => danke für den > indirekte Tip.
Sheldon G. schrieb: > dass Du weißt, wie es funktioniert und willst es nur nicht schreiben Nein, ich weiß es nicht. Mich würde allerdings wundern wenn es nicht ginge. Auch mit dem CS Signal. Ich habe DMA auf einem STM32F103 verwendet. Und es funktionierte ;) Kann sein dass es nicht so möglich ist wie du möchtest aber dafür habe ich eine Lösung mit dem Timer beschrieben. Der ADC muss sicher nicht zwingend frei laufen und die Ansteuerung des CS machst du dann manuell. Manchmal geht eben nicht alles mit HW-Unterstützung. Du könntest mit dem Signal vom ADC auch einen GPIO-IRQ auslösen. Der steuert dann CS und startet den DMA Transfer. Am Ende vom DMA-Transfer löst der DMA-Controller einen IRQ aus, der dir sagt neue Daten sind da. Mit den Argumenten die du anbringst, den STM32H7 zu verwenden müsstest du eigentlich einen Quadcore mit mind. 1GHz Takt verwenden. RPi4 z.B. Wenn du einen "kleineren" Controller nimmst, der ausreichend Rechenleistung hat, ist es oft auch einfacher, die Peripherie zu benutzen. Und evtl. steuert der sogar CS automatisch. Aber ich bin da leidenschaftslos, ich quäle mich ja nicht, nur um einen STM32H7 zu verwenden ;) Und mein Beispiel mit dem Satelliten zeigt was mit wesentlich weniger Rechenleistung möglich ist (ohne besondere Programmiertricks o.ä.). Und DMA o.ä. Features hatte der ADSP auch nicht.
An alle 'schau doch mal ins Datenblatt': Ich habe auch einen H743. Das Reference-Manual hat ca 3300 Seiten (RM0433). Eine normale Bibel hat nur ca 1472 Seiten. Da kann es sein, dass man manchmal ein Feature überliest. Von daher finde ich die Frage durchaus angemessen.
Ach ja, Sarkasmus liegt mir nicht fern war aber hier nicht sarkastisch gemeint. Wenn gleich ich schmunzeln musste als du erwähntest, dass du mit dem STM32H7 auch ein Display ansteuern müsstest und noch FreeRTOS verwendest ;) Ist aber nicht bös gemeint.
:
Bearbeitet durch User
@Hans-Georg L. Soweit ich mal irgendwo gelesen habe machen die "neueren" H7 (H7Ax, H7Bx, H72x, H73x) das NSS-Handling nun wirklich korrekt. (mit denen habe ich mich bisher nicht näher beschäftigt) Aber bist Du Dir sicher, dass auch der H745 das NSS "richtig" ansteuert, d.h. Vor dem Transfer NSS=>0, dann mehrere Bytes übertragen und anschließend wieder NSS=>1. Der Modus, bei dem nach jedem Byte NSS wieder auf 1 und zurück auf 0 gezogen wird können H74x & H75x auch, aber das nutzt für den ADS131M03 nichts. Bei einigen ST-Beispielen in CubeMX steuern die das NSS auch "manuell" = per Software an. Warum sollten sie das machen wenn es doch per Hardware funktionieren würde Danke schon mal für den Tip ..werde ich heute Abend mal versuchen..
Du könntest das NSS Signal auch manuell steuern. Lass es einfach immer aktiv. Wenn dein DMA dir per Interrupt sagt, dass es mit einem Transfer fertig ist, dann toggle NSS einmal "manuell", damit dein ADC das mitbekommt. Evtl. darf das Togglen nicht zu schnell erfolgen (ADC-Datenblatt). Ein sonst ständig aktives NSS Signal sollte den ADC sonst nicht stören. Auch hier Datenblatt fragen.
Sheldon G. schrieb: > @Hans-Georg L. > > Aber bist Du Dir sicher, dass auch der H745 das NSS "richtig" ansteuert, > d.h. Vor dem Transfer NSS=>0, dann mehrere Bytes übertragen und > anschließend wieder NSS=>1. > Ich verwende Das h743Zi(T6U) Nucleo Board mit einem AS6501 und da funkioniert das NSS siehe Anhang. Kanal 2 ist der Interrupt Kanal 3 das NSS Signal und Kanal 4 die eingehenden Daten. Die verwaschene Flanke am Ende der Übertragung bekommt man weg wenn man den Pin vorher zusätzlich auf Ausgang und auf 0 setzt. Er schaltet am Ende scheinbar das NSS einfach ab und nicht aktiv nach 0 und wenn dann der Pin auf Eingang steht machen sich die internen Kapazitäten bemerkbar. Wenn du alles auf einmal lesen willst musst du aber 32 Bit lesen . 24 Bit liest er 16 + 8 Bit in 2 Sequenzen.
Ob ein "kleinerer" Controller wirklich einfacher ist wage ich zu bezweifeln. Dass andere manches besser machen können stimmt sicher, dafür werden die auch ihre Macken woanders haben !? Aber dann mal "in die Vollen: Die Entscheidung für die H74x-Serie viel wegen den zwei integrierten OpAmps die als PGA (als Subtrahierer) vom Eingangswert ein Bias-Wert (kommt aus den DACs) abziehen. Damit kann nun mit den integrierten ADCs ein kleiner Wertebereich des gesamten Messbereiches weit oberhalb vom Nullpunkt höher aufgelöst werden (quasi eine Zoom-Funktion ;-) => läuft. (das geht z.B. schon nicht mit allen H7-Derivaten, da einige die Funktion „Externer Bias“ nicht besitzen. Was der H7 dann noch alles macht: Aufnehmen der ADC-Werte Version 1: Kurze Messung => 2-4kSPS, alles mittels DMA in ein großes Array. Aufnehmen der ADC-Werte Version 2: Lange Messung => 0,5kSPS, mittels DMA in ein Puffer-Array. Während der laufenden Messung (Version 2): Auswerte-Berechnung und … …entweder vom Puffer-Array in ein anderes Array übertragen mittels Memory-to-Memory-DMA => läuft oder …speichern der ADC-Daten in QSPI-Flash – lesen daraus mittels MemoryMapping => läuft Während der laufenden Messung (Version 1 und 2) grafische Anzeigen (ähnlich einem Oszilloskop) der Messwerte auf dem ILI9341 mit hoher Frame-Rate. => läuft Das ILI9341 kann nicht über LTDC angebunden werden, denn auf einigen der dafür nötigen Pins sind die OpAmp-IOs Daher: Das ILI9341 bekommt per SPI-DMA mit 60 MHz laufend den kompletten Framebuffer aus dem RAM des H7. Da per DMA nur 16384 Werte übertragen werden können geht das nicht mit den vom ILI gewünschten 16bit pro Pixel sondern man muss quasi zwei Pixel als ein 32-bit-Wert übertragen. => läuft Da man MSB und LSB nicht tauschen kann (zumindest habe ich im RM nichts gefunden wie das gehen könnte) bedeutet das aber, dass die übliche Farb-Tabelle nicht funktioniert, daher eigene erstellt => läuft Zudem habe ich dann gleich eine „effizientere Text-Ausgabe“ (mit eigenen Fonts) erstellt, weche die Möglichkeiten vom DMA2D vernünftig ausnutzt => läuft Die RTC des H7 holt sich die Uhrzeit aus einem DS3231 => läuft, wird aber später durch Batteriepufferung der RTC des H7 ersetzt I2C-EEprom für sich öfter ändernde Status-Daten => läuft (kommt aber später evtl ins QSPI-Flash wenn mir was zum Wear-Leveling einfällt. Einige digitaler Is (24V) und Os (24V 1 –bis5 A) => läuft PWM Is und Os (24V 3A) => läuft Ansteuern von 1-4 Schrittmotoren mit PowerStep01 => läuft 2 – 5 Encoder-Eingänge (3,3V-24V)=> läuft Benutzeroberfläche mit Menüsystem => läuft USB-Host-MSC um Daten auf USB-Stick speichern / lesen zu können => läuft Alternativ: USB-Device-MSC, damit der H7 am PC als USB-Stick erscheint und man damit Daten speichern / lesen kann => läuft Zusätzlich mit dem zweiten USB-Port des H7 CDC-Device, damit der H7 mittels Terminal (und später eigenem Programm auf dem PC) vom PC aus steuerbar/diagnostizierbar ist => läuft Und dann noch das besondere Goodie: am ProfiNet hängt er auch. Das erfolgt aber mittels NetX-Modul von Hilscher => läuft Was noch kommt: Externer 24Bit-ADC => bin ich gerade dabei… Ein paar digitale Temperatursensoren (0-100°C) Luftfeucht-Sensor Der M4-Kern macht noch garnix – aber warum soll ich den H743 nehmen, wenn der H745 auch nicht mehr kostet. Vielleicht gibt es für den ja später auch mal Arbeit ;-) Zum Vergleich: einer der Sensoren, die am OpAmp/ADC hängen kostet ca 1700,- Jetzt bin ich mal auf Vorschläge gespannt welcher 8-bitter das angeblich auch alles kann wenn man ihn nur richtig mit Assembler programmieren kann. ;-)
Sheldon G. schrieb: > Jetzt bin ich mal auf Vorschläge gespannt welcher 8-bitter das angeblich > auch alles kann wenn man ihn nur richtig mit Assembler programmieren > kann. ;-) Das hat bisher niemand behauptet und ich habe auch nicht daran gedacht. An Assembler schon garnicht. Nur das ein STM32H7 evtl. deutlich komplexer ist als ein Controller mit weniger Leistung die natürlich ausreichen muss. Aber USB-Host kann schon kaum einer. Mit 480MBit noch weniger. Du kriegst das schon hin. ;) PS. Ich glaube trotzdem dass dein H7 sich total langweilt zumal du viel DMA nutzt was ja richtig ist wenn man die Möglichkeit hat.
:
Bearbeitet durch User
Wo habe ich was von 480Mbit geschrieben ? Ich nutze bei beiden USBs nur die internen Phys. Für einen Externen habe ich die Pins nicht. Die Geschwindigkeit brauche ich auch nicht...
Sheldon G. schrieb: > Wo habe ich was von 480Mbit geschrieben ? Nirgends, hab ich einfach angenommen, der H7 kann das. Wenn USB1.1 reicht, wird die Auswahl an geeigneten Controllern auch schon wieder deutlich größer.
Teil-Erfolgsmeldung: Das NSS-Signal funktioniert beim H745 wohl wirklich per Hardware. Ich kenne es eben vom F4, dass es da nicht so funktioniert wie eigentlich üblich. Ich habe es dann mal mit einem ganz frühen H743 (die Revision welche nur 400Mhz schafft) auch mal versucht - da ging es zumindest nicht so wie ich es benötigt habe (...genaueres weiß ich nicht mehr - ist schon sehr lange her) ...damit bin ich damals ausgestiegen... (und habe es ab da eben wie bei F4 "manuell" gemacht. Viele ST-Beispiele machen es (auch beim H7) ebenso... Nachdem mir bei einer ST-Schulung mal einer bestätigt hat, dass die SPI-Peripherie wirklich buggy ist - und ein H743 und H745 "eigentlich genau gleich sind was den M7-Core angeht) habe ich mich nie mehr damit beschäftigt und einfach angenommen, dass der H745 es in "alter Tradition" auch so hält. Aber: Hurra: Es geht wohl doch... (...das mit H745 "nur M7-Core" = H743 stimmt aber auch nicht wie ich mittlerweile weiß...) @ 900ss D.: ...wenn ich nun meinen Code für die restlichen SPI's anpasse kann sich mein H7 ja noch viel mehr langweilen ;-) Aber nochmal die Frage (an alle): Gibt es andere µCs mit zwei integrierten OpAmps/PGAs die man als Subtrahierer verwenden kann und damit zwei min. 14bit (effektive) ADCs befeuern kann? Ansonsten danke an die Tip-Geber... ...mal sehen ob der andere Teil nun auch realisierbar wird...
> Ob ein "kleinerer" Controller wirklich einfacher ist wage ich zu > bezweifeln. Ist auch hier gern geschriebener Unsinn. Niemand liesst sich ein Datenblatt mal eben am Stueck durch und kann es danach auswendig. Egal ob das nun 2000Seiten oder nur 500 hat. Was aber ein Einfluss hat ist die Qualitaet der Dokumentation. Es ist z.B ein grosser Unterschied ob es ein Datenblatt zu einem Controller gibt oder ob der Hersteller ein Datenblatt zu einer ganzen Familie von Controller schreibt und du immer erst im zweiten Datenblatt nachschauen musst welches Feature gerade bei deinem speziellem Controller vorhanden ist oder nicht. Und bei komplexeren Dingen ist auch das vorhandensein und die Qualitaet von speziellen Datenblaettern sinnvoll. Und man muss sich auch darueber im klaren sein das manche Dinge eben nicht in 60min geloesst sind wenn man sie zu ersten mal macht. Das ist eben so und darin liegt ja gerade der Spass sich mit sowas zu beschaeftigen. Sonst koennte das jeder und wir wuerden nicht so gut bezahlt. .-) Vanye
Vanye R. schrieb: > Ist auch hier gern geschriebener Unsinn. Nein, ist kein Unsinn :) Vanye R. schrieb: > Niemand liesst sich ein Datenblatt > mal eben am Stueck durch und kann es danach auswendig. Egal ob das nun > 2000Seiten oder nur 500 hat. Ja. Weshalb hat denn ein "kleinerer" Controller nur 500 Seiten Dokumentation als ein "grösserer"? Die jeweilig integrierten HW Einheiten sind bei größeren Controllern auch oft komplexer. Sie bieten ja auch mehr Möglichkeiten. Wenn man die braucht, dann nehme ich die natürlich. Aber ansonsten macht man sich gegebenenfalls das Leben unnötig schwer. Ok, wenn man Lust dazu hat, ist es auch ok. Das ist dann aber nicht pragmatisch und das bezahlt auch keiner gerne. Auf dem Hobbytisch wieder egal. Und es gibt auch Leute, die werden 5cm größer wenn sie behaupten können, sie hätten einen "großen" Controller schon erfolgreich genutzt. Bei anderen ist es dann der Porsche. ;) Und wenn es denn ein Fall wie hier unter anderem mit dem SPI NSS Signal ist, da versuche ich erst garnicht, dass mit der HW zu lösen. Dann läuft es auf dem einen speziellen Controller. Bei dem nächsten nicht weil die HW es nicht hergibt oder man stolpert dann über ein Errata. Wenn man dieses Problem generisch löst und dann wird der Controller getauscht und man muss bestenfalls nichts ändern, dann ist das in meinen Augen eine gute Arbeit aber nicht weil man nun unbedingt das Problem speziell mit einem Controller gelöst hat. Alles lässt sich auch nicht so generisch lösen. Ist immer auch Abwägung. Es hängt immer noch von der konkreten Situation ab. Pauschalisieren ist selten gut ;) Und Meinungen sind auch verschieden ;)
:
Bearbeitet durch User
900ss D. schrieb: > > Und wenn es denn ein Fall wie hier unter anderem mit dem SPI NSS Signal > ist, da versuche ich erst garnicht, dass mit der HW zu lösen. Dann läuft > es auf dem einen speziellen Controller. Bei dem nächsten nicht weil die > HW es nicht hergibt oder man stolpert dann über ein Errata. > Wenn man dieses Problem generisch löst und dann wird der Controller > getauscht und man muss bestenfalls nichts ändern, dann ist das in meinen > Augen eine gute Arbeit aber nicht weil man nun unbedingt das Problem > speziell mit einem Controller gelöst hat. Alles lässt sich auch nicht so > generisch lösen. Ist immer auch Abwägung. Es hängt immer noch von der > konkreten Situation ab. Pauschalisieren ist selten gut ;) Kommt immer darauf an was man will/braucht ... In meinem Fall bekomme ich alle 10µs einen externen Interrupt und lese dann einen 32bit wert über SPI ein. Das Wackeln des CSS mit IO Befehlen kostet viel mehr Zeit als die Benutzung des NSS Signales die dann bei der Bearbeitung fehlt.
Hans-Georg L. schrieb: > Kommt immer darauf an was man will/braucht ... 900ss D. schrieb: > Alles lässt sich auch nicht so generisch lösen. Ist immer auch Abwägung. > Es hängt immer noch von der konkreten Situation ab. ;)
:
Bearbeitet durch User
> Ok, wenn man Lust dazu hat, ist es auch ok. Das ist dann aber nicht > pragmatisch und das bezahlt auch keiner gerne. Auf dem > Hobbytisch wieder egal. Geld ist auch so eine Sache. Wenn es darum geht solltest du fuers Hobby eher einen groesseren Controller nehmen weil du dann nur einen lernen musst und den fuer alle deine Projekte verwenden kannst ohne jedes mal neue lernen zu muessen. Schliesslich wird hier kaum einer fuers Hobby mehr wie 10Controller pro Jahr brauchen und da wuerde ich mir lieber einen aus der Upperclass goennen als mit jeder Resource knausern zu muessen. In der Firma ist das so eine Sache. Bei Dingen die jedes Jahr >100t gefertigt werden nimmt man natuerlich gerne den billigsten. Bei irgendwelchen Sonderprojekten wo vielleicht ein paar tausend gemacht werden ist das aber teilweise absurder. Da kann es dann sein das es billiger ist du nimmst einen dicken Controller weil die Firma den in einem anderen Projekt 1Mio pro Jahr kauft, als eine kleine Sonderlocke von der du nur 1000 brauchst. Oder die Firma hat von irgendeinem noch 20000Tausend auf Lager der nicht mehr gebraucht wird weil das andere Projekt bereits ausgelaufen ist und der da sonst verschimmeln wuerde. Dazu kommen dann noch man andere absurde Nebenbedingungen, manchmal denke ich sogar Kaffesatzlesen gehoert auch irgendwie dazu. :-D Vanye
Nachdem hier eh "off-Topic" weiterdiskutiert wird... ...auch mal was für die "Datenblatt-Fetischisten"... Im ADS131M03-Datenblatt steht z.B.: "Words can be 16, 24, or 32 bits. The word size is configured by the WLENGTH[1:0] bits in the MODE register. The device defaults to a 24-bit word size. Commands, responses, CRC, and registers always contain 16 bits of actual data." ...dass auch bei "Commands, responses, CRC, and registers" nach den 16 genutzten Bits noch weitere 8 oder 16 "Leerbits" gesendet werden kommt - zumindest für mich - aus dem Text nicht wirklich klar zum Vorschein. Ja, ich gebe zu: Wegen dem "contain" ist der Text ja nicht direkt falsch - aber minimal detaillierter (z.B. "the rest is filled with zeros" o.ä.) - oder evtl. eine bessere grafische Darstellung der Diagramme könnte das "auf den ersten Blick" erkennbar machen... (.. nur "Wozu"?.. warum soll man denn seinen Kunden das Leben etwas erleichtern !?? ;-) => ohne Logic-Analyzer ist man da schon 'ne echt arme Sau! Ich habe in Datenblättern schon exterm viel gelesen - auch sehr viel haushohen Mist - und 100erte Stunden damit verbracht herauszufinden wie es wirklich geht. Aber wie sagte einst ein weiser Herr über die Datenblätter der Firma für die er selbst arbeitet: "...don't believe everything what's written in our datasheets..." Zudem noch @Vanye Der Philiosoph überrascht mit bemerkenstwert wirtschaftlicher Denkweise - Hut ab mal zwar dafür, aber... ...was mich jetzt schon genauer interessieren würde: Hast Du schon jemals mit dem H7 "gearbeitet", oder zumindest einem anderen STM32-Derivat? ... ... oder hast Du wenigstens mal in irgendein ST-Reference-Manual länger als 5 min reingeschaut? (Dein Vorschlag bezog sich ja auf das Datenblatt, und da steht bei ST derartiges niemals drin !?) Ist Dir vollkommen bewusst, dass z.B: das Wort "Event" in einem Kapitel des RM etwas vollkommen anderes bedeuten kann als in einem anderen Kapitel (2000 Seiten davor oder dahinter)? Kleiner Tip: "Event" kommt lt. PDF-Suche auf den 3556 Seiten 3338-mal vor! (rm0399-stm32h745755-and-stm32h747757-advanced-armbased-32bit-mcus-stmic roelectronics) Rein vom Inhalt kann meine ursprüngliche Frage eigentlich keine Noob-Frage (á là "...wie schließe ich eine LED an meinen Arduino an...") sein. Was bringt Dich also dann (falls Du die ST-RMs bestens kennen solltest) dazu eine derartige Antwort zu schreiben? Entweder weißt Du (fast) alles - auch die Antwort auf meine Frage => Warum schreibst Du dann nicht wie es geht => damit hättes Du einen wirklich coolen Auftritt gehabt!! ...oder...naja... ...Mikrocontroller.net-Forum eben.... ;-(
(...aus dem Urlaub zurück...) eine Erfolgsmeldung an alle: Generell ist das was ich vorhatte (siehe oben) möglich und funktioniert auch in der Tat ... !! (...leider nur "im Prinzip"... => !! ?? (s.u.)..) Was man braucht um es umzusetzen steht aber bei weitem nicht im Reference Manual ... - ...und im "Datenblatt" absolut überhaupt nie-und-niemals-nicht. Dummerweise kann ich es bei meinem Projekt aber leider doch (erst mal) nicht anwenden, da hierfür zwei "geeignete" Timer notwendig wären. Es sind leider nur weniger als die Hälfte der insgesamt 20 Timer des H7 dazu in der Lage... ...und diese wenigen möglichen Timer machen die mir schon wesentlich Wichtigeres! Daher bleibt erst mal leider nur die Interrupt-Lösung (=> deshalb das "...im Prinzip..." s.o.) Mit ein paar extra Bauteilen welche zusätzlich auf meine selbst erstellte Platine müssen wird es auch irgendwann in Zukunft ohne diese Timer funktionieren... ...aber für das PCB-ReDesign müssen erst noch ein paar andere (wichtigere) Sachen auf der ToDo-Liste auftauchen - bis ich mich daran mache... => solange muss die Interrupt-Lösung erst mal reichen. Ansonsten vielen Dank an Alle P.S.: Falls jdm. interessiert wie es geht: Hey: "Schaut einfach in's Datenblatt" (da steht es nicht drin) und fragt dann einfach hier im Forum - da wird es Euch auch bestimmt nicht gesagt - aber ihr erntet wenigstens Hohn, Spott und Verachtung - dafür sind Internet-Foren (zumindest deutsche) ja da !!
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.