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 ?
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
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 ?
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
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
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.
@ W.S. Ziemlich grosser Quatsch den du da verzapfst! Gruss
Ach, ein Einzeiler-Zwischenrufer. Begründe deinen Einzeiler mal. W.S.
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.
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.
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.
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
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."
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....
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?
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.
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 ☺
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.
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.
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
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"
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.