Als ersten Mikrocontroller habe ich vor vielen Jahren den PIC16F84
kennen und hassen gelernt. Dann habe ich die Mega AVRs verwendet und sie
waren einfach toll. Nun kam es aber, das ich mal für ein Projekt 4 16
Bit PWM Kanäle brauchte und geschaut habe, ob es denn nicht einen
Controller gibt, der das in Hardware hat. Bei Reichelt habe ich dann den
PIC24FJ64GA002 gefunden, für 3,35€. (Die Version mit weniger Flash gibts
schon für 2,40€.)
Zuerst war ich sehr skeptisch aufgrund der schlechten Erfahrungen mit
PICs in der Vergangenheit. Aber der Controller ist einfach toll!
Also es ist ein 16 Bit Controller, der auch mit dem internen
RC-Oszillator mit den vollen 32MHz betrieben werden kann! Allerdings
brauchen die Befehle mindestens 2 Takte, so dass effektiv etwas weniger
als 16MIPS rauskommen. Der Controller ist im bastelfreundlichen DIL 28
Gehäuse erhältlich. Er hat Interruptprioritäten! Der AD-Wandler kann in
einen (kleinen) Puffer sampeln. (Mehrere auswählbare Kanäle oder nur ein
Kanal mehrmals.) Er kann Interrupts auslösen wenn sich der Zustand eines
Pins ändert und hat 5 16 Bit Timer, die zu 2 32 Bit Timer kombiniert
werden können.
Aber das beste Feature dieses Controllers ist eine INTERNE MATRIX FÜR
DIE PERIPHERIEFUNKTIONEN!!! D.h. intern kann z.B. die Matrix per
Software so geschaltet werden, das die PWM Ausgabe eines Kanals
gleichzeitig an 3 Pins ausgegeben wird. Oder man kann sich z.B. die UART
und SPI Signale an die Pins legen, die vom Layout am besten passen!!!
Das ist echt genial, vor allem für Bastler, die selbstgemachte
einseitige Platinen bevorzugen.
Wenn dir die PIC24F schon gefallen, dann schau dir mal die PIC24H oder
die dsPIC33 an. Das sind im Prinzip die gleichen Controller nur mit
40MIPS und (bei den 33ern) mit einem DSP Core).
... schrieb:
> Zuerst war ich sehr skeptisch aufgrund der schlechten Erfahrungen mit> PICs in der Vergangenheit. Aber der Controller ist einfach toll!
Ein bischen störend ist die recht lange Bugliste vieler Modelle.
> Das ist echt genial
Ich ahne den Grund. Die älteren dieser Baureihe, die dsPIC30, haben eine
teilweise derart bescheuerte Mehrfachbelegung der Pins (z.B. CAN und
Programmierinterface auf den gleichen Pins), dass Microchip sich von den
Kunden wohl ziemlich was anhören musste und in der nächsten Runde die
Flucht nach vorne angetreten ist.
Ausgangsmatrix klingt seeehr verlockend!
Ist die wirklich komplett frei belegbar (ausser den Versorgungs- und
Taktleitungen) oder gibt es diverse Einschränkungen?
Gruß,
Jens
Viele Pins der spezialisierten Peripheriemodule wie Timer,SPI,UART,...
laufen über die Matrix, aber nicht alle. Beispielsweise nichts vom ADC
und auch nicht die GPIO.
Gut, die GPIO selbst nicht, also z.B. PORTA.6 bleibt meinetwegen Pin 6
aber was ich festlegen kann ist dass SPI.clk auf PORTB.3 geht, oder dass
TX auf PORTC.4 kommt statt auf irgendwas festgelegtes?
Stimmt das so?
Gruß,
Jens
Moin,
und der kostenlos verfügbare Compiler ist welcher? Ok, darf auch was
kosten, aber bitte im Rahmen.
Das Gewürge mit PIC Assembler ist das LETZTE, einen µC ohne vernünftigen
Compiler fasse ich jedenfalls nicht mehr an.
--
SJ
Mikrochip bietet den C30 für privaten Einsatz kostenlos. Es fehlt
gegenüber der Vollversion ein bischen Optimierung und ist seitens
Microchip eine Gratwanderung, denn technisch ist das der bekannte GCC
plus ein herstellerspezifischer Optimierungslauf. Ist verwendbar.
Programmierung und Debugging läuft über die gleiche Technik und Hardware
wie bei den 8bit PICs.
Transistorfreak schrieb:
> Mein neuer Lieblingstransistor ist der 2N3055...
Was ist daran denn neu?
Den hatte ich damals schon zu DDR-Zeiten eingesetzt (von Tungsram).
Peter
Die GPIO über eine Matrix zu führen macht nicht viel Sinn, weil die ja
eh alle gleich sind. Bei den AD Eingängen ist es ähnlich, man hat ja 12
gleichwertige zur Verfügung.
Ich hab noch nicht nachgeschaut, ob Microchip den Sourcecode für ihre
Erweiterungen zum GCC alle veröffentlicht haben. Wenn nicht, dann wäre
das nach meiner Meinung eine Verletzung der GPL. Ansonsten optimiert die
eingeschränkte Version ja trotzdem, wie der normale GCC ja auch.
Apropos Bugs: da gibt es einen Bug in der PWM Hardware. Man darf den
Wert 1 nicht verwenden, sonst liegt für einen Timer-Zyklus der Ausgang
auf high. Ich hab da mal ein Java-Applet geschrieben, das das beachtet
und den Wert 1 nicht mit in die PWM Tabelle schreibt, sondern auf oder
abrundet. ;-)
http://aaabbb.de/JNumberTableMaker/pwm_sine_function_table_maker.html
... schrieb:
> Ich hab noch nicht nachgeschaut, ob Microchip den Sourcecode für ihre> Erweiterungen zum GCC alle veröffentlicht haben. Wenn nicht, dann wäre> das nach meiner Meinung eine Verletzung der GPL. Ansonsten optimiert die> eingeschränkte Version ja trotzdem, wie der normale GCC ja auch.
Dieser Optimizer ist ein spezieller Compiler-Pass, der als separates
Programm abläuft. Damit unterliegt er nicht der GPL.
Wie das mit den Steuerprogram selbst aussieht (dem was sonst
üblicherweise "gcc" heisst), das die Passes, den Assembler, Link etc
aufruf, das weiss ich nicht. Jedoch muss da was drin enthalten sein, was
dies einbindet und die Lizenz überprüft. Und abhängig davon die
Compilerflags durchschaltet und den Optimizer-Pass einbindet, wobei
meiner Erinnerung nach ohne Vollversion auch ein paar normale GCC
Optimierungen dran glauben müssen.
Die Lizenzprüfung selbst erfolgt wieder mit einem externen Programm und
ist nicht ins GCC direkt eingebunden. Auch hier man damit wohl
GPL-sicher, aber möglicherweise nicht ganz hacking-sicher.
... schrieb:
> Apropos Bugs: da gibt es einen Bug in der PWM Hardware.
Das ist leider nicht der einzigste.
Besondern dumm sind Fehler im Datenblatt wie z.B. beim ADC Clock
Prescaler: Dieser ist laut Datenblatt 8bit groß, in der Praxis aber
leider nur 6bit (zumindest bei den dsPICs, bei den 24F habe ich das noch
nicht nachgeprüft). Hat mit etliche Stunden gekostet das rauszufinden.
Mein neuer Lieblingswiderstand ist der 450 OHM, weil der so Farbringe
hat.
...und wenn man genug Strom draufgibt, dann ändern die sogar die Farbe
und der Widerstand verschwindet im Nirvana der Matrix!
Iss datt nich geil, ey?!?!?
Enter The Matrix.
Ausgangsmatrix...warum haben eigentlich die AVR sowas nicht? Es müsste
ja keine Alles-Auf-Alles-Matrix sein, aber beispielsweise gewisse
Peripherie auf beliebige Pins mappen wäre schon nützlich...
Na dann schau Dir doch mal das Pinout vom XMega an. Das ist dermaßen
genial geordnet, daß es keine Matrix braucht. Jeder Pin ist auch in
Hardware invetierbar, was besonders bei UART und PWM Bauteile spart oder
ganz neue Moglichkeiten, wie Differentialmodulation eröffnet. Es gibt
separate Register für Pinsetzen, Pinlöschen und Pintoggeln. Ganz zu
schweigen von der restlichen Peripherie. Und die Bugliste ist inzwischen
auch recht kurz. Mein Lieblingscontroller ist der XMega128-A1.
mr.chip schrieb:
> Ausgangsmatrix...warum haben eigentlich die AVR sowas nicht? Es müsste> ja keine Alles-Auf-Alles-Matrix sein, aber beispielsweise gewisse> Peripherie auf beliebige Pins mappen wäre schon nützlich...
Mal geraten:
- A/D-Wandler und Analogkomparator gehen wohl wegen Störsignalen nicht
so einfach (und ist ja eh ein Eingang und kein Ausgang)
- SPI wird für die Programmierung gebraucht und kann man nicht einfach
weglegen.
- Falls die o.g. Vermutung stimmt, dann kann man auch I2C nicht verlegen
- Die Quarz-Anschlüsse sind wohl auch etwas spezieller und sollten nicht
ewig weit geführt werden.
- GPIO geht sowieso auf allen Ports.
Damit bleibt nicht viel übrig. UART und die Timer-Geschichten (PWM und
so). Ob sich das lohnt?
> Damit bleibt nicht viel übrig. UART und die Timer-Geschichten (PWM und> so). Ob sich das lohnt?
Umso mehr! Schliesslich wird dann die Matrix nicht mehr so komplex und
es reicht im Prinzip auch, wenn man nur ein paar
Vertauschungsmöglichkeiten hat, um das Layout zu vereinfachen.
Zudem bezweifle ich, dass ADC/Analog Comparator nicht über die Matrix
geführt werden können - intern werden sie ja auch gemuxt. Das Problem
bei I2C sehe ich aber nicht.
Solch eine Matrix nett, aber unnötig. Jedes Layout kann auf bestehende
Pinouts angepaßt werden. ATMegas werden deshalb nicht nochmal neu
designt und ob es bei den neuen Chips kommt, ist fraglich. Ich denke,
beim XMega ist man schon einen Schritt vorangegangen.
>Vertauschungsmöglichkeiten hat, um das Layout zu vereinfachen.
Das spielt im profesionellen Umfeld keine so grosse Rolle. Hier werden
eher 2-Seitige oder Multilayerpaltinen eingesetzt. Und fuer
Hobby-Elektroniker die meistens 1-Seitig machen werden die das wohl
nicht machen.
Gruss Helmi
Markus Kaufmann schrieb:
> - SPI wird für die Programmierung gebraucht und kann man nicht einfach> weglegen.
SPI wird nicht für die Programmierung gebraucht und lässt sich verlegen.
Das ist doch kein AVR.
> - Falls die o.g. Vermutung stimmt, dann kann man auch I2C nicht verlegen
Hatte ich schon erwähnt.
> Damit bleibt nicht viel übrig. UART und die Timer-Geschichten (PWM und> so). Ob sich das lohnt?
2x SPI, jede Menge Timer-Pins, 2x UART, externe Interrupts, ...
Bei dem oben betrachteten 28pin Zwerg sind das 23 Inputs und 17 Outputs,
also 40 Funktionspins!
A. K. schrieb:
>> - SPI wird für die Programmierung gebraucht und kann man nicht einfach>> weglegen.>> SPI wird nicht für die Programmierung gebraucht und lässt sich verlegen.> Das ist doch kein AVR.
Doch es ist einer:
>mr.chip schrieb:>> Ausgangsmatrix...warum haben eigentlich die AVR sowas nicht?
Vor allem bei dem mega8 habe ich mir sowas schon oft gewünscht, denn
wenn man den UART verwendet hat man keinen 8bit Port mehr frei.
Ebenso kommen sich SPI und die OC1x Ausgänge in die Quere.
Ein weiterer Vorteil ist, dass man problemlos mehr Peripherie in ein
Device packen kann, als Pins vorhanden sind. Man wird nie alles davon
benötigen, aber dennoch könnte man von ein paar Sachen (UART, Timern,
SPI) mehr gebrauchen als vorhanden sind.
Die Matrix ist auf jeden Fall eine geniale Sachen.
Nein, der Vorteil ist doch ein anderer. Für gewöhnlich sind doch genau
die Peripheriefunktionen, die man für ein Projekt braucht, vom
Hersteller auf den selben Pin gelegt, weil es halt mehr Peripherie als
Pins gibt. Das passiert auch bei Atmel. Mit dieser Matrix ist man jetzt
doch recht flexibel und kann sich quasi seinen Controller mit den
benötigten Funktionen selber zusammenstellen. Also kein Fluchen mehr,
weil der Hersteller die I2C und RS232 auf den selben Pin gelegt hat. Ich
find es gut.
Travel Rec. schrieb:
> Solch eine Matrix nett, aber unnötig.
Wenn man die Mehrfachfunktionen so legt, dass keine Konflikte auftreten.
Bei 100pinnern nicht wirklich ein Problem, aber bei 18/28pinnern mit 40
möglichen Pinfunktionen (s.o.) nicht mehr so ganz einfach. Irgendwem
tritt man dabei immer auf die Füsse.
Es gibt dsPIC30, bei denen auf den gleichen Pins sowohl die
Programmierpins als auch die CAN-Pins liegen (und noch ein bischen
mehr). Da ein CAN-Transceiver seinen Rx-Pin nicht abschalten kann ist
das ohne irgendeine hardwaremässige Umschaltung nicht handhabbar.
Benedikt K. schrieb:
> Doch es ist einer:
Ok, in dem Kontext war evtl. einer gemeint. Aber so ganz... Der Mega128
hat ISP nicht auf den SPI-Pins sitzen, wie mancher erst nachträglich
gemerkt hat.
Andersrum betrachtet: Microchip kann einen Controller etwas grösserer
Komplexität rausbringen, wo die Konkurrenz diverse spezialisierte
Modelle mit unterschiedlichen Periphieriefunktionen braucht.
Und wenn man sich die Pinouts dieser Microchipper mal genau ansieht,
dann stellt man fest, dass in diversen Gehäusen unterschiedlicher
Pinzahl offensichtlich der gleiche Chip drinnen steckt. Bei festgelegter
Pinzuordnung ist das kaum sinnvoll realisierbar.