Forum: Mikrocontroller und Digitale Elektronik Ist der PIC 18F2450 eine gute Entscheidung


von Martin M. (ats3788)


Lesenswert?

Hallo
ich möchte das DCF Projekt von Nicolas Meyertöns
http://pic-projekte.de/wiki/index.php?title=DCF77_Auswertung_in_C
nachbauen. Ist der PIC 18f2450 dazu eine gute Wahl ?

von Ottmar K. (wil1)


Lesenswert?

Hallo,
natürlich kannst Du diesen PIC verwenden, allerdings ist er etwas 
überdimensioniert. Bereits mit einem PIC16F628 (18 pins) kannst Du 
DCF77-Input-Verarbeitung, LCD-Ausgabe (4bit-Modus) und Tasterabfrage 
(Stellen von Uhr, auch Weckerfunktion) vewirklichen.

mfG Ottmar

von Martin M. (ats3788)


Lesenswert?

Danke Ottmar was ich vergessen habe zu schreiben es ist um CX8 C zu 
lernen und verstehen. Mit dem 628 habe ich ein schönes Assembler 
Beispiel gefunden. Wenn ihr ein anspruchvolles XC8 Beispiel für einen 
16f887 wiest
last es mich wissen MPLAB X ist so jung und da gibt es noch nicht so 
viele Beispiele oder ?

von Ottmar K. (wil1)


Lesenswert?

Leider weiß ich kein C-Beispiel für DCF77. Lernst Du aber nicht am 
meisten wenn Du Dich step by step voranarbeitest? Ich würde es 
jedenfalls so versuchen. Dann arbeitest Du Dich zugleich in
C, MPLABX, und in die Features des gewählten PIC gezielt ein.

mfG Ottmar

von PIC N. (eigo) Benutzerseite


Lesenswert?

Hallo Martin!

> MPLAB X ist so jung und da gibt es noch nicht so viele Beispiele

Es spielt im Grunde keine Rolle ob du MPLABX oder die alte 8er Version 
verwendest. Entscheidend ist auch nicht der Compiler. Es muss eher 
heißen, dass du lernen möchtest einen Mikrocontroller in der Hochsprache 
C zu programmieren. Hier sei schon mal vorweg genommen, dass das 
Programmieren von µC in C komplizierter ist als das Schreiben von 
Programmen in C auf einem Computer unter Windows.

Aber gut: Also wie du sicher schon weißt kannst du den XC8 Compiler 
verwenden. Dieser ist für PIC10, 12, 16 und 18.

Siehe auch: 
http://pic-projekte.de/wiki/index.php?title=MPLAB_XC_Compiler

Wenn du jetzt wirklich ganz neu einsteigst (was das Programmieren in C 
betrifft), dann würde ich dir nahe legen erst einmal ein LED Lauflicht 
oder ähnliches zu versuchen. Danach eventuell ein LCD Ansteuern (eines 
mit HD44780 Controller), dann den ADC verwenden, LED(s) per PWM 
steuern,...

Was ich damit sagen möchte: Es macht keinen Spaß sich direkt an ein 
vermeintlich zu großes Projekt zu setzten und dann zu frustrieren wenn 
es nicht so richtig läuft.. Lieber kleine Schritte machen, es alles 
richtig verstehen, Erfolgserlebnisse sammeln und zu immer komplexeren 
bzw. komplizierteren Aufgaben wechseln.

Wenn du dich jedoch schon der Aufgabe gewachsen siehst, wünsche ich 
dennoch viel Erfolg! Gerne kannst du auch zu "uns" ins PIC-Forum kommen 
;-)

http://pic-projekte.de/phpBB3/

Viele Grüße

von W.S. (Gast)


Lesenswert?

Martin Michael schrieb:
> Mit dem 628 habe ich ein schönes Assembler
> Beispiel gefunden.

Und wenn du das von vorn bis hinten verstehst, hast du mehr davon, als 
mit nem PIC die Sprach C lernen zu wollen. Solche Sprachen wie C sind 
nämlich dazu gedacht, daß die Programmierer sich eben nicht mehr so 
sehr mit der zugrunde liegenden Hardware befassen müssen. Deshalb lernen 
sie bei Mikrocontrollern auch regelmäßig viel zu wenig über den Chip, 
den sie programmieren wollen und stehen dann auf dem Schlauch und rufen 
verzweifelt nach Treiber-Bibliotheken usw. Alles nur, weil sie zu wenig 
von der Sache verstehen.

Also zieh dir das Assemblerprojekt mal rein und bring das zum Laufen. 
Dann kannst du immer noch das Ganze mal in C formulieren und schauen, ob 
es dann überhaupt noch in den Chip hineinpaßt.

W.S.

von Erich (Gast)


Lesenswert?

@ W.S.
Ziemlich grosser Quatsch den du da verzapfst!
Gruss

von W.S. (Gast)


Lesenswert?

Ach, ein Einzeiler-Zwischenrufer.
Begründe deinen Einzeiler mal.

W.S.

von Student (Gast)


Lesenswert?

Es ist durchaus günstig, sich anhand eines einfachen Assembler-Beispiels 
einzuarbeiten, da dann auch wesentlich besserer C-Code herauskommt, da 
man ein Gefühl dafür bekommt, was "teuer" ist.

Auch ist es eventuell günstig, komplexere Projekte zuerst in C zu coden 
und dann, wenn die gesamte Programmlogik feststeht es auf einen 
kleineren Chip, evtl. in ASM zu portieren, da man bei der 
ASM-Implementierung unbedingt vorher einen Plan haben sollte, wohin es 
geht.  "Draufloscoden" und das Projekt iterativ von "schlampig" bis 
"modular" fertigentwickeln ist in C bedeutend leichter.

von Der Rächer der Transistormorde (Gast)


Lesenswert?

Martin Michael schrieb:
> Ist der PIC 18f2450 dazu eine gute Wahl ?

Bei einem Projekt das ein Telegramm mit 60 Baud auswertet ist der uP 
Speed egal. Nen Timer1 hat jeder Pic und die Stromversorgung ist frei 
wählbar..

Bleiben ein paar Anforderungen in Sachen Hardware:
Anzahl der Ein- und Ausgänge der Quarz (wofür bracht ne Funkuhr einen 
Quarz?) etc.

So gerüstet kannst du die Frage selbst beantworten.

Das ganze kann man natürlich auch ohne weiteres in ein Projekt für nen 
dsPic umwandeln. Du musst nur ein paar FFTs des DCF Signals / Sekunde 
machen um das 60 Baud Signal aus einem eventuelle Störungswirrwarr 
herauszufiltern ;-).



W.S. schrieb:
> Also zieh dir das Assemblerprojekt mal rein

Ich kenne Programmierer die haben noch nie eine Zeile Assembler 
geschrieben und sind richtig richtig gut.  Aber das ist auch nur ne 
Meinung.

von Peter D. (peda)


Lesenswert?

Student schrieb:
> Es ist durchaus günstig, sich anhand eines einfachen Assembler-Beispiels
> einzuarbeiten

Wobei der PIC aber keine gute Wahl ist.
Ein CISC, wie z.B. der 8051, läßt sich in Assembler erheblich einfacher 
programmieren.

Ich habe auch lange Jahre erst in Assembler programmiert. Ob man solche 
Erfahrungen aber wirklich braucht, will ich nicht bestätigen.
Beim Übergang auf C erlebt man jedenfalls einen deutlichen 
Qualitätssprung (viel weniger Entwicklungszeit für ein Projekt, deutlich 
bessere Erweiterbarkeit).

In Assembler ist es erheblich schwerer, überhaupt erstmal eine Struktur 
reinzubringen. Assembler wird meistens Spaghetticode übelster Sorte und 
man sieht schon bald in seinem eigenen Code nicht mehr durch.
Und man vergeudet viel Zeit mit Verwaltungskrams, beim PIC kommen noch 
die nervigen Bankumschaltungen hinzu.
Assembler verdirbt eigentlich den Programmierstil.

Höchstens eine Blink-LED als Urschleim, dann sollte man Assembler 
schnell hinter sich lassen.

von Aus den Büro (Gast)


Lesenswert?

Peter Dannegger schrieb:
> beim PIC kommen noch
> die nervigen Bankumschaltungen hinzu.

Ich kanns nicht mehr hören! Mein Gott - Die Zeit ist lange vorbei. 
>PIC18 und gut ist..  Gott im Himmel

von Peter D. (peda)


Lesenswert?

Aus den Büro schrieb:
> Ich kanns nicht mehr hören! Mein Gott - Die Zeit ist lange vorbei.
>>PIC18 und gut ist..  Gott im Himmel

Dann muß wohl das Datenblatt lügen:
"The memory space is divided into as many as
16 banks that contain 256 bytes each. PIC18F2450/
4450 devices implement three complete banks, for a
total of 768 bytes."

von Chris B. (dekatz)


Lesenswert?

Wer nie gelernt hat Strukturiert zu Programmieren, produziert 
Spaghetticode - völlig egal in welcher Sprache (was auch hier in diesem 
Forum stets bewiesen wird und da rede ich jetzt NICHT von Assembler und 
BASCOM-Programmen !).

> .........Verwaltungskrams, beim PIC kommen noch
> die nervigen Bankumschaltungen hinzu.....

Tja, wer unbedingt auf den PIC12/16/(18) beharren will, muss damit leben 
- wenn möglich noch mit neolithischen PIC16F84 herumwerkelt um alles 
"von der Pieke auf zu lernen" ......(Kopfschüttel)

btw: PIC24 gibt es auch als 14/20/28pin-DIL, gibt es auch in 5V-Typen, 
haben 16 Register, kein Banking, kein Paging, kein herumgewurstel mit 
nur einem "W"-Register, kosten teilweise <2€ etc. etc. - Sind eben nicht 
so bequem - dickes Datenblatt, nicht gerade Unmengen Tutorials in 
Netz,....
Aber man kann die Dinger relativ bequem in Assembler und erst recht in 
"C" Programmieren - so hoch ist der Tellerrand ja nun wirklich nicht ;-)

Und was das "LED mit Assembler blinken lassen" betrifft:
Wenn man keine anderen Ambitionen hat als ne LED blinken zu lassen, dann 
kann man sich sogar das sparen. Dann zieht auch das hier oft verwendete 
Argument "Assemblerkentnisse um Compilate zu verstehe seien nützlich 
blablbla" auch nicht. Weil mit seinem Pipifaxprogramm hat man die 
Assemblermöglichkeiten erst zu 5% "entdeckt" - da hat man ja noch nicht 
mal den halben Befehlssatz durch, von Adressierungen via FSR/INDF reden 
wir gleich gar nicht....

von Aus dem Büro (Gast)


Lesenswert?

Peter Dannegger schrieb:
> Aus den Büro schrieb:
>> Ich kanns nicht mehr hören! Mein Gott - Die Zeit ist lange vorbei.
>>>PIC18 und gut ist..  Gott im Himmel
>
> Dann muß wohl das Datenblatt lügen:
> "The memory space is divided into as many as
> 16 banks that contain 256 bytes each. PIC18F2450/
> 4450 devices implement three complete banks, for a
> total of 768 bytes."

1.) Nimmt dir das ohnehin der Compiler ab und 2.) Dir ist der 
mathematische Zusammenhang dieses Symbols ">" geläufig?

von W.S. (Gast)


Lesenswert?

Der Rächer der Transistormorde schrieb:
> Ich kenne Programmierer die haben noch nie eine Zeile Assembler
> geschrieben und sind richtig richtig gut.

Ähem..wo?
(Im Bett? hüstel..)

ja, sowas wie Dbase oder Clipper-leute, heutzutage auch 
Web-Programmierer.

W.S.

von fuerst-rene (Gast)


Lesenswert?

Hab mir nicht alles durchgelesen aber ich war den 16F77 gewohnt und die 
18er Reihe hat andere Tacktung bin dann af den 16F1939 Umgestiegen und 
schon liefen alle Interrupts und Timer wie Gewohnt,

Glaube das ihr aber über was anderes als Asembler und Timing diskutiert 
☺

von morob65 (Gast)


Lesenswert?

Mein kurzer Einwurf.

Die PIC18FXXXX sind für C gedacht, lt. Microchip.

von 132 (Gast)


Lesenswert?

Mal ein zweiter Einwurf:

Niemand braucht Assembler mehr. Außer in irgendwelchen Grenzfällen bei 
denen der PIC / µC voll ausgelastet ist oder es unbedingt auf jeden Takt 
ankommt. Wenn man an einer solchen Stelle steht dann ist aber meist 
schon vorher was bei der HW-Selektion schief gegangen. Nicht falsch 
verstehen - ich hab selbst ASM gelernt und bin heil froh darüber. Aber 
gebraucht habe ich es nie mehr in meinen (zugegeben noch wenigen) 12 
Jahren Berufserfahrung. Und ich arbeite so gut wie jeden Tag mit µCs. 
Ich weiß man kann das - und wer es gerne macht der soll das auch machen. 
Aber die Zeit schreitet einfach fort und die Zeiten des 8051 sind 
einfach vorbei. Niemand sagt, dass alles auf unerprobten 32bitern wie 
den Cortex M... Derivaten laufen soll. Aber man sollte schon lernen auch 
mit der Zeit zu gehen.

Im Endeffekt ist es so und so Haarspalterei und die erwähnte 
Bankumschaltung ist sowieso ein 0815-Argument streitsuchender Leute. Wer 
aus der Praxis kommt der weiß, dass sowas sicher kein 
Selektionskriterium für einen Mikrocontroller ist.

von Michael S. (rbs_phoenix)


Lesenswert?

Ich programmiere seit einiger Zeit PICs ausschließlich in C. Bisher 
PIC18 und dsPIC, aber auch die ach so verteufelten, "nicht für C 
gebauten" PIC12 und PIC16. Und ich muss berichten, es hat doch 
tatsächlich funktioniert... Sogar so wie ich wollte. Die Kompabilität 
unter allen PICs erlaubt es, jeden PIC mit der gleichen IDE und 
Programmiergerät zu nutzen. Daher kann man es sich auch einfach leicht 
machen:
Man schaut bei Microchips MAPS:
 www.microchip.com/maps/microcontroller.aspx

Wenns ein relativ einfaches Projekt ist, z.B. ein I2C-Thermometer 
auslesen und an einem 2x20 LCD auageben, kann man so einfach suchen..
5V PIC, min. 1xMSSP, interner Oscillator, min. 9 IOs (4+3 f. LCD, 2 f. 
I2C), für kleinstmöglichstes Gehäuse max. 14 PINs. Sagt man man will es 
sich mit 8bittern einfacher machen und braucht mindestens 2 kWörter Ram, 
sieht man, es gibt 14 potentielle PICs, da es ja ein recht simples 
Projekt ist. Nun sortiert man nach Preis und hat den PIC16F1503 für 
75cent.

Wenn du aber noch PICs hast, würde ich die, wenn machbar, aufbrauchen.

von Max H. (hartl192)


Lesenswert?

Aus den Büro schrieb:
> Peter Dannegger schrieb:
>> beim PIC kommen noch
>> die nervigen Bankumschaltungen hinzu.
>
> Ich kanns nicht mehr hören! Mein Gott - Die Zeit ist lange vorbei.
>>PIC18 und gut ist..  Gott im Himmel

Zum Banking: DIE PIC10,12,16,18 haben den RAM in Banken unterteilt. Der 
PIC18 bringt da einige Vorteil, z.B. sind alle SFR in einer Banken und 
es können alle SFR + 159 GRP über die Access Bank unabhängig von der im 
BSE gewählten Bank angesprochen werden. Und er hat den MOVFF Befehl, der 
den kompletten RAM adressieren kann.
Wenn man also <159 Bytes Ram brauch kann einem das Banking egal sein, 
und wenn man <415 Bytes brauch kann man das BSF immer auf die gleiche 
Bank eingestellt lassen, und einfach mit dem ACCESS bit bei jedem Befehl 
auswählen.

Martin Michael schrieb:
> Ist der PIC 18f2450 dazu eine gute Wahl?
Meiner Meinung nach schon. Er hat genug IOs, geht falls es sein muss bis 
12MISP und hat laut Microchip eine "C Compiler Optimized Architecture". 
Eigentlich sollte jeder PIC18 mit genügend Pins für eine DCF Uhr 
geeignet sein.

: Bearbeitet durch User
von Max H. (hartl192)


Lesenswert?

Ich muss mich entschuldigen, mir sind ein paar Fehler unterlaufen:

M. H. schrieb:
> ...können alle SFR + 159 GRP über die Access Bank unabhängig...
Das müsste eigentlich "alle SFR + 95 GPR" heißen.

M. H. schrieb:
> Wenn man also <159 Bytes Ram brauch kann...
Das müsste eigentlich "<95" heißen.

M. H. schrieb:
> ...und wenn man <415 Bytes brauch kann man das BSF...
Und das "<351"

von Martin M. (ats3788)


Lesenswert?

danke für die infos:)

von Frank K. (fchk)


Lesenswert?

M. H. schrieb:

> Martin Michael schrieb:
>> Ist der PIC 18f2450 dazu eine gute Wahl?
> Meiner Meinung nach schon. Er hat genug IOs, geht falls es sein muss bis
> 12MISP und hat laut Microchip eine "C Compiler Optimized Architecture".
> Eigentlich sollte jeder PIC18 mit genügend Pins für eine DCF Uhr
> geeignet sein.

Dazu muss man aber sagen, dass es eine alte Generation ist. Die neueren 
PIC18 (erkennbar an einem K oder einem J in der Typenbezeichnung) sind 
stromsparender, können oft mehr, können manchmal mit einem höheren Takt 
betrieben werden und sind dank modernerer Halbleiterprozesse deutlich 
billiger. Die J-Typen sind allerdings nur noch für 3.3V.

Schauen wir mal Deinen PIC18F2450 an. Der kostet im SO28 bei Digikey 
2.99€.
Der Nachfolger ist der PIC18F24J50. Der kostet nur 2.54€ im SO28. Hier 
ist der Unterschied nicht so groß, es gibt aber Typen, wo ein Faktor 2 
oder 3 in der Preisdifferenz ist.

Der PIC18F24J50 läuft intern nur noch mit 2.5V, extern mit 3.3V. Schon 
dadurch braucht er deutlich weniger Energie (denk dran: die Spannung 
geht bei der Leistung quadratisch ein, halbe Spannung heißt viertel 
Leistung!) und hat die XLP Stromspartechnologie. Für Dinge wie eine Uhr, 
die im Batteriebetrieb laufen sollen, ist das durchaus ein Argument.

fchk

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
Noch kein Account? Hier anmelden.