mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Anfänger! C-Programmierung für PIC 12F629


Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!!

Ich brauche hilfe in C-Programmierung für den PIC 12F629. Ich kann
bißchen C programmieren aber ich habe noch nie eine PIC programmiert.
Deshalb würde ich gern ein beispiel habe. Am besten mit vielen
Komentaren.Habe gehört das für den anfang eine Diode aufblinken lassen
ein gutes Beispiel ist.Deshalb würde ich das gerne sehen.die diode soll
bei GPIO1 ein und aus gehen. Ich weiß nicht, wie ich die Prots
ansprechen soll.
Ich möchte den SourceBoost mit MPLAP verwenden.
Und habe irgendwo gelesen, dass es Compailerabhängig ist, wie das
programmiert wird. ist das wahr?? wann ja wieso?? wenn ich normal in C
in Dev-C++ programmiere, dann geht das program auch in VisualStudio.

Ich danke schon jetzt!!!

Autor: Schoaschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
aber in CVI wirst du mit dem C-file bei gewissen funktionen probleme
bekommen, da nicht jeder Compailer die selbe syntax benutz.Aber wenn es
ansi-C befehle sind, müssten sie überall funktionieren.
Nun zum eigentlichen Problem. Ich programmiere schon ein bisschen mit
den PICs benutze aber CCS (irgendwie hängen die zusammen, frag mich
aber nicht wie ;-)). Das problem bei der ganzen geschichte ist, dass zb
der CCS compailer sonderfunktionen hat die einiges erleichtern aber die
andere nicht verstehen. ich versuch mal ein programm allgemein zu
schreiben.
Wichtig zu beachten ist, dass du immer darauf achtest, ob ein Pin als
eingang oder als ausgang definiert ist.

Autor: Schoaschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum hast du eigentlich genau diesen Controller gewählt? Gibt ja einige
andere µC von Microchip, für die es doch einige Übungsprogramme gibt.

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weil ich ein Praktikum mache und damit gearbeitet wird. D.h. man mußte
auch bei der Wahl des PICs wirtschaftlich denken.

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach, und danke Dir schon sehr für deine schnelle antwort!!!!!;-)

Autor: Schoaschi (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Sodala... ich hoff es passt so. Ich kann dafür aber nicht garantieren
;-), denn ich kenne deinen chip nicht. Aber so würd ich es
Programmieren.

Autor: Schoaschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich hoffe es funktioniert, ansonst würde ich auf die seite
www.fernando-heitor.de verweisen. Ist mein Favorit, wenn es um PICs
geht.

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ohhhh, das ging ja super schnell!!!Nochmals vielen dank. werde es morgen
testen und dir sagen wie es läuft. wollte eigentlich heute schon, wie
schon öffter, um 22 uhr im bett sein ;-/ Schaffe ich aber irgendwie
nie!!!;-)

Werde wahrscheinlich öfter hier was reinschreiben. dann aber
hoffentlich schon mit meimem Program mit fragen dazu.


bis dann!!!

Autor: Schoaschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
:-) ich hoffe das du erfolg hast... gute nacht

Autor: Simon (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi!!!

Danke nochmals für deine Hilfe. Habe jetzt Dein Programm bißchen
modifiziert und es läuft.
Doch leider blinken bei dieser Modifikation nur 4 LEDs. Die LED am
GP1(PIN 6 des PICs) blinkt nicht, obwohl ich alle LEDs angesprochen
habe. Ich habe an GP0,GP1,GP2,GP4 und GP5 Dioden angeschlossen. Also an
allen möglichen ausgängen. GP3 läßt sich ja nur als Eingang betreiben.

Wieso ist das so? bzw. was ist falsch am programm??

Und meine zweite frage:

Wenn ich delay wegkommentiere und dazu die while-schlafen aktiviere,
sollten doch eigentlich auch die Dioden blinken. Aber es tut sich
nichts.
wieso?

Bis dann

Autor: Schoaschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leuchten sie nur auf ungefähr der halbe Stärke?

Der Grund ist wohl der, dass du var nie zurücksetzt. Also er zählt Sie
in der ersten Schleife bis 100 hoch und wenn er in dei 2. schleife
springen will ist aber die Bediengung der Schleife nicht erfüllt.

Wenn du deine Wartefunktion mit Schleifen machen willst, dann musst du
beachten, das es zu sehr vielen Durchläufen kommen muss, da das ja
recht schnell geht.

Hast du mit dem Oszi den PIN überprüft ob er dir das Signal ausgibt? vl
liegt ja ein Hardwarefehler vor.

Nun habe ich eine fragen an dich. Was ist "volatile" bzw was machst
du damit? ich selbst habe diese deklaration nie benutzt, deswegen frage
ich.

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!!!:-)

Also erstmal zu Deiner Frage:
"volatile" soll bewirken, dass der Compailer denkt, dass die Variable
noch irgendwo im programm verändert wird.
Das ist sozusagen eine vorsorgen, dass er die while-schleife nicht
wegoptimiert. Jedenfalls in der theorie;-)

Ich habe auch einen Oszi angeschlossen, aber leider nichts zu sehen,
als wird die Schleifen doch vom Compailer wegoptimiert

Aber mein größeres Problem ist ja eigentlich, wieso die GP1 Diode nicht
einmal unter der Programmierung "delay_ms" geht.
Zur GP1 kommt keine Spannung an.

Ich kann die GPs: 0,2,4 und 5 jeweils getrennt ansprechen. Aber den GP1
nicht. da tut sich nichts.
Habe ich vielleicht eine sonderstellung des Pins 1 übersehen??
jedenfalls fällt mir nichts auf

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, das mit GP1 hat sich erledigt. Hab vergessen eine Lötbrücke zu
setzten*peinlich*

Jetzt funktioniert es auch richtig.

Autor: Schoaschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich würde die schleifen einfach so machen:
int x;

while(x<100) x++;
x=0;
...
while(x<100) x++;
x=0;

sollte normal funktionieren.

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, danke!!!!
also der PIC funktioniert jetzt so, wie ichs gern hätte.

jetzt will ich auf den eeprom schreiben bzw auslesen. Wenn ichs so
richtig verstanden habe, was der eeprom macht soll, ist das elektrisch
programmierbar zu sein und bei U= 0 V die daten speichern.

Also kann man auch ohne Programmer darauf schreiben. Weißt du wie??

Also rein theoretsich kann ich jetzt das gleiche programm auf den
eeprom schreiben, was ich auch für den FLASH geschrieben habe.

Wenn was falsch ist, bitte berichtigen.

Bis dann!!!

Autor: Schoaschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hm... zuerst müsst man einmal wissen welches EEPROM du schreiben
möchstest. Im Datenblatt steht dann drin wie es Programmiert wird.

Was soll es dir denn bringen, wenn dein Programm auf dem EEPROM drauf
ist? Dieser PIC besitz glaube ich nicht die Funktion das er das
Programm vom EEPROM starten kann.

Aber ich muss zugeben, ich kenn mich mit EEPROMs nicht so aus. sorry.
Aber es sind einige Threads zu diesem Thema in diesem Forum.

mfg schoasch

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey!
Ich möchte den eeprom von dem PIC 12F629 beschreiben. Oder habe ich
jetzt Deine Frage missverstanden?

Soweit ichs richtig verstanden habe, werde die daten auf eedata
gespeicher.


Bist dir ganz sicher, dass der Pic nicht das Prog. vom EEPROM starten
kann?

Bringen sollte mir eigentlich das programmieren auf den EEPROM des PIC
nur so viel, dass ich sehe, dass es auch klappt. einfach nur zur übung.

Oder hast du vielleicht eine Anfängeraufgabe für mich, wo ich den
eeprom mit einbringen muß?:-)

den so fällt mir nichts ein.

cu

Autor: Schoaschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sorry das ich dir jetzt schreibe. soweit ich weis gibts dafür eine
spezielle schnittstelle am PIC die das unterstützt nur nicht jeder PIC
unterstützt diese Funktion. Dazu musst du im Datenblatt nachsehen ob
das da funktioniert.

hm.. ein Programm... wie wärs vl mi einem Datenlogger? also häng vl
einen Tempsensor an den PIC, lies die Temperatur ein und speicher sie.
Das ganze lässt du mal eine Zeit so laufen und dann fragst du mittels
dem PC gleich die Daten ab. wäre ja ne schöne idee oder nicht?

mfg chillin´ schoaschi

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!!
Die Idee ist gut! werd mich daran versuchen.

welchen Tempsenor würdest du den mir empfehlen??

noch einen schönen Abend!

Autor: Schoaschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hm.. kommt drauf an welche variante das du benutzen willst und in
welchem Temperaturbereich es sein soll. falls du,sagen wir mal, im
bereich von -55Grad und 120Grad messen willst, dann könntest du
einfacherweise einen LM75 verwenden. das ist ein Temperatursensor mit
IIC interface. also hättest du bei deinem Übungsprogramm auch gleich
noch einen IIC übung :D. oder du nimmst einfach einen
temperaturabhängigen widerstand und arbeitest mit dem AD-Wandler.

ansonst kann ich dir keinen spezifischen empfehlen, denn das hängt von
der anwendung ab (auflösung,tempbereich usw)

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
HI!
kann es doch nicht mit dem Tempsensor machen, da der PIC keinen
A/D-Wandler hat ;-(

Aber ich bekomme leider es auch nicht hin den PIC, d.h. den EEPROM zu
beschreiben und später wieder auszulesen. Weiß auch nicht so recht, wie
ich vorgehen soll.

Also um dem PIC den EEPROM beschreiben zu können, was muß ich wo
adressieren??

Hier ist das Datenblatt zum PIC 12F629:
http://www.microchip.com/stellent/idcplg?IdcServic....

Als Anhang ist mein spärlicher versuch sowas zu schreiben. Aber es
kommt ne fehlermeldung.

Bis dann!

Autor: Schoaschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
da ist kein anhang :D

das datenblatt vom EEPROM wäre allerdings auch interessant :D. mit dem
würde man mehr anfangen.:-)

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
HI!
Upps,habs wohl vergessen das Prog. anzuhängen.
Habs jetzt auch leider nicht hier,weil ich nicht zu hause bin.;-/

Aber das Datenblatt zum EEprom ist doch mit beim PIC_datenblatt auf der
seite 12 und den seite 49-52. Oder brauchst du noch mehr??
Wenn ja,dann weiß ich nicht wo ich das herbekomme;-/
Hab sonst nichts gefunden.

Ich danke dir noch mals sehr,dass du mir so hilfst.

mfg

Autor: Simon (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Jetzt vergesse ich nicht das Programm anzuhänge;-/

Ist jetzt nicht das was ich gestern noch hatte(glaub mir, war auch
nicht sehenswert;/).
Habs dieses im internet gefunden, Und nach einer kleinen Modifikation
funktioniert auch nicht.
Langsam mach mich der EEPROM verrückt :-/

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist die Fehlermeldung des Compailers die dann rauskommt:

Clean: Deleting intermediary and output files.
Clean: Done.
Executing: "C:\Program Files\SourceBoost\boostc.pic16.exe"
nocheintest.c -O1  -W1  -t 12F629
BoostC Optimizing C Compiler Version 6.00 (for PIC16 architecture)
http://www.picant.com/c2c/c.html
Copyright(C) 2004-2005 Pavel Baranov
Copyright(C) 2004-2005 David Hobday

Single user Lite License (Unregistered) for 0 nodes
Limitations: PIC12/PIC16 max code size:2048 words, max RAM banks:2, Non
commercial use only


nocheintest.c
nocheintest.c(5:9): error: left operand must be l-value
nocheintest.c(5:9): error: failed to generate expression
nocheintest.c(11:11): error: unknown identifier 'FALSE'
nocheintest.c(11:11): error: invalid operand 'FALSE'
nocheintest.c(11:9): error: failed to generate expression
nocheintest.c(14:9): error: left operand must be l-value
nocheintest.c(14:9): error: failed to generate expression
nocheintest.c(16:11): error: unknown identifier 'uCodeLaenge'
nocheintest.c(16:11): error: invalid operand 'uCodeLaenge'
nocheintest.c(16:9): error: failed to generate expression
nocheintest.c(16:2): error: error in the body of 'if' expression
nocheintest.c(21:9): error: left operand must be l-value
nocheintest.c(21:9): error: failed to generate expression
nocheintest.c(23:9): error: left operand must be l-value
nocheintest.c(23:9): error: failed to generate expression
nocheintest.c(24:11): error: unknown identifier 'TRUE'
nocheintest.c(24:11): error: invalid operand 'TRUE'
nocheintest.c(24:9): error: failed to generate expression
nocheintest.c(27:9): error: left operand must be l-value
nocheintest.c(27:9): error: failed to generate expression

failure
BUILD FAILED: Tue Jun 28 12:26:32 2005

Autor: schoaschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
achsooooo... du willst das interne EEPROM vom PIC ansprechen?! ich
dachte du wolltest ein externes Ansprechen.... sorry mein fehler. Das
problem ist, dass ich dir momentan nicht so gut helfen kann, da ich
nicht daheim bin sonden eigentlich von da maturareise aus schreibe :D
und wir da keine PDFs ausmachen können.

gibts nicht vl auch schon vorgefertigte funktione wie zb EEPROM_write
oder so?

und ist es im datenblatt nicht gut beschrieben wie das funktioniert?
müsste ja nur beschreiben von bestimmten registern sein oder?!

mfg schoasch

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Du bist auf einer Maturareise und nimmst dir noch die zeit hier im
forum zu helfen??!! respekt und vielen DANK!!!

Wo hast du den so viel von PIC gelern??

Ja, es gibt ein EEPROM CONTROL REGISTER(ADDRESS:9Ch)-EECON1
bit 7-4 unimplemented
bit 3 WRERR:EEPROM Error Flag bit
bit 2 WREN: EEPROM Write Enable bit
bit 1 WR: Write Control bit
bit 0 RD: Read Control bit

Ich glaube das hast du gemeint. Ja, im Datenblatt ist alles erklärt,
leider läßt mein Englisch zu wünschen übrig und 2. sind da nur
Assembler-Beispiel :-/

Und ich habe schon leider mühe meine C-kenntnisse(wenn mans püberhaupt
als Kenntnisse bezeichnen kann) hier anzuwenden.

nochmals vielen dank!!!

Autor: SChoaschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
lol sorry... das mit dem pdf aufmachen haut da echt nicht hin... hätte
den laptop grad zum aufhängen gebracht :D

So mir´ist noch eine  idee gekommen. vl hilft dir das etwas. hast du
schon mal auf der microchip seite geschaut? da gibts beispiel- und
hilfeprogamme, unteranderem auch zum programmieren des EEPROMS.

Direkter Link aufs pdf:
http://ww1.microchip.com/downloads/en/DeviceDoc/41191C.pdf

Oder:
http://www.microchip.com/stellent/idcplg?IdcServic...

Ich muss zugeben, mein wissen über PICs ist (noch) nicht wirklich
gross. ich hab in der schule eigentlich nur mit 8051er (atmel,
infineon) zu tun gehabt und hab eigentlich erst vor ca 3 monaten mit
den PICs begonnen.
woher ich mein wissen habe, kann ich dir gern verraten:
einerseits von www.sprut.de . diese seite ist sehr gut für grundlagen
und wenn es um assambler geht.
und die andere seite wo man sehr sehr viel lernt und welche auch mein
favoriert ist, ist www.fernando-heitor.de . diese befasst sich
hauptsächlich mit dem CCS compiler... aber mit etwas nachdenken ist es
sehr leicht möglich es auf alle compiler umzusetzen. Vorallem da Bernd
in diesem Forum ist sehr hilfreich und kann gut erklären und erklärt
das meistens eben nicht über speziallfunktionen sondern eben Über die
register (darum auch meine frage bezüglich dem register ;-)). also dort
solltest du auch mal rein schaun. vl findest du auch dort ein paar
beispielprogramm... bin mir ziemlich sicher. es gibt dort eine eigenen
kategorie für beispielprogramme. und fast alle in C. also schau mal
rein :D(falls mein link nicht stimmt, dann schau in der linksammlung,
da hab ich sie auch rein geschrieben.)

so, aber jetzt gehts wieder ab an den pool zum sonnen :D

schöne grüsse und viel erfolg.

Autor: Schoaschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So.. jetzt bin ich mal zurück aus dem "urlaub" :D... nur jetzt brauch
ich dann mal ned kleine erholungsphase :D

gibts schon neuigkeiten?

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!!

Ja,bin dabei zu testen, ob wirklich auch der eeprom angesprochen wird
usw.;-)

Und ich bin so gnädig, laß Dir noch heute die Erholungsphase, aber
wahrscheinlich morgen kommen wieder meine Fragen;-)

dann noch einen schönen abend;-)

Autor: Schoaschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
:-) OK... kein problem. Dann warte ich schon auf deine Fragen und deine
Erfolge :D

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.