Hallo,
ich möchte ein einfaches C-Programm schreiben für den PIC 12F675.
Habe MPLab installiert, und sowohl den HIGH-TECH-Compiler als auch den
CCS-Compiler(Demo).
Ich bin ganz neu auf dem Gebiet, also bitte nicht über meine Fragen
wundern. Hier ist der Code meines bisherigen Programms:
1
#include "12F675.h"
2
3
while(TRUE)
4
{
5
Output_high(PIN_A0);
6
Output_low(PIN_A1);
7
Output_high(PIN_A2);
8
Output_low(PIN_A5);
9
}
10
}
So lässt es sich auch compilieren (zumindest mit dem CCS-Compiler),
funktioniert aber noch nicht. Es fehlt wahrscheinlich noch die
Konfiguration des PICs, aber wie mach ich das? Viele
Konfigurationsbefehle, die ich im Internet gefunden habe, sind dem
Compiler unbekannt. Überhaupt kennt der Compiler kaum einen Befehl, also
irgendwas stimmt da noch nicht. Braucht man noch andere Header-Dateien?
Könnt ihr mir helfen?
Normalerweise dürfen in C implementierungen doch nur in Funktionen sein,
oder ist das hier anders?
Versuche mal um die While-Schleife die "main"-Funktion zu schreiben.
Dann müsste das auch kompilieren. Die Konfiguration stellst du in MPLAB
direkt ein - in der Menüleiste unter "Configure"->"Configuration
Bits..."
Das Häkchen bei "Configuration Bits set in code." entfernen und in dem
Fenster dann die Einstellungen vornehmen.
hatte ich versehentlich rausgeschnitten, das habe ich drin.
Wenn ich bei den Configuration Bits was umstelle, stellt sich das beim
compilieren automatisch zurück! Ich müsste doch wahrscheinlich bei den
Oscillator Bits auf INTOSC umstellen, oder?
Die Pins sind auf Eingang nach dem Einschalten. Wenn du sie nicht auf
Ausgang stellst, dann kannst du die Pins auf 1 oder 0 setzen, nur
werden sie das nie ausgeben.
Picky schrieb:> Ich bin ganz neu auf dem Gebiet, also bitte nicht über meine Fragen> wundern.
Nein Picky, wundern tue ich mich nicht, aber ärgern.
Du bist also ganz neu auf dem Gebiet und fängst als allererstes an,
irgendein C-Programm zu schreiben. Lies dir lieber die Doku zu dem
Controller durch, lerne wie das Ding von INNEN funktioniert, lerne
dessen Assemblersprache, lerne, wie die grundlegenden Dinge wie Ports,
Register, Bits in den Registern, Registerseiten und so weiter
funktionieren - aber fang nicht als allererstes so ein C-Programm an und
frag dann den anderen ein Loch in den Bauch, bloß weil es dir zu
mühselig ist, das was du eigentlich wissen solltest SELBST zu erlernen.
W.S.
Manchmal wünch ich mir, daß ein jeder, der irgend etwas in irgendeiner
verdammten Programmiersprache zusammenschreiben will, erstmal eine Runde
in Assembler zu absolvieren hätte, damit er lernt, auf was für einer
Basis er sich überhaupt zu bewegen gedenkt.
Okay, danke! Jetzt klappts fürs erste.
Habe zum einen die Pins als Ausgänge definiert, zum anderen musste ich
bei der Konfiguration nach dem Kompilieren und vor dem Brennen auf den
internen Oszillator umstellen.
Gruß
Oh, da sind ja noch neue Antworten dazugekommen.
@W.S. Im Grunde hast du Recht, aber wenn man schon C-Erfahrung hat, aber
noch nie was mit Assembler zu tun hatte, bleibt man halt lieber bei C.
Wenn ich ein komplizierteres Projekt versuchen sollte, dann werd ich mir
das auch mit Assembler versuchen.
Picky schrieb:> @W.S. Im Grunde hast du Recht, aber wenn man schon C-Erfahrung hat, aber> noch nie was mit Assembler zu tun hatte, bleibt man halt lieber bei C.
Es sagt ja auch niemand was gegen C aber du sollst das ganze richtig
lernen und nicht so einen Schmarren produzieren. Nimm ein vernünftiges
Buch und lies es von der ersten Seite ab und gib dich nicht der Illusion
hin dass du das nicht brauchst.
Picky schrieb:> Wenn ich ein komplizierteres Projekt versuchen sollte, dann werd ich mir> das auch mit Assembler versuchen.
Das glaube ich eher weniger. Assembler muss man von der Pike auf lernen,
oder man wird nie ein vernünftiges Programm schreiben. Wenn du ein
einigermaßen komplexes Projekt (beispielsweise mit LCD-Display und
Menüführung) realisieren willst, so kannst du das mit C nach geschätzten
2 Wochen, jeden Tag PIC Programmieren lernen, vernünftig lösen. Für
Assembler brauchst du sicherlich mehr als 2 Jahre Assemblererfahrung
bevor du überhaupts an sowas denken kannst. Abgesehen von dem graußamem
Programmierstil und gänzlicher Ineffizienz der Programme den Unerfahrene
verursachen.
Klingt zwar alles ziemlich hart und rau, aber Recht haben sie da;) Es
gibt ja schließlich auch Dinge, die man in C schreiben muss, obwohl es
beim normalen C für den Computer vielleicht nicht gebraucht wird.
Und als kleiner Tipp. Wenn du nochmal eine Frage hast und einen Code
hast (egal ob ASM, C oder sonstwas), poste den KOMPLETTEN Code. Wenn er
zu lang ist, häng ihn als Datei an. Bei >50% der Fälle, wo jemand eine
Frage zu seinem Code hat, ergeben sich Missverständnisse oder es wird in
die falsche Richtung nach Fehlern gesucht, nur weil nicht der ganze Code
vorlag. Resultat ist dann meist genervte Helfer, rauer Ton, gemotze usw.
Und bei den Fragen, wo ich mal mitgelesen oder geholfen habe, wird es
definitiv keine kommerzielle Anwendung sein, sodass der Sourcecode
Geheim gehalten werden muss.
Ich muss zugeben bei meinen Code auch den Fehler gemacht zu haben. Ich
hab einfach gedacht, ich poste den Programmteil, der nur laufen dürfte,
damit sich nicht alle die 300 Zeilen angucken müssen, obwohl nur 20
"wichtig" sind. Und siehe da, der Fehler war wo ganz anders.
Schaue dir mal die Seite von Sprut (www.sprut.de) an. Da werden die PICs
von der Pike an erklärt, Grundlagen, Ports, Oszi, Hardwaremodule und vor
allem die Assemblerprogrammierung. Meiner Meinung nach sollte jeder
uC-Programmierer Assembler-Grundlagen für den verwendeten Controller
besitzen. Nur so versteht man die internen Abläufe und weiß auch bei der
Fehlersuche, was das Programm gerade macht und wo die Fallstricke sind.
Hallo, Picky,
PICs in C programmieren zu wollen, heißt, den zweiten Schritt vor dem
ersten machen. In Assembler gibt es lediglich 32 Befehle, die man
schnell drauf hat. Der entscheidende Vorteil der
Assembler-Programmierung ist aber, dass man sehr hardwarenah operiert,
und dadurch das Funktionieren des Mikrocontrollers bestens verstehen
lernt. Die Webseite sprut.de ist empfehlenswert und kostenlos. Ich habe
im vorigen Jahr das Buch
" Programmieren von Mikrocontrollern" (In Assembler) geschrieben, von
dem ich noch einige Belegexemplare rumliegen habe. Wenn Du willst,
schenke ich Dir so eins. Meine E-Mail-Adresse: dieter.kohtz@t-online.de.
Das Buch bezieht sich zwar auf den PIC 16F84A, aber zum Verwenden eines
anderen Midrange-Typs muss man sich ohnehin mit dem zugehörigen
Datenblatt vertraut machen.