Hallo Worin liegen eigentlich die Vortteile des dsPIC ? Für was sind die DSP Befehle gut ? MFG Patrick
Hallo Patrick, es ist immer die Frage, was man mit einem Prozessor machen will. DSP Befehle sind leistungsfähige mathematische Methoden zur digitalen Sighnalverarbeitung und meistens Befehle, die - wenn sie nicht vorhanden wären - durch andere Befehle nur aufwändig zu ersetzen wären. Wenn man keine aufwändigen mathematischen Berechnungen machen möchte, ist man mit einem DSP auch nicht unbedingt gut beraten. Wenn man aber z.B. eine FFT oder Korrelation oder Faltung auf dem Prozessor rechnen muss, hat es enorme Vorteile, wenn man dazu mächtige DSP Befehle hat. Ein wichtiger solcher Befehl ist z.B. MultiplyAccumulate, der eine Multiplikation und anschließende Addition in einem Befehl ausführt. Es gibt aber noch viele andere und vor allem dann bei leistungsfähigeren (nicht mehr dsPIC) Prozessoren noch erheblich mächtigere Befehle. Der dsPIC hat - im Vergleich zu anderen DSPs - den Vorteil, dass er relativ schlank und somit leicht zu erlernen ist. Außerdem gibt es dsPICs die noch mit 5 Volt laufen, was das "Hobbybasteln" etwas erleichtert, wenn man keine 1,8V braucht. Der dsPIC ist ein Mikrocontroller, hat alo sämtliche Peripherie, die man üblicherweise braucht, damit der Prozessor läuft, schon eingebaut und kann deshalb praktisch standalone laufen, was mit großen DSPs oft nicht möglich ist. Wenn es dich speziell interessiert, was genau an einem dsPIC leistungsfähig ist, dann steht das im jeweiligen Datenblatt. Viele Grüße, Peter
Und wie sind dann die DSP bei der Programmierung ? Optimmiert der Compiler von allein den Code für die DSP-FUnktionen ? Oder gibt es extra Befehle für C die für die optimale nutzung der Funktionen vorhanden sind? MFG Patrick
Patrick Weinberger wrote: > Optimmiert der > Compiler von allein den Code für die DSP-FUnktionen ? Nein. > Oder gibt es extra > Befehle für C die für die optimale nutzung der Funktionen vorhanden > sind? Auch nicht, da die DSP Funktionen spezielle Register verwenden. Microchip bietet aber fertige Libs mit allem möglichen aus der Bereich der Signalverarbeitung. Das sind z.B. FFT, PID Regler, Vektoroperationen und sehr vieles mehr. Falls es mal nichts passendes gibt, muss man eben die entsprechende Routine in Assembler schreiben (was erstaunlicherweise recht einfach und kompakt ist, da es viele sehr mächtige Befehle gibt, die man ansonsten nur bei einem CISC findet. Aber auch von den DSP Befehlen abgesehen sind die dsPICs ordentlich schnell, da sie nahezu alle Befehle in einem Takt abarbeiten.
In der Regel ist es so, dass der Compiler die DSP Befehle schon einsetzt, aber nur, wenn er versteht, wie der Quellcode zu einem Befehl zusammengefasst werden kann. Nimm an, du multiplizierst zwei Vektoren 2 1;3;5 * 5 7 Da kommt natürlich 52 raus. Aber wie rechnet man das in C? Entweder so: int a1, a2, a3, b1, b2, b3, c, d, e, ergebnis; a1=1; b2=3; c3=5; b1=2; b1=5; b1=7; c=a1*b1; d=a2*b2; e=a3*b3: ergebnis = c + d + e; Hier wird zuerst normal multipliziert und dann die Ergebnisse aufaddiert. Hier ist dann die Frage, ob der Compiler versteht, dass die Zwischenergebnise nicht benötigt werden, besonders, wenn man deren Variablen an anderer Stelle wiederverwendet. Besser ist es so: ergebnis = a1 * b1; ergebnis += a2 * b2; ergebnis += a3 * b3; Das wird mit Sicherheit in optimierten DSP Code umgesetzt, also multiplyAccumulate genutzt. Wie stark der Compiler optimiert, kommt immer darauf an, ob er was taugt und ob der Programmierer weiß, wie er den code optimal hinschreiben muss, so dass der Compiler versteht, wie optimiert werden kann. Bei guten Compilern sind etliche hochoptimierte Mathematikbibliotheken dabei, die man aus dem C-Code heraus aufruft, die dann auch die entsprechend optimalen DSP-Befehle nutzen. Der Sprachumfang von C wird dabei in der Regel nicht erweitert, man ruft halt eine Funktion auf, die in einer Bibliothek definiert ist. Ich verwende für die Pics und dsPics den Compiler von CCS, der optimiert in der Regel sehr gut. Der Compiler von Microchip hat bei einer direkten Gegenüberstellung damals schlechter abgeschnitten und war auch in der Handhabung schwieriger. www.ccsinfo.com Peter
Peter Diener wrote: > Ich verwende für die Pics und dsPics den Compiler von CCS, der optimiert > in der Regel sehr gut. Der Compiler von Microchip hat bei einer direkten > Gegenüberstellung damals schlechter abgeschnitten und war auch in der > Handhabung schwieriger. Ich habe noch nie mit dem CCS gearbeitet, sondern nur mit dem C30 von Microchip, der meist sehr gut optimiert, auch wenn er keine DSP Befehle verwendet. Der CCS ist dagegen diesem Thread nach eine Katastrophe: Beitrag "PIC24 @ 80MHz und Timer1 zu langsam?"
Hab mir den Thread grad mal durchgelesen, da sind aber einige Optimierungen nicht an bei dem CCS. Es gibts da Compileranweisungen, dass er nicht immer die TRIS Register setzt, wenn man die Ports setzt und nicht alle Register sichert im Interrupt, sondern nur die gebrauchten. Dann sieht das schon gleich ganz anders aus. Peter
Nachteile dsPIC Im vergleich zu anderen DSP´s läuft die DSP Logik nicht parallel zum normalen Prozessor, sondern die DSP-Funktionen sind erweiterungen des Befehlssatzes des Prozessors. Also der dsPic ist kein richtiger DSP, sondern ein PIC, der um DSP Funktionen erweitert wurde. Trotzdem, die Libs, welche von Microchip zur Verfügung gestellt werden, sind beeindruckend, angefangen von PID, ... bis hin zur Spracherkennung und darüber hinaus.
Also würden diese "Erweiterungen" zB beim Berechnen von Sinuswerten eine enormen Performance Vorteil bringen gegenüber einem normalen µCs ?
Bei der Berechnung von Sinuswerten würde dir vor allem ein DSP mit Fliesskommarechnung einen enormen Vorteil bringen.
Da kommt mir noch eine Frage wie rechnet man mit Fixkomma DSP ? Was bedeutet eigentlich das Fixkomma ? MFG Patrick
A. K. wrote: > Bei der Berechnung von Sinuswerten würde dir vor allem ein DSP mit > Fliesskommarechnung einen enormen Vorteil bringen. Fließkommaberechnungen auf einem dsPIC sind meiner Meinung nach auch in Software erstaunlich schnell (was vermutlich u.a. an den vielen, Arbeitsregistern liegt). Es wurde sogar mal ein programmierter dsPIC als mathematischer CoProzessor verkauft: http://www.awce.com/pak1.htm Eine Berechnung von 256 Sinuswerten inkl. Skalierung auf 16bit Festkomma benötigt etwa 32ms bei rund 25MIPS. Zum Vergleich: Eine FFT mit den 256 Werten benötigt bei 25MIPS rund 0,8ms. Patrick Weinberger wrote: > Da kommt mir noch eine Frage wie rechnet man mit Fixkomma DSP ? Was > bedeutet eigentlich das Fixkomma ? Festkomma ist nichts anderes als das Rechnen mit Ganzzahlen und eine entsprechenden Skalierung. Man verwendet dazu z.B. 16bit signed integer mit dem Bereich -32768 bis 32767 und definiert -32768=1. So erhält man den Bereich -1 bis 0.99997. -0,5 sind daher -16384 usw.
> Worin liegen eigentlich die Vortteile des dsPIC ? Gegenüber was? Verglichen mit wem? Verglichen mit einem LKW ist er bedeutend leichter zu verstauen, er braucht weniger Treibstoff als ein A380, das sind die wirklichen Vorteile. @ Patrick Weinberger (seennoob) Im Ernst: deine Frage ist nicht vollständig ausformuliert ;-) > Was bedeutet eigentlich das Fixkomma ? Der ADSP2181 (2100-Familie) ist ein Festpunkt DSP. Das Handbuch zu diesem Prozessor beschreibt sehr schön die Berechnungen mit Festpunktzahlen. Benedikt K. (benedikt) wrote: > So erhält man den Bereich -1 bis 0.99997. Und der Vorteil hier ist: bei einer Multiplikation von zwischen -1 und +1 kommt immer auch eine Zahl zwischen -1 und +1 heraus.
Dann mal so formuliert welche Vorteile hat eine dsPIC gegenüber einem normalen PIC ? Naja also ich versteh so halbwegs alles. Danke an euch allen MFG Patrick
Patrick Weinberger wrote: > Dann mal so formuliert welche Vorteile hat eine dsPIC gegenüber einem > normalen PIC ? Wenn ich mir den Code ansehe, den ein C Compiler für 8bit PICs (16,18) produziert, dann kommt mir stets das kalte Grausen. Bei den PIC30 nicht. Was aber mit dem "ds" vorneweg nichts zu tun hat. PIC30(24,33) ist zwar eine etwas eigentümliche aber für C gut nutzbare Architektur. Dass da auch DSP drin ist, das kann nützlich sein, kann man aber auch ignorieren wenn nicht nötig. Hat Microchip dann auch gemerkt und drum gibt's die PIC24 praktisch identisch ohne DSP (PIC24 = dsPIC33 ohne oder wohl eher mit abgeschaltetem DSP). Wobei sich die in die Architektur integrierte Fähigkeit zum DSP allerdings bei Aufwand/Taktfrequenz/Stromverbrauch etwas in den Weg gestellt hat, denn Mem=>Mem in einem Zyklus gibt es nicht gratis. Und es ist auch nicht wirklich genial, den Multiplier zu verwenden um auf schnellstmögliche Art 2 Nullen in Register zu laden.
Ich hab mir grad mal das Datenblatt des PIC24 angesehen da steht was von FIFO beim SPI. Was ist den jetzt dieser FIFO genau ? MFG Patrick
Ein FIFO ist ein sog. Firtst In First Out Speicher. SPI hat ja eine bestimmte Bitrate, die oft geringer ist als der Prozessortakt. Nun gibt bei einem normalen SPI der Prozessor die zu sendenden Daten in das Senderegister, was normal 1 byte groß ist. Währen die Daten gesendet werden, kann er entweder warten, oder was anderes machen. Wenn das gesendet ist, kann er was neues in das Senderegister füllen. Um diesen Zeitpunkt zu melden, nimmt man normalerweise Interrupts, d.h. der Prozessor wird bei seiner Hintergrundtätigkeit unterbrochen, wenn er das Senderegister füllen kann. Wenn man jetzt z.B. einen FIFO mit 16 Byte vor dem Senderegister hat, kann man gleich 16 Byte auf einmal reinschreiben, die automatisch sequentiell in das Senderegister nachgeschoben werden und wird deswegen nicht so oft im Hauptprogramm unterbrochen. Das gleiche gilt auch für den Empfang von Daten. Richtig komfortabel wird es, wenn die FIFOs so groß sind, dass die ganze Nachricht, die man senden will, drin Platz hat, bei einem PC z.B. kann man Karten für serielle Schnittstellen einbauen, die 1kB FIFO haben.
Peter Diener wrote: > Richtig komfortabel wird es, wenn die FIFOs so groß sind, dass die ganze > Nachricht, die man senden will, drin Platz hat Bei einem dsPIC33 bietet sich dafür der DMA Controller an. Der Speicher dazu ist 1-2kByte groß und der DMA Controller kann im Hintergrund Daten von/zu beliebiger Peripherie übertragen.
Ist es auch möglich das DMA Controller nach einer Änderung an einem PIN daten auf einen Port legt ?
Prinzipiell ja. Für einen DMA Transfer ist ein Interrupt notwendig. Dies kann z.B. der externe Interrupt oder auch ein Input Capture Interrupt sein.
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.