Forum: Mikrocontroller und Digitale Elektronik cc5x und PIC 16F628 / 88 problem


von HAL9000 (Gast)


Lesenswert?

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;
  }
}

von Stefan B. (Gast)


Angehängte Dateien:

Lesenswert?

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)

von HAL9000 (Gast)


Lesenswert?

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

von Marc (Gast)


Lesenswert?

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

von Stefan B. (Gast)


Lesenswert?

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.

von Marc (Gast)


Lesenswert?

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

von Stefan B. (Gast)


Lesenswert?

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)

von Marc (Gast)


Lesenswert?

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

von HAL9000 (Gast)


Lesenswert?

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...

von Marc (Gast)


Lesenswert?

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
=====================================================================

von Marc (Gast)


Lesenswert?

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.

von HAL9000 (Gast)


Lesenswert?

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.

von Stefan B. (Gast)


Lesenswert?

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

von Marc (Gast)


Lesenswert?

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