Hallo
Ich möchte für meine Modellbahn in die PIC Programmierung einsteigen.
Ich habe viele Beispiele und Projekte gesehen, die mit PIC12/16 u.s.w.
gemacht sind.
Da es aber einen kostenlosen C Compiler von Microchip nur für die PIC18
Familie gibt, würde ich mich auch gerne NUR damit befassen.
Z.B. PIC18F2520
Kann ich mit dem oder anderen PIC18 denn alles erledigen, was die
PIC10..16 auch können? Oder gibt es irgendeinen Grund, diese PICs auch
noch verwenden zu müssen?
Danke und Gruß
Thomas
>Kann ich mit dem oder anderen PIC18 denn alles erledigen, was die>PIC10..16 auch können? Oder gibt es irgendeinen Grund, diese PICs auch>noch verwenden zu müssen?
Ja, die koennen alles und noch mehr. Die PIC16 sind fuer kostenguenstige
Massenprodukte gedacht. Fuer den Einstieg sind die PIC18F zeitgemaesser
und einfacher.
Mit einem PIC18 anzufangen ist bestimmt nicht die schlechteste Idee.
Später wirst Du sicher für jedes Projekt den am besten geeigneten PIC
heraussuchen. Die Unterschiede zwischen den PICs 10...18 sind nicht
übermäßig groß. Annähernd kann gesagt werden, je höher die Nummer, desto
leistungsfähiger sind die PICs. Bei großen Projekten kommen dann auch
die PIC24 und PIC32 ins Spiel.
Horsti schrieb:> Die Unterschiede zwischen den PICs 10...18 sind nicht> übermäßig groß.
Die Unterschiede sind schon sehr groß, z.B. hat der PIC10 nichtmal
Interrupts. Andere Unterschiede sind der Stack und das Banking. Deshalb
kann auch nicht jeder C-Compiler alle PICs.
Wenn es nicht um riesen Stückzahlen geht, bleib besser bei einer
PIC-Familie, das schont die Nerven.
Besser skalierbar sind die AVRs, da hat auch der 6-Pinner die gleiche
Architektur wie der 100-Pinner und daher geht auch der Compiler für alle
AVRs uneingeschränkt. Ab 8 Pins und 2kB Flash kannst Du z.B. float
Zahlen verwenden.
Peter
Peter Dannegger schrieb:> Besser skalierbar sind die AVRs, da hat auch der 6-Pinner die gleiche> Architektur wie der 100-Pinner und daher geht auch der Compiler für alle> AVRs uneingeschränkt. Ab 8 Pins und 2kB Flash kannst Du z.B. float> Zahlen verwenden.
Und schon wieder werden Äpfel mit Birnen verglichen:
Mit den ganz kleinen PICs werden häufig nur einfache Logik-Funktionen
erzeugt und dann auch sinnvoller Weise in Assembler programmiert. Je
größer die PICs werden, desto mehr Compiler stehen zur Verfügung. Dann
gibt es zum Beispiel fertige Lösungen für FFT-, MP3- oder
Ethernet-Anwendungen.
Das Argument mit der gleichen AVR-Architektur stimmt auch nur stark
eingeschränkt (z.B. besitzt Dein 6-Pinner wohl kaum eine DMA) und ist in
der Praxis nicht unbedingt relevant.
Peter Dannegger schrieb:> Horsti schrieb:>> Die Unterschiede zwischen den PICs 10...18 sind nicht>> übermäßig groß.>> Die Unterschiede sind schon sehr groß, z.B. hat der PIC10 nichtmal> Interrupts. Andere Unterschiede sind der Stack und das Banking. Deshalb> kann auch nicht jeder C-Compiler alle PICs.> Wenn es nicht um riesen Stückzahlen geht, bleib besser bei einer> PIC-Familie, das schont die Nerven.
Ja,
die Unterschiede sind schon da...
16F und 18F zum Bleistift sind unterschiedliche Architekturen mit
abweichenden Eigenschaften.
Wobei wie schon geschrieben je größer die Nummer der Familie um so
umfangreicher die Möglichkeiten. Was man z.B. mit einem 16F Pic kann,
das schafft ein 18F Pic locker... - Natürlich aber nur wenn die
Peripherie und Pinnzahl auch für die anforderung passt ;-)
18F sind für die Anfänger in C heute wohl die beste Wahl. Wer aber mit
ASM Anfangen will sollte vieleicht doch die ersten Schritte mit einem
16F machen...
Nachteilig finde ich allerdings das es die 18F nicht in ganz kleinen
Gehäusen gibt... Wer 6Pinner braucht muss andere Familien nehmen.
Peter Dannegger schrieb:> Besser skalierbar sind die AVRs, da hat auch der 6-Pinner die gleiche> Architektur wie der 100-Pinner und daher geht auch der Compiler für alle> AVRs uneingeschränkt. Ab 8 Pins und 2kB Flash kannst Du z.B. float> Zahlen verwenden.
Naja, hätte Microchip ja auch machen können. Einfach die
Weiterentwicklung im 8Bit Bereich einstellen und heute immmer noch nur
veraltete Kerne anbieten...
Aber man hat sich glücklicherweise anders entschieden ;-)
Den kleinen Mehraufwand im Projektfester bei den Einstellungen vom C
Compiler für 18F auf C Compiler für 16F umzustellen nehme ich gerne in
Kauf wenn ich dafür die wesentlich größere Vielfalt an Peripherie und
lieferbaren Gehäusevarianten bekomme. Von der Verfügbarkeit auch bei
spezielleren Modellen mal ganz abgesehen, die bei Microchip einfach
DEUTLICH besser ist. Sowohl bei einzelstückzahlen wie auch bei Mengen
deutlich größer 1000 Stück.
Aber jedem das seine...
Gruß
Carsten
BTW: Es gibt von Microchip auch für die 16F einen kostenlosen C
Compiler.
Horsti schrieb:> Mit den ganz kleinen PICs werden häufig nur einfache Logik-Funktionen> erzeugt und dann auch sinnvoller Weise in Assembler programmiert.
Warum soll es sinnvoll sein, die Programmiersprache wechseln zu müssen,
nur weil die Anwendung kleiner ist?
Ich finde es sinnvoller, auch den 6/8/14-Pinner in C zu programmieren.
Man ist produktiver und kann auch Routinen einfach übernehmen.
Horsti schrieb:> Das Argument mit der gleichen AVR-Architektur stimmt auch nur stark> eingeschränkt (z.B. besitzt Dein 6-Pinner wohl kaum eine DMA)
Nun, hier ging es ja konkret um die PIC10..18 und die sind recht gut mit
der standard AVR-Familie (ATtiny, ATmega) vergleichbar.
Welcher PIC10..18 hat denn DMA?
Peter
Peter Dannegger schrieb:> Warum soll es sinnvoll sein, die Programmiersprache wechseln zu müssen,> nur weil die Anwendung kleiner ist?
Vielleicht weil jede Programmiersprache ihre Stärken und Schwächen hat?
Peter Dannegger schrieb:> Nun, hier ging es ja konkret um die PIC10..18 und die sind recht gut mit> der standard AVR-Familie vergleichbar.> Welcher PIC10..18 hat denn DMA?
Da die Microchip-Oberfläche MPLAB durchgängig vom PIC10xx bis PIC32xx
verwendet wird, kannst Du bei diesen µCs den Kreis mit gutem Gewissen
deutlich größer ziehen. Je nach persönlichen Vorlieben stehen Dir darin
mehrere Compiler (die alle recht gut funktionieren und mit vielen
Applikationsbeispielen unterstützt werden) zur Verfügung. Je nach
Anwendung kannst Du innerhalb dieses Kreises zwischen vielen 100
Produkten wählen und wenn gewünscht, natürlich auch eine DMA verwenden.
Bei Pic unterscheided man zwischen 12/14/16/24/32 Bit Instruktionsgröße.
Z.B. gibt es 12(C/F) Typen, welche 14er sind, aber aus Marketinggründen
in
12er Serie reingepasst werden usw.
12 Bit : Kein Interrupt, Kein Return, sondern nur retlw, 2 return levels
14 Bit : Interrupt, 8 return levels (gosub)
16 Bit : HW Multiplier, mehr return level, stackpointer accessible,
simple banking. Es gibt auch außnahmen, also nicht alle haben das
24 Bit : 16bit + DSP
32 Bit : Mips cpu
Bei den 18F (16bit) sind die K/J Typen nicht 5V tauglich.
Auch wird die Flashgröße sehr unterschiedlich gezählt, z.B. 14 Bit
k=k instructions. 16 Bit, k=byte = k*2, neueres Marketing von 14 Bit,
k=k*1.5
Die 14 Bit cpu ist mit der 12Bit opcode kompatibel.
Die 16 Bit cpu ist mit der 14/12bit asm code kompatibel.
USB sowie Ethernet sind erst ab 16Bit richtig verfügbar.
In der Praxis sieht der Umgang mit den PICs wie folgt aus:
1) Anforderung an PIC aus Applikation extrahieren
2) PIC gemäß Anforderungen auswählen
3) ggf. Compiler auswählen
4) Schaltung mit PIC verifizieren
(spezielle Eigenschaften des gewählten PICs beachten)
5) PIC nach Softwarepflichtenheft programmieren
6) Inbetriebnahme
7) Testen (incl. CE-, SIL-, UL-, TÜV-, etc.-Anforderungen)
8) ggf. Serie starten und Kunde(n) glücklich machen
9) sich freuen, auch wenn nach über 10 Jahren der vom Kunden
zerschossene
PIC noch kurzfristig zu bekomnmen ist
Also solange man die PICs in einer Hochsprache (z.B. C) programmiert,
sind die grundlegenden Unterschiede zwischen 12F, 16F und 18F fuer die
meisten Anwendungen minimal. Z.B. 18F hat zwei Interruptprioritaeten
(sehr praktisch!), 16F nur eine - aber wenn man mal begriffen hat, was
ein Interrupt ist, dann ist sowas auch nicht weiter schwer. Was bei den
12F und 16F manchmal stoert ist die Fragmentierung des RAMs durch das
Banking - das kann aergern wenn der PIC 256 Byte Speicher hat aber das
groesste Array, das man anlegen kann, max. 64 Byte umfassen kann. Der
18F hat dieses Problem nicht.
Der 18F4520 (oder 2520 wenn man nicht so viele Pins braucht) ist eine
prima Wahl fuer den Einstieg und von der Leistung mit den ueblichen
Atmegas zu vergleichen.
Wenn man mal unbedingt einen uC mit weniger Pins (<18) braucht, dann
muss man 12F oder 16F verwenden.
Fuer den Hobbybastler - der selten tausende Stueck braucht - ist der
letzte Cent normalerweise nicht so wichtig, also nimmt man stets eher
den leitungsfaehigsten (RAM etc.) Typ im jeweiligen Gehaeuse. IMHO eine
gute Wahl ist:
8 pins: PIC12F683
14 pins: PIC16F684
18 pins: PIC16F88 (gibt's inzwischen aber schon bessere)
28 pins: PIC18F2520
40 pins: PIC18F4520
20 pins mit USB: PIC18F14K50
28 pins mit USB: PIC18F2550
40 pins mit USB: PIC18F4550
Fuer mehr Rechenleistung (~30 MIPS und 16 bit, die 18F hat max. ca. 12
MIPS un 8 bit) dann dsPIC30F-Serie (die kann noch mit 5V arbeiten und
gibt's in DIP) oder 33F bzw. 24F (weniger Auswahl fuer DIP, und max.
3.3V). Schon etwas haariger zu benutzen (kann schon ein bisschen
brauchen, bis man z.B. die Interrupt-Tabellen durchschaut hat :-) aber
am Ende auch schaffbar.
Wolfgang
Achja, wegen Rechenleistung: MIPS alleine sagen wenig aus. 10 MIPS mit
16 Bit Datenbreite sind nicht 10 MIPS mit 8 Bit Datenbreite. Vor allem
wenn es um Berechnungen geht - z.B. Multiplikation zweier 16-Bit-Werte
geht auf eine 16-Bitter (wo das ein einziger Befehl ist) um mindestens
eine Groessenordnung schneller als auf einem 8-Bitter (der das in eine
Reihe von Teiloperationen aufspalten muss).
Die Liste würde ich so nicht unterschreiben.
Als Beispiel fehlt der der 20Pin 16F690,
8pin 12F508/9
14 pinner 16F505 welcher obwohl 16F nur ein 12bit ist,
oder andere mit i2c oder rs232 in HW,
die Controller mit Ethernet, Can, Lin, ...
Schon klar, dass man sich immer auch was anderes herauspicken kann, vor
allem wenn man spezielle Anforderungen (z.B. LAN) hat. Gerade bei
Microchip mit ihren hunderten von Modellen. Deshalb habe ich auch "IMHO"
in meiner Aussage :-) Aber ich denke, dass meine Liste doch ein
brauchbarer (aus persoenlicher, praktischer Erfahrung) Ausgangspunkt
ist. I2C und USART in Hardware haben alle groesseren von mir
aufgelisteten Modelle (18 pin und mehr). Vor einer konkrete Anwendung
studiert man natuerlich erst mal das Datenblatt, und wenn das was
Wichtiges fehlt, muss man weitersuchen - aber man hat mal eine Basis.
Interessante neue Chips sind z.B. die mit Touch Sensor. Oder die RF PICs
fuer Funkaufgaben. Usw usf. Aber das wird dann fuer eine allgemeine
Aussage schon ein bisschen zu speziell...