Forum: Mikrocontroller und Digitale Elektronik PIC-Programmierung: Anfänger braucht Hilfe


von Picky (Gast)


Lesenswert?

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?

von Sebastian H. (sebihepp)


Lesenswert?

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.

von Picky (Gast)


Lesenswert?

Ups, das mit dem
1
void main() { }
 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?

von Chris (Gast)


Lesenswert?

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.

von W.S. (Gast)


Lesenswert?

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.

von Anja (Gast)


Lesenswert?

Chris schrieb:
> Die Pins sind auf Eingang nach dem Einschalten.

Nicht nur das sondern beim 12F675 zusätzlich noch als ADC-Pin 
konfiguriert.

Gruß Anja

von Picky (Gast)


Lesenswert?

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ß

von Picky (Gast)


Lesenswert?

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.

von Lehrmann M. (ubimbo)


Lesenswert?

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.

von ich (Gast)


Lesenswert?

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.

von Jens (Gast)


Lesenswert?

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.

von dikomö (Gast)


Lesenswert?

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.

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.