Forum: Mikrocontroller und Digitale Elektronik Empfehlung Tutorial PIC16 (in C) ?


You were forwarded to this site from EmbDev.net. Back to EmbDev.net
von Markus L. (markus_fh)


Lesenswert?

Kann mir jemand ein brauchbares Tutorial für PIC16 in C empfehlen?

Deutsch oder Englisch ist egal, Video oder schriftlich auch. Es sollte 
vom Ansteuern von Ports beginnen und auch PWM, I2C, Interrrupts 
umfassen.

Edit: Das genaue Modell ist PIC16F1829, falls das noch wichtig sein 
sollte.

: Bearbeitet durch User
von Franko P. (sgssn)


Lesenswert?

Hallo
keine Ahnung, wo es ein Tutorial gibt. Hast du schon mal gekugelt?
Microchip bietet auf jeden fall ne kostenlose IDE und nen kostenlosen 
C-Compiler (XC8). Dann gibts die seite von sprut (www.sprut.de) und das 
Forum von Microchip (https://www.microchip.com/forums/Forums)
Da wird dir geholfen, wenns hakt.

Was hast du jetzt denn? hast du MPLAB und XC8 schon? Und wie siehts mit 
der Hardware aus? hast du nur den PIC oder auch ne Platine dazu?
Gruß
Gerhard

von Markus L. (markus_fh)


Lesenswert?

Franko P. schrieb:
> Was hast du jetzt denn? hast du MPLAB und XC8 schon?
Hab ich, das aktuelle MPLAB X inkl XC-Compiler. Platine hab ich selbst 
eine gemacht (hab das PicKIT4), funktioniert auch soweit mit Button 
einlesen und LED anschalten. Aber dann hörts halt auf ohne gescheite 
Einführung.

Mir wäre etwas, das man systematisch durcharbeiten kann ganz recht.

Damit wollte ich es eigentlich probieren, aber die Unmengen an 
flackernder Werbung lässt einen durchdrehen: 
https://deepbluembedded.com/interrupts-in-pic-microcontrollers/

sprut.de schien mir jetzt auf den ersten Blick veraltet (letzte Änderung 
teils 2007). Weiß nicht, ob das für den aktuellen Controller noch taugt.

von Teo (Gast)


Lesenswert?

Franko P. schrieb:
> von sprut www.sprut.de

So is es besser, wa?! ;)

von Teo (Gast)


Lesenswert?

Teo schrieb:
> Franko P. schrieb:
>> von sprut www.sprut.de
>
> So is es besser, wa?! ;)

Oder auch nicht....
In der Vorschau wars noch als Link dargestellt. :(
....
Sorry Franko

von Franko P. (sgssn)


Lesenswert?

Wenn du nix findest, dann überleg dir ein projekt. Im datenblatt steht 
ja eigentlich alles drin. Den Anfang hast du ja schon gemacht.
Vorschläge für Anwendungen:

- Kommunikation mit PC über UART (und UART-USB-Wandler)
- Anschluss von nem LCD-Display (über I2C, 1602, oä)
- Roboter (Anschluss von H-Brücken zum Betrieb von 2 Motoren, div. 
Sensoren Das ist eigentlich die Königsklasse)

gerhard

von Markus L. (markus_fh)


Lesenswert?

Ich hab ein Projekt. Aber ohne ordentliche Grundlagen das in Angriff zu 
nehmen halte ich für ein Fass ohne Boden. Notfalls läuft es aber da 
drauf hinaus.

von Franko P. (sgssn)


Lesenswert?

Immer Schritt für Schritt, das wird schon. Das geht alle so. Zuerst 
Projekt analysieren, einzelne Aufgaben herauskristallisieren, und dann 
die in Angriff nehmen.
Das problem bei Tutorials ist, dass die meist einen bestimmten PIC als 
beispiel nehmen, du natürlich einen anderen hast. Und leider sind die 
PICs meist nicht so ganz kompatibel untereinander. Manchmal hilft aber 
MCC. Den kannst du installieren. Schafft aber auch in problem: Der Code 
wird unübersichtlich.
:-)

: Bearbeitet durch User
von Uschi (Gast)


Lesenswert?

Ich würde auch https://www.sprut.de empfehlen, damit habe ich PICs 
programmieren gelernt. Da werden zwar fast nur ältere PICS besprochen, 
aber man kann sich gut einarbeiten.

Ich nehme auch gerne den PIC16(L)F1825, das ist einer der kleineren 
Brüder des 1829, da sind etliche Pins kompatibel zum 1829, letzterer hat 
halt 6 mehr GPIOs.

von Markus L. (markus_fh)


Lesenswert?

Uschi schrieb:
> Ich würde auch https://www.sprut.de empfehlen, damit habe ich PICs
> programmieren gelernt.
Sind die Beispiele da mit meinen uC kompatibel oder gehts da mehr drum 
wie man das prinzipiell macht und ich müsste dann die jeweiligen Bits, 
Register usw. im Datenblatt raussuchen?

von PIClig (Gast)


Lesenswert?

> ohne ordentliche Grundlagen

Die ordentliche Grundlage wird uebrigens mit installiert!
Das XC8-Manual. Das solltest du ausgiebig studieren.
Der XC8 nat naemlich so seine Eigenheiten, die andere
Compiler entweder nicht kennen oder nicht brauchen.

Daher sollte man auch vorab ein paar kleinere Fingeruebungen
in XC8-Assembler absolvieren.
So potent ist ein PIC16F1829 naemlich nicht, als das man
ihm und dem Compiler jeden Unsinn vor Fuesser werfen koennte.

Mit der Einstellung "Es muss C sein" wirst du da nicht weit kommen.

von PIClig (Gast)


Lesenswert?

> ich müsste dann die jeweiligen Bits,
> Register usw. im Datenblatt raussuchen?

[x]

von Uschi (Gast)


Lesenswert?

Markus L. schrieb:
> Uschi schrieb:
>> Ich würde auch https://www.sprut.de empfehlen, damit habe ich PICs
>> programmieren gelernt.
> Sind die Beispiele da mit meinen uC kompatibel oder gehts da mehr drum
> wie man das prinzipiell macht und ich müsste dann die jeweiligen Bits,
> Register usw. im Datenblatt raussuchen?

Das erst mal grundsätzlich, die PIC-Familie ist SEHR vielfältig und Du 
must dann das Datenblatt des jeweiligen ICs heranziehen.

von Erich (Gast)


Lesenswert?

PIClig schrieb:
>> ohne ordentliche Grundlagen
>
> Mit der Einstellung "Es muss C sein" wirst du da nicht weit kommen.
>
Da widerspreche ich.
Oder anders formuliert: Diese PIC16 sind für Assembler zu lernen schier 
ungeeignet, da zuviele "Spezialitäten" und Einschränkungen.
Auch sind die Zeiten von Assemblerprogrammierung dank funktionierender 
Compiler vorbei.
Ich rate hier zu folgender Suche bzw. Informationen:

  Gooligum midrange pic microchip programming

Gruss

von PIClig (Gast)


Lesenswert?

> Diese PIC16 sind für Assembler zu lernen schier ungeeignet

Du musst aber ein kleines Hirn haben, wenn die 35/49 Befehle
da nicht hineinpassen.
Der Abschnitt ueber Assemblerprogrammierung, ist sogar
regelmaessig Teil des Datenblatts.
Auch die Sequenzen um Funktionsregister zu setzen sind
in den Datenblaettern in (MPASM-)Assembler.
Wenn man mit dem XC8 etwas reissen will, sollte man sich allerdings
gleich an die Syntax des XC8-Assemblers gewoehnen und MPASM
links liegen lassen.

von Erich (Gast)


Lesenswert?

PIClig schrieb:
> Du musst aber ein kleines Hirn haben, wenn die 35/49 Befehle
> da nicht hineinpassen.
Da mach' Dir mal keine Sorgen.
Mein Sprachumfang diverser Programmier- und Fremdsprachen geht durchaus 
über 35 Worte hinaus, jeweils.
Und genau deswegen und in jahrelanger praktischer beruflicher Erfahrung 
u.a. genau mit dieser PIC "midrange" Architektur habe ich obigen 
gutgemeinten Ratschlag abgegeben.
Eines meiner mitentwickelten Produkte (Stückzahl 6-stellig pro Jahr) ist 
erstellt mit exakt Null Zeilen in Assemblerschreibweise. Weil es dortige 
Norm der Branche verlangt und ansonsten seitenweise Begründungen für 
eine Ausnahmeregelung nötig gewesen wären.

Gruss

von PIClig (Gast)


Lesenswert?

> Weil es dortige Norm der Branche verlangt

Hast du evtl. Allmachtsfantasien?
Den Rest der Welt duerfta das kaum interessieren.

Nebenbei bemerkt, dass Alter der PIC14/16-Architektur
laesst vermuten, dass diese Familie die ersten Jahre fast
ausschliesslich in Assembler programmiert wurde.
Und ebenso sei angemerkt, dass die Architektur sich auch
nicht besonders gut als Zielplattform fuer C eignet.

Im uebrigen habe auch ich schon Software geschrieben, die fuer
einen Einsatz noch vom TUeV zertifiziert werden musste.
Nicht fuer einen PIC16 sondern fuer einen X86.
Und natuerlich ganz ueberwiegend (> 99%) in C.
Aber es brauchte trotzdem 1% Assembler...
Das hat die Zertifizierung aber in keinster Weise behindert.

von Franko P. (sgssn)


Lesenswert?

Einspruch, Euer Ähren. Auch die PIC's haben sich weiterentwickelt. Und 
so resourcenschwach wie in der Anfangszeit waren sind sie schon lange 
nicht mehr. Microchip hat im 8-Bit Bereich zuerst die PIC18-Reihe 
aufgelegt, die sehr gut für Hochsprachen geeignet sind und anschliessend 
die PIC16-Reihe aufgebohrt. Die können heute locker mit der Konkurrenz 
mithalten.

Gruß

: Bearbeitet durch User
von W.S. (Gast)


Lesenswert?

Markus L. schrieb:
> Kann mir jemand ein brauchbares Tutorial für PIC16 in C empfehlen?

Ein Tutorial in C? Wie soll das aussehen?

Um mit den PIC16 zurecht zu kommen, lies dir das zugehörige Datenblatt 
gründlich durch. Das sollte für das Verstehen der PICs reichen. Was dann 
noch übrig bleibt, ist das Lesen der Dokumentation zu deinem Compiler, 
wenn du partout Assembler umgehen willst.

Ansonsten neige ich zu den Ansichten eines Vorredners: Ich programmiere 
diese Sorte von µC in Assembler und benutze für größere Projekte eine 
andere Architektur.

Das Problem der heutigen Programmierer ist, daß sie Erfolge haben 
wollen, ohne sich der Mühe des Programieren-Lernens unterziehen zu 
wollen. Daher der beständige Ruf nach Hersteller-Libs und 
maschinenunabhängigen Programmiersprachen.

W.S.

von Markus L. (markus_fh)


Lesenswert?

W.S. schrieb:
> Ein Tutorial in C? Wie soll das aussehen?
Etwa so: https://deepbluembedded.com/pic-programming-tutorials/

Nach dem ich den Adblocker drin habe ist es auch erträglich. Ob das 
Tutorial was taugt weiß ich noch nicht. Macht aber bisher keinen 
schlechten Eindruck. Assembler tue ich mir bestimmt nicht mehr an jetzt 
zum Einstieg, evtl. wenn es später mal für spezielle Probleme notwendig 
sein sollte. Ich hatte im Studium vor fast 20 Jahren übrigens auch 
Assemblerprogrammierung auf einem 8051, aber ich glaube kaum, dass das 
heute noch im Studium vermittelt wird.

von W.S. (Gast)


Lesenswert?

Franko P. schrieb:
> Einspruch, Euer Ähren. Auch die PIC's haben sich weiterentwickelt. Und
> so resourcenschwach wie in der Anfangszeit waren sind sie schon lange
> nicht mehr.

PIC16 waren noch nie ressourcenschwach, aber ihre Stärken werden von 
Leuten, die nur C können und die Controller nicht kennen lernen wollen, 
einfach nicht wahrgenommen.

Das ist der Punkt.

Im Grunde kann ich das verstehen, denn maschinenunabhängige 
Programiersprachen wie C können nicht auf spezielle Dinge von bestimmten 
Architekturen eingehen. Und so werden eben diese Dinge, die oftmals die 
Stärken der jeweiligen Architektur sind, weitestgehend ignoriert.

W.S.

von W.S. (Gast)


Lesenswert?

Markus L. schrieb:
> W.S. schrieb:
>> Ein Tutorial in C? Wie soll das aussehen?
> Etwa so: https://deepbluembedded.com/pic-programming-tutorials/

Die Tutorials sind in englisch und nicht in C, wie es der TO haben 
wollte.

W.S.

von Markus L. (markus_fh)


Lesenswert?

W.S. schrieb:
> die nur C können und die Controller nicht kennen lernen wollen,
> einfach nicht wahrgenommen.
Für den Einstieg ist es halt ein immenser Aufwand und daher 
demotivierend. Ich denke mal, Sensor per I2C anbinden und ähnliches, da 
braucht man kein Verständnis von Assembler. Für spezielle Probleme oder 
Optimierung sieht das anders aus, aber wie gesagt gehts mir jetzt mal um 
den Einstieg.

von Markus L. (markus_fh)


Lesenswert?

W.S. schrieb:
> Die Tutorials sind in englisch und nicht in C, wie es der TO haben
> wollte.
Ich bin der TO. Englisch ist kein Problem und das Tutorial ist auch in 
C. Also für meine Belange ok, falls es inhaltlich dann was taugt. Das 
wird sich bald zeigen.

von Erich (Gast)


Lesenswert?

Markus L. schrieb:

> sprut.de schien mir jetzt auf den ersten Blick veraltet (letzte Änderung
> teils 2007). Weiß nicht, ob das für den aktuellen Controller noch taugt.

Das hast du richtig erkannt, dein ausgewählter uC ist neuer, wenn auch 
bereits 10 Jahre alt.
Das sieht man immer am "Errata Sheet" des uC
Suche:
  Microchip errata sheet "pic16f1829"
Dort schauen wann der erste Fehler berichtet wurde ("Rev. A");
am Endbuchstaben der Datei erkennt man zudem sofort, wieviele Versionen 
der Errata es gibt.
Teils sind bestimmte "Macken" niemals korrigiert worden und nur mittels 
"work around" um schiffbar.
Die Revision des jeweiligen Chips wird im Programmer angezeigt.
Gruss von dem der mehr als 35 Befehle kennt.

von Mucky F. (Gast)


Lesenswert?

Markus L. schrieb:
> Kann mir jemand ein brauchbares Tutorial für PIC16 in C empfehlen?

Das hab ich mit MikroC gelernt.
https://www.mikroe.com/mikroc-pic


Sehr einfach aufgebaut, super Beispiele und Tutorials direkt in der 
Hilfe.

Ist aber in english und hat ein paar nicht ANSI konforme Zusätze. Aber 
einer bestimmten Codesize muss du eine Lizenz kaufen.

von Peter D. (peda)


Lesenswert?

Markus L. schrieb:
> Kann mir jemand ein brauchbares Tutorial für PIC16 in C empfehlen?

Der Grund für C ist ja, daß man unabhängig von der Architektur ist. Du 
kannst also einfach jedes C-Programm nehmen, z.B. für AVR oder 8051, um 
Dir Anregungen für eigene Projekte zu holen.

Nur die Hardwarezugriffe muß man anpassen (Timer, IO-Pins, Interrupts 
usw.). Das macht man am besten mit dem jeweiligen Datenblatt.

Eine Besonderheit der PIC16 ist, daß sie keine Interruptvektoren je 
Quelle haben. Man muß also erstmal umständlich ausklamüsern, welcher 
Interrupt denn nun zugeschlagen hat.
Eine andere Besonderheit ist, daß sie bei Bitbefehlen das Portlatch mit 
dem Inhalt des Eingangsregisters schreiben können, was zu unerwarteten 
Effekten führt.

von Der müde Joe (Gast)


Angehängte Dateien:

Lesenswert?

Microchip selbst hat das etwas im Angebot:

https://microchipdeveloper.com/8bit:start

Viel Spaß!

von Teo (Gast)


Lesenswert?

Peter D. schrieb:
> Eine andere Besonderheit ist, daß sie bei Bitbefehlen das Portlatch mit
> dem Inhalt des Eingangsregisters schreiben können, was zu unerwarteten
> Effekten führt.

Quatsch!
Sie beschreiben das Port-Register definitiv mit den dort anstehenden 
Logik-Pegeln. Daher wurde ein Latch-Register eingeführt. Bei den alten 
Typen ohne, muss das halt gegebenenfalls per SW nachgebildet werden.
Portzugriffe sind da halt immer Read-Modify-Write-Befehle, daher das 
Latch, auf dass das Port-Register NIEMALS schreiben kann.

von Teo (Gast)


Lesenswert?

PS: Dieser "Bug" tritt natürlich nur dann auf, wenn man die GPIOs 
außerhalb ihrer Elektrischen-Spezifikationen betreibt, überlastet, 
Fremdspannung, LEDs ohne VR.... #-\

von Netzwerker (Gast)


Lesenswert?


von Netzwerker (Gast)


Lesenswert?

Nach einem Tutorial für einen bestimmten PIC-Typen zu suchen ist 
übrigens nicht erforderlich, da die wesentlichen Module stets kompatibel 
sind und sich von der Art und Weise wie man sie programmiert in der 
Regel nicht unterscheiden.

von W.S. (Gast)


Lesenswert?

Markus L. schrieb:
> W.S. schrieb:
>> die nur C können und die Controller nicht kennen lernen wollen,
>> einfach nicht wahrgenommen.
> Für den Einstieg ist es halt ein immenser Aufwand und daher
> demotivierend.

Tja, etwas wirklich zu erlernen, ist zumeist mit Mühen verbunden. 
Hingegen das was alle machen, selber auch zu machen, ist relativ leicht, 
denn das kriegt man mit c&p hin.

Als ich in den frühen 90er Jahren mit dem damaligen PICALC unzufrieden 
war, hatte ich mir meinen eigenen Assembler geschrieben und als ich die 
PICs für Meßzwecke eingesetzt hatte und mir eine Gleitkomma-Arithmetik 
gefehlt hatte, hab ich mir selbige auch selbst geschrieben. Von wegen 
"demotivierend". Wenn man hingegen alles bereits vorgekaut haben will, 
damit man nicht einmal die eigenen Beißerchen zu gebrauchen nötig hat, 
dann ist wohl jegliche Anstrengung demotivierend.

W.S.

von Blue (Gast)


Lesenswert?

Also ich kan  wirklich nur empfehlen das Datenblatt zu benutzen. Habe 
damit in meiner Firma auch alles ohne andere tutorials hingekriegt 
(PIC24). Die Datenblätter sind sehr gut. Einfach mal auf der Homepage 
guckn, dort sind auch oft examples.

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.