Hallo, Ich bin vor kurzem für PIC programmierung von Assembler zu C mit CC5X umgestiegen und bin recht glücklich, jedoch funktioniert leider nix außer den alten 16F84. Bei den 628, 648, 88 und 876 (mehr hab ich nicht) lässt sich mit den entsprechenden Includes alles wunderbar compilieren & brennen, jedoch passiert gar nichts. Stolperfallen (ANSEL=0, CMCON=7) natürlich auch beachtet und getestet. In Assembler hab ich obige Chips auch bereits erfolgreich programmiert. ASM-Code sieht auch recht identisch aus (bis auf includes/direktiven für HEX-compiler) Schaltung ist auch einwandfrei (der 84er rockt die ja weg...) Hab ich irgendwas dummes vergessen, oder in meiner langen Googelei übersehen? Für Hilfe, Tips und Anregung wär ich echt Dankbar! grüße, HAL9000 hier zB ein Grundgerüst: #pragma chip PIC16F628A #pragma config |= 0b.1111.1111.0010 void main(void) { TRISB = 0b.0000.0000; while(1) { PORTB = 255; } }
Hallo! Also ich arbeite schon seit einiger Zeit mit dem CC5X-compiler. Den PIC16F628A hatte ich zwar noch nicht verwendet, aber den PIC16F628. Ich habe meine Erkenntnisse (vor allem wie man die 1k-Grenze umgeht) in einem Dokument zusammengefasst. Siehe Anhang. Vielleicht hilft Dir ja dass weiter. Ich hatte einmal das Problem, dass ich während einer Projektentwicklung den Controllertyp ändern wollte (vom 16F877 zum 16F77). Das bloße Ändern der #Pragma-Anweisung oder der '#nclude (je nachdem was man verwendet) brachte nicht den Erfolg, auch nicht mit Configure -> Select Device... (in der MPLAB IDE). Der einzige funktionierende Weg war ein neues Projekt mit dem Projekt-Wizard erstellen. - Vielleicht hilft Dir ja das weiter. mfg Stefan B. Linz, Österreich PS. Das angehängte Dokument wird auch bald auf meiner Homepage http://www.stefan-buchgeher.info/ verfügbar sein. Vielleich helfen Dir ja auch meine bisherigen Projekte mit dem CC5X weiter: http://www.stefan-buchgeher.info/elektronik/feuchtesensor_shtxx/feuchtesensor_shtxx.html http://www.stefan-buchgeher.info/elektronik/feuchtemodul1/feuchtemodul1.html (Schottisches Wochenden vom 28. Juli bis 30. Juli in Gramastetten, Österreich)
Hi, Danke für den Code, die Config anzuschauen (weil du jedes Bit dokumentiert hast) brachte die Lösung... irgendwie mag der bei mir die binäre Config nicht, sobald ich sie manuell setze (zB #pragma config WDTE=off usw) geht alles aber. weiß nicht ob das evtl am Brenner liegt. Der Anhang sieht übrigens auch sehr interessant aus, danke dafür. Benutze zwar kein MPLAB sondern alles im texteditor, aber so langsam fange ich auch an, an der 1k-decke zu kratzen... besten Dank und grüße aus Hamburg, HAL9000
Hallo Stefan schön mal wieder was von dir zu hören. Deine Doku ist super gut. Mir hat schon die erste Version sehr geholfen. Ich würd dich aber trotzdem noch zwei Sachen, auch wenn mein Projekt schon abgeschloßen ist. 1. Ich habs nicht geschafft den #Pragma config so einzutragen, dass mein Brenner diese Config übernommen. Der IC pro hat mir immer gemeldet keine Config. Ich hab dann versucht die 16F877.lkr die cfg zu ändern, ging aber auch nicht. 2.Was für einen Brenner benutzt du? Damit das gleich aus MPlab raus funktioniert? Grüße Marc
Hallo Marc zu 1. Welchen Brenner benutzt Du denn? zu 2. Ich begann mit PICSTART Plus (bis ich Probleme bekam mit den neueren PIC-Typen bekam. Auch das brennen einer neuen Firmwire für den Brenner lt. Anleitung des Handbuchs brachte keinen Erfolg) Aber für die PIC-Typen 16F87x und PIC16F62x funktioniert dieser nach wie vor gut. Jetzt brenne ich hauptsächlich mit dem "brenner5" von "Sprut" (www.sprut.de). Das geht zwar nicht mehr direkt aus MPLAB. Sondern ist ein eigenständiges Programm. Die MPLAB erzeugt mir nur mehr die HEX-Datei (zum Brennen). Die Software von "SPRUT" erkennt die Configuration automatisch aus der HEX-Datei. Die Schaltung für den "Brenner5" ist nicht besonders umfangreich, und hat auf einer relativ kleinen Lochrasterplatine Platz. mfg Stefan B. Linz, Österreich (Schottisches Wochenende vom 28. Juli bis 30. Juli in Gramastetten, Österreich) PS.: Dein FH-Projekt ist also abgeschlossen, gibt es sonst (besondere) Erkenntnisse zum CC5x-Compiler, die nicht im Handbuch bzw. in meiner Doku stehen.
Wie gesagt. Ich hab es nicht geschafft, eine richtige Config des Chips zu machen(so dass diese in der Hex stehet). Sprich, ich musste den Oszityp, die Code Protect, WDT usw. im IC Prog einstellen und das bei jedem Brennvorgang. Ich hab es einmal im Mainprogramm versucht ein zu tragen, dann kam der Fehler dass die CFG zweimal vorhanden ist. #pragma config |=0b.1.1.1.1.1.0.1.11.0.0.01 Als ich folgenden Eintrag in der Headerfile gelöscht hab, #pragma chip PIC16F877 und durch den obigen ersetzt wurde konnte ich die Assambler files nicht mehr zusammenfügen. Mein letzter Versuch war es nur in der File 16f877.h die Config zu machen. Ich hab dann anstadt #pragma config_def 0x3FFD meine Config eingetragen. Es hat sich aber gar nicht verändert. Ich hab dann nicht weiter rumprobiert, da noch der Projektbericht auf mich gewartet hat. Grüße Marc
Hallo Marc! Ach hatte ich vergessen: Du verwendest IC Prog - Das kenne ich (leider) nicht, da ich es nicht verwende! Da kann ich Dir auch nicht weiter helfen. Wenn man es im IC PROG eh direkt einstellen kann, da ist das ganze eh halb so schlimm. Ist halt etwas umständlich. Aber so ist das leben halt. es gibt so viele umständliche Dinge im Leben, daran muss man sich eben gewöhnen. Es kann aber auch durchaus sein das IC-PROG die Konfiguration gar nicht aus der HEX-Datei liest. (Ist nur so eine Vermutung, da ich IC prog ja nicht kenne). "Wie gesagt. Ich hab es nicht geschafft, eine richtige Config des Chips zu machen(so dass diese in der Hex stehet)." - Woher weist Du denn ob deine CONFIG im Hex steht?? - Ich denke, die CONFIG steht schon in der HEX-Datei, wenn du sie im C-Code definierst, oder in irgendeiner anderen Datei. Nur IC-PRog liest diese Informationen einfach nicht aus der HEX-Datei. (Wie gesagt, alles nur Vermutungen). Wenn Dich dieses THEMA mehr interresiert, dann eröffne doch einen neuen THREAD (schreibt man das so?) - Vielleicht finden sich ja einige, die mit IC prog bessere Erfahrungen haben. mfg Stefan B. Linz, Österreich (Schottisches Wochenende vom 28. Juli bis 30. Juli in Gramastetten, Österreich)
Mich stört das auch nicht weiter. Hätte sein können du hast vielleicht eine Lösung. Wäre aber interessant zu wissen an welcher stelle du die cfg machst bzw. in welcher Datei. Grüße Marc
Ich hatte wie erwähnt mal das Problem, dass die Config nicht ausgelesen wird, wenn ich sie binär/hex angebe. (obwohls meiner meinung nach kein unterschied machen dürfte) Schonmal probiert, die Configparameter alle manuell einzelnd zu setzen ? also zB "#pragma config WDTE=off" usw...
Keine Chance. Ich bekomme immer folgenden Fehler beim linken. ===================================================================== MPLINK 4.02, Linker Copyright (c) 2006 Microchip Technology Inc. Error - section '.config' type is non-overlay and absolute but occurs in more than one input file. Errors : 1 =====================================================================
Was vielleich wichtig ist: Ich hab in meiner Header File folgenden Eintrag und so funktioniert dann auch alles, bis auf config #pragma chip PIC16F877 Auf welche Datei verweist dieser Eintrag? Auf die 16f877.h? Dann müßte ich doch dort meine Cfg machen können oder net? #pragma config_def 0x3FFD wenn ich hier etwas ändere hat das absolut keine Auswirkungen. Leider. Egal ob ichs Bin oder Hex eintrag.
Also bei mir wars so, dass es keinerlei Unterschied gemacht hatte, ob ich nun #pragma chip PIC16F877 schrieb, oder #include <C:\cc5x\16F877.h> // je nach pfad natürlich ich weiß nicht, was der pragma chip befehl sonst noch macht, (hab bisher eher relativ kleine progs geschrieben) aber kannst ja auch ma die include variante probieren.
1) Also, was die "#pragma config |= 0b.xxxxxxx" betrifft. Die darf im gesamten Projekt nur einmal vorkommen, sonst kommt diese Fehlermeldung: ===================================================================== MPLINK 4.02, Linker Copyright (c) 2006 Microchip Technology Inc. Error - section '.config' type is non-overlay and absolute but occurs in more than one input file. Errors : 1 ===================================================================== oder eine ähnlich. Daher darf "#pragma config |= 0b.xxxxxxx" auch nicht in der "PROJECT.H" definiert werden (Ich beziehe mich jetzt auf mein Dokument!) Die "#pragma config |= 0b.xxxxxxx" - Anweisung steht bei mir daher in der Datei, wo auch das Hauptprogramm und die Interrupt-Routine (falls diese erforderlich ist) steht. Und zwar gleich nach den Include-Anweisungen (siehe mein Dokument Seite 18 und 19) @MARC: #pragma config |=0b.1.1.1.1.1.0.1.11.0.0.01 fehlt da nicht eine Stelle. Es sollten 14 bits sein - oder ist sie nur beim Abschreiben vergessen worden? 2) Ob #pragma chip PIC16F877 oder #include <C:\cc5x\16F877.h> ist egal, man hat eben oft mehrere Möglichkeiten für ein und das selbe. So wie auch bei Windows und vielen anderen Programmen. 3) Im Gegensatz zu #pragma config |= 0b.xxxxxxxmuss muss #pragma chip PIC16F877 für jede Quelldatei bekannt sein.( daher befindet sich #pragma chip PIC16F877 auch in der PROJECT.H). Der Grund ist wahrscheinlich der, dass der C-Compiler ja bei jeder Datei wissen muss, welcher Controller verwendet wird, damit er beim Compilieren weiss welche Resourcen (also in erster linie was den Speicher betrifft) zur Verfügung stehen. Der Compiler compeliert ja (bei mir mit einer bat-Datei) jede C-Datei für sich, also unabhängig von den anderen. Stefan B. Linz, Österreich (Schottisches Wochenende vom 28. Juli bis 30. Juli in Gramastetten, Österreich) PS: Ich hoffe ich habe alle Fragen so halbwegs beantwortet und keine offen gelassen
Du bist ein Schatz. G Ne mal im Ernst, würd dir gern mal ein Bier ausgeben. Das Problem war ein ganz einfaches: Die cgf des Chips war vor den Includes und deshalb hats nicht funnktioniert. Jetzt steht die cfg auch im IC Prog. So wie es soll. Vielen Dank.
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.