Forum: Mikrocontroller und Digitale Elektronik Benötige Hilfe beim Einstieg in die Mikrocontrollerwelt mit PIC


von Tobias W. (towa)


Lesenswert?

Hallo,

ich bin dabei mich in die mikrocontrollerprogrammierung einzulernen. ich 
habe zuvor bereits einige spielereien mit arduino ausprobiert. ich lerne 
nun gerade mplab und den hi tech compiler c kennen. zum brennen der 
chips setze ich den sprut brenner 8 ein mit der zugehörigen software 
us-burn. um die schaltung zu testen nutze ich ein kleines selbstgebautes 
experimentierboard.
ich wollte fragen ob mir jemand aus seiner erfahrung raus tipps und 
empfehlungen geben kann bzw. will wie man am besten an das thema ran 
geht. z.b. mit einem buch was einen stück für stück anlernt (suche 
verzweifelt nach genau so einem buch, da ich gerne lernbücher zur stütze 
habe, war bei arduino auch so und hat super geholfen) oder andere tipps. 
momentan mache ich es eher nach dem prinzip ,, einfach drauf los,,

würde mich über rückmeldungen freuen


PS: ich habe bereits angefangen ein kleines programm für einen pic 
16f887 zu schreiben. es soll die ports a,b,c blinken lassen. aber das 
problem ist das nicht alle leds angesteuert werden. bei port A blinken 
die leds 6 und 7 nicht aber 0,1,2,3,4,5 blinken. bei port B genau das 
gleiche. finde nicht heraus woran es liegt. ich vermute das die ports 
nicht leuchten weil sie bereits für andere zwecke reserviert sind, steht 
im datenblatt. ist es möglich alle leds an den ports als reine i/o ports 
zu nutzen ? das ist mein code:

_____________________________________________________________________

#include <stdio.h>
#include <stdlib.h>
#include <htc.h>
#include <pic.h>
#include <pic16f887.h>
#define _XTAL_FREQ 4000000

__CONFIG(FOSC_HS & WDTE_OFF & PWRTE_OFF & MCLRE_ON & CP_OFF & CPD_OFF & 
BOREN_ON &
IESO_ON & FCMEN_ON & LVP_OFF &);
__CONFIG(BOR4V_BOR40V & WRT_OFF);

void main(void){
    TRISA = 0b00000000;
    TRISB = 0b00000000;
    TRISC = 0b00000000;

    while(1){
        PORTA = 0b00000000;
        PORTB = 0b00000000;
        PORTC = 0b00000000;
        __delay_ms(1000);
        PORTA = 0b11111111;
        PORTB = 0b11111111;
        PORTC = 0b11111111;
        __delay_ms(1000);
    }
}

von joachim (Gast)


Lesenswert?

Wie überall gilt auch hier: Du must das mächtigste Werkzeug ausserhalb 
deines Kopfes benutzen: das Datenblatt. Dort steht z.B:
3.1 PORTA and the TRISA Register
PORTA is a 6-bit wide, bi-directional port.

D.h., ddie oberen beiden Bits fehlen.


Tip:
Zum lernen sind die PICs für einen Anfänger nicht die Königslösung. sie 
sind ziemlich sperrig und scharfkantig, bei den Atmegas tust du dich 
erheblich leichter, auch ist dieses Forum hier deutlich AVR-lastiger.

von Chris B. (dekatz)


Lesenswert?

Beim 16F887 ist der PortA auch 8-Bit breit.
Da aber auf Grund von <CONFIG(FOSC_HS .......> an RA6 und RA7 
offensichtlich ein Quarz hängt, wird dort nichts blinken.

von Joachim .. (joachim_01)


Lesenswert?

Ahhh! Hab im PIC16F87X Data Sheet geschaut.
Hast recht, der PIC hat als einer der wenigen nen 8-bit Port (das meinte 
ich mit sperrig und scharfkantig), und, jetzt seh ichs auch, der 
Osc.quartz hängt an OSC1/RA6 und OSC2/RA7.

@TO:
Du mußt in diesem Fall den internen Ozillator benutzen, dazu mußt du das 
"FOSC_HS"
in
__CONFIG(FOSC_HS...
gegen
den RC-Oscillator ersetzen. Ich kenne den Syntax des hitech Conpilers 
nicht, könnte aber FOSC_RC, OSC_RC o.ähnl. lauten. Dann sollten sich 
alle Bits von PORTA umschalten lassen.

von Tobias W. (towa)


Lesenswert?

danke für die schnellen rückmeldungen. Ich werde versuchen die 
configurationseinstellungen zu ändern.
auf meine andere frage zurück zu kommen, kennt jemand von euch 
vielleicht ein buch was einem das erlernen der mikrocontrollermaterie 
erleichtert? kann auch ruhig über atmel chips sein.

vlg

von ich (Gast)


Lesenswert?

Ich find den Tip nicht so besonders;) Ich hab auch mit PICs angefangen 
und bin mit klar gekommen. Abgesehen davon hat er ja schon etwas zum 
Programmieren, obwohl ein PICKIT schon deutlich mehr kann und man auch 
direkt aus MPLAB brennen kann.

Joachim ... schrieb:
> Du mußt in diesem Fall den internen Ozillator benutzen, dazu mußt du das
> "FOSC_HS"
> in
> __CONFIG(FOSC_HS...
> gegen
> den RC-Oscillator ersetzen. Ich kenne den Syntax des hitech Conpilers
> nicht, könnte aber FOSC_RC, OSC_RC o.ähnl. lauten. Dann sollten sich
> alle Bits von PORTA umschalten lassen.

Damit schaltet man aber auf RC-Glied um und nicht auf Internen 
Oscillator. Das geht mit INTOSC bzw INTOSCIO (damit RA7 und RA8 als IO 
genutzt werden können).


joachim schrieb:
> sie sind ziemlich sperrig und scharfkantig,

Ach, so ein Plastik-DIP-Gehäuse ist doch schön abgerundet ;)


joachim schrieb:
> bei den Atmegas tust du dich
> erheblich leichter, auch ist dieses Forum hier deutlich AVR-lastiger.

Da kann man sich ja auch "nur" aussperren :P
Sorry, bei PICs ist es immer der niedrigere Takt und das höchst 
anspruchsvolle und zum Scheitern verurteilende Bank-Switching, bei AVRs 
ist es eben das verfusen ;)

von ich (Gast)


Lesenswert?

Tobias Wagner schrieb:
> kann auch ruhig über atmel chips sein.

Das macht ja nicht soo viel Sinn, wenn du mit einem PIC umgehen willst. 
Das meiste, was du davon gebrauchen kannst, steht auch in einem normalen 
C-Buch drin. Da du aber ein Sprut-Brenner hast, kannst du auch auf Sprut 
gucken, immer eine große Anlaufstelle für deutschsprachige. Kann man ja 
auch ausdrucken ;)
Aber ein Buch kenne ich nicht, hab ich auch nicht benutzt. Solange man C 
einigermaßen beherrscht (da gibts bestimmt mehr Auswahl an Büchern), ist 
der Rest etwas, was man auch gut aus dem Datenblatt lernen kann. Einfach 
mal z.B. das Kapitel über die IOs lesen, über die CPU, dann ggf Module 
wie ADC oder PWM, ....

von Joachim .. (joachim_01)


Lesenswert?

Hm. Das Datenblatt (zum 16F87X) hat kein Kapitel über die 
Oscillator-Konfiguration. Sieht so aus, als ob die kleinen 16Fxxx gar 
keinen internen RC-Osc haben...?

von mknoelke (Gast)


Lesenswert?

joachim schrieb:
> Tip:
> Zum lernen sind die PICs für einen Anfänger nicht die Königslösung. sie
> sind ziemlich sperrig und scharfkantig, bei den Atmegas tust du dich
> erheblich leichter, auch ist dieses Forum hier deutlich AVR-lastiger.

Die PICs sind tolle MCUs, ohne Frage.
Ist aber eher was für den Hartgesottene. Jeder PIC ist anders, selbst 
innerhalb einer Bausteinfamilie.
Für den Einsteiger ist das aus vielen Gründen sehr hartes Terrain.

Wenn es keine zwingenden Gründe gibt bleib bei den AVRs.
Die Arduinos sind eine tolle Spielwiese um dem Thema näher zu kommen und 
wenn Du Sattelfester geworden bist nimmst Du die Arduino Hardware und 
bügelst Deine eigenen Programme dort rauf.
Das ist nichts weiter als ein blanker AVR mit einem Minimum an Hardware 
eingepackt in eine IDE die sich an den Einsteiger richtet und leichte 
Lesbarkeit über Geschwindigkeit stellt.

Wenn Du statt dessen das AVR Studio benutzt hast Du ein wirklich 
mächtiges Werkzeug das über alle Atmel Familien hinweg zu benutzen ist
GCC statt proprietär und im Netz gibt es unzählbar viele Codeschnipsel 
und Anleitungen.

Bleibst Du beim PIC mußt Du Dir angewöhnen zu aller erst die Errata zu 
lesen. Manches geht nicht was gehen sollte.
Errata, Datasheet, Family Reference. In der Reihenfolge.
Beim PIC ist soviel miteinander verknotet das am Anfang 60% Deiner Zeit 
darin besteht zu lesen und Dich in möglichst kleinen Schritten dem 
Ergebniss zu nähern.

Deinen Sprut Programmer samt Software kenne ich nicht, aber bleib 
möglichst bei der recht preiswerten Microchip Hardware denn Du wirst 
einen Debugger brauchen und soviel Unterstützung in der IDE wie Du 
bekommen kannst.

von GroberKlotz (Gast)


Lesenswert?

mknoelke schrieb:
> Bleibst Du beim PIC mußt Du Dir angewöhnen zu aller erst die Errata zu
> lesen. Manches geht nicht was gehen sollte.
> Errata, Datasheet, Family Reference. In der Reihenfolge.
> Beim PIC ist soviel miteinander verknotet das am Anfang 60% Deiner Zeit
> darin besteht zu lesen und Dich in möglichst kleinen Schritten dem
> Ergebniss zu nähern.

Das halte ich für absolut übertrieben! Ich konnte mich mit der gleichen 
Ausrüstung wie der Tobias und mit Hilfe der Seite von sprut, problemlos 
und ohne "Knoten" lösen zu müssen in die PIC-Programmierung einsteigen. 
Von den genannten Schwierigkeite keine Rede! Überhaupt finde ich es doof 
wenn von den Liebhabern der AVRs auf die PICs hochnäsig runtergeschaut 
wird. Ich bin überzeugt, dass beide Gruppen von µC gleichwertig sind und 
es nur auf die einmal erfolgte Einarbeitung, bzw. persönliche Neigung 
ankommt.

Ich frage mich warum - wenn schon mal einer zu PICs ne Frage stellt - 
das immer gleich in eine Diskussion pro/contra münden muss. Beantwortet 
dem TO seine Fragen und damit ist es gut!

mfG
GroberKlotz

von GroberKlotz (Gast)


Lesenswert?


von Jürgen S. (Firma: privat) (jschmied)


Lesenswert?

Hallo!

Hol dir unbedingt einen pickit2 oder ähnliches. Dann hast Du in der IDE 
Einzelschrittbetrieb, kannst Register lesen usw. Ein Clon gibts bei EBay 
für ca. 20 EUR.

Testboards bei OLIMEX o.ä. Am Anfang ist auch ein Breadboard 
unbezahlbar.

Praktisch ist es auch, über COM-Port oder USB (z.B. UM245R auf 
Breadboard stecken) ein Debugausgang zu haben. Da kann man mit printf 
alles rausschreiben. Über den UM245 kann man die Schaltung auch super 
mit Spannung versorgen.


vg

Jürgen

von mknoelke (Gast)


Lesenswert?

GroberKlotz schrieb:
> Von den genannten Schwierigkeite keine Rede! Überhaupt finde ich es doof
> wenn von den Liebhabern der AVRs auf die PICs hochnäsig runtergeschaut
> wird. Ich bin überzeugt, dass beide Gruppen von µC gleichwertig sind

Brr, schön langsam kleiner Wüterich.
Habe ich nicht gesagt das das tolle MCUs sind ?
Ich programmiere PICs, AVRs, STM8, 8051 etc. pp.

Dem Threadstarter ging es um Hilfe und Infos und er hat schon was mit 
AVRs gemacht.
Die Aussage war: 'Ja es geht, wenn Du Dir einen gewissen stil angewöhnst 
geht es leichter. Wenn Du mit etwas weitermachst das Du schon kennst 
geht es noch einfacher.'

Worauf immer Deine Überzeugungen sich auch begründen, von Gleichwertig 
kann überhaupt keine Rede sein.
Alle können unterschiedliche Sachen gut oder schlecht.
Bei allen Unterschieden ist keine Reihe ultimativ in allem besser oder 
schlechter.

von Tobias (Gast)


Lesenswert?

hallo,

das problem mit dem port ist mittlerweile erkannt und verstanden. danke 
für die links und infos. aus der diskussion was besser ist avr oder pic 
halte ich mich raus, bringt mich beim erlernen der 
mikrocontrollerprogrammierung nicht weiter ;)

vlg

von Chris B. (dekatz)


Lesenswert?

Nun gut, zu PIC vs. AVR vs. sonstirgendwas kann ich nix beitragen.
Aber .......
Entwicklungsumgebung:
MPLAB ist mittlerweile auf dem Abstellgleis, Ende Juli ist V8.92 
erschienen und das war das endgültige Update. Kommende Controller werden 
nicht mehr in MPLAB eingepflegt. Es wird nur mehr MPLABX 
weiterentwickelt wie auch die dazugehörigen Compiler (XC8, XC16 u. 
XC32).

Programmer:
Auch wenn es etwas teurer wird - aber nimm gleich einen PICKIT3. 
Spätestens wenn modernere PIC (16Fxxxx, diverse PIC18 und erst recht 
PIC24 etc) Programmieren und Debuggen willst, reicht PICKIT2 oft nicht 
mehr aus. Man kann dafür ohne weiteres einen "Chinakracher" nehmen - so 
einer läuft auch hier ohne Probleme.
Der PICKIT2 hat nur den Vorteil das er als UART-Tool und als 
Mini-Logikanalyzer verwendet werden kann.

von Picker (Gast)


Lesenswert?

Bei Olimex gibt es einen wirklich sehr gutem und hochwertigen  Pickit 3 
Clon für 20€.
Bei Watterott Kauf dir nen ubw32 und Du bist glücklich, hat auch nen 
bootloader.

Und spiel mal mit mmbasic, tolles Zeugs;-).

Alles unter 50€.
Mplabx ist frei.

Go for Gold.

von ich (Gast)


Lesenswert?

Joachim ... schrieb:
> Hm. Das Datenblatt (zum 16F87X) hat kein Kapitel über die
> Oscillator-Konfiguration. Sieht so aus, als ob die kleinen 16Fxxx gar
> keinen internen RC-Osc haben...?

Neuere PIC16er haben vier stellen hinterm F. Diese haben soweit ich das 
sehe alle einen internen Osc. Der von Tobias verwendete PIC16F887 hat 
auch einen, trotzdessen er schon einige Zeit aufm Buckel hat. Irgendwann 
fing es halt mal an. Ich hab mir angewöhnt, nur noch PIC18er mit einem K 
oder J im Namen oder ein PIC16xxxx oder PIC12F1822/1840 zu nehmen, wenn 
8bit. Sind neu und Low-Power.

Dem Rat zum PICKIT3 kann ich mich nur anschließen. Ich hatte auch einen 
Sprut Brenner8. Dann kam ein neuer PIC16 und auch die PIC32-Reihe raus. 
Beide wurden von USburn und Brenner8 nicht unterstützt. Da kam dann das 
PICKIT3 und ich bin zufrieden. Auch denke ich, dass du auf jedenfall 
gleich mit MPLAB X und ansich auch mit XC8 anfangen solltest. Eben wegen 
dem Support. Ist so als wenn du neu in der PC Welt bist, ein bisschen 
was mit SuSe(Linux) gemacht hast und nun zu Windows wechselst. Da fängt 
man auch nicht mehr mit XP an sondern nimmt gleich Win7/8. Dadurch, dass 
MPLAB X & XC8/16/32 noch nicht soo alt sind, wird es dazu warscheinlich 
kaum Bücher geben. Und ich muss zugeben, dass die Hilfe von MPLAB X und 
den Compilern aus meiner Sicht nicht soo der Bringer ist. Aber das 
machen die Code-Sammlung auf microchip.com und die große Lib und 
Beispiele und Applicationnotes wieder wett.

Frohes schaffen ;)

von Tobias W. (towa)


Lesenswert?

hallo,

danke für die rückmeldungen.

Dein vorletzter Satz erregt mein Interesse am stärksten :)

Ich habe nun einige Tutorials zum Einstieg in die PIC Welt 
durchgearbeitet und MPLABX eingerichtet. Jetzt bin ich auf der Suche 
nach einer Sammlung von Beispiel bzw. Lerncodes um mir nach und nach 
durch das durcharbeiten dieser beispiele noch mehr wissen anzueignen und 
die theorie mal in der praxis zu sehen. ich suche also eine seite wo man 
solche beispiele findet, am besten nach schwierigkeitsgrad sortiert und 
mit erklärung. Ich habe schon eine seite gefunden die vom aufbau exakt 
so ist wie das was ich suche, allerdings sind die code in assembler 
geschrieben und ich suche c

das ist sie:

http://sprut.de/electronic/pic/programm/index.htm

Meine Frage wäre jetzte ob jemand von euch mir eine Seite empfehlen kann 
die die anforderungen erfüllt und in c programmierte codes behandelt.


ich würde mich über rückmeldungen freuen.

von Michael S. (rbs_phoenix)


Lesenswert?

Also es gibt einmal:
http://pic-projekte.de/wiki/index.php?title=Hauptseite

Dann eben www.microchip.com . Dort unter "Design Support" -> "Software" 
sind Libs und Beispiele zu finden (sortiert nach Anwendung und 
PIC-Familie).

Eventuell auch interessant:
http://www.libstock.com/project_categories

Dort ist vieles für Compiler der Firma mikroE, doch C-spezifisches und 
ggf Hardware-spezifisches ist sicherlich übertragbar. Wenn man z.B. ein 
EEPROM über I²C ansteuern will, ist es egal, ob man nun I2C_Write(..) 
oder eine andere Funktion (aus der Lib für XC8) aufruft.

von Jürgen S. (Firma: privat) (jschmied)


Lesenswert?


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.