Forum: Mikrocontroller und Digitale Elektronik Aufbau eines PIC


von Torben (Gast)


Lesenswert?

Hallo,

im Rahmen einiger Bastelideen bin ich, als totales Greenhorn, auf 
Microcontroller gestoßen. In diesem Falle die PICs.

Ich habe mich schon auf "sprut.de" eingelesen und die grundzüge 
verstanden.
Jedoch hänge ich im Moment an ein, zwei Stellen.

wenn ich das richtig aufgefasst habe, besteht ein PIC:

1. aus einem Prozessor, der sie Rechenvorgänge bewältigt
2. aus einem Programmspeicher, in den man das Programm brennt.
3. aus dem RAM/Arbeitsspeicher, indem man Daten zwischenspeichern kann.
4. aus den Ports bzw Pins, als Ein- und Ausgänge.

Der RAM ist mehrere Bytes groß, die jeweils aus 8 Bits bestehen, welche 
die berühmten Einsen und Nullen darstellen.
Je nach der Bedeutung eines Bits, kann ein Bit eine Einstellung 
bedeuten( Pin = Eingang/Ausgang) oder als Teil eines Bytes einen 
Zahlenwert ergeben.

Nun wir in der Erläuterung auf "www.sprut.de" von Bänken gesprochen, 
womit ich nichts anzufangen weiß.

Kann mir einer erklären, was Bänke sind, als auch ob meine Ausführung 
stimmen oder ob ich grundlegende Fehler in meinem Verständnis habe.

MfG Torben

von MaWin (Gast)


Lesenswert?

Aus vollkommen bescheuerten historischen Gründen
kann der PIC nicht auf alle Speicherstellen ohne
Umschaltung zugreifen.

Obwohl z.B. der PIC16F84 7 bit für die RAM-Adresse
in seinen Befehlsfeldern frei hält, also 128
Möglichkeiten hat, und nur 68 bytes RAM beinhaltet,
also der Adressbreich locker ausreichen würde,
hat Microchip ihn in 2 Bereiche
aufgeteilt, und man muss ihm, durch ein entsprechendes
bit RP0 im Register STATUS, vorher sagen, in welchen
bank (Bereich) diese 7 bit Adresse zugreift.

z.B. haben TMR0 und OPTION_REG dieselbe Adresse 1,
aber einer liegt in Bank 0 der andere in Bank 1,
und PORTA und TRISA teilen sich Platz 5 und
PORTB und TRISB Platz 6 und EEDATA und EECON1
Platz 8 und EEADR und EECON2 Platz 9. Stimmte
vor dem Zugriff das bit RP0 in STATUS nicht, greift
der Prozessor einfach auf die falsche Speicherstelle
zu.

Glücklicherweise liegt der eigentliche RAM Bereich
von 12 bis 79 ohne Unterteilung in 2 Banks (Bereiche)
drin.

Weil das so krank ist, nutzen viele Leute lieber die
AVR Prozessoren von Atmel, als die uralten PIC von
Microchip.

von Ohforf S. (ohforf)


Lesenswert?

MaWin schrieb:
> Weil das so krank ist, nutzen viele Leute lieber die
> AVR Prozessoren von Atmel, als die uralten PIC von
> Microchip.

Die Betonung liegt auf "uralt"... es gibt eine grosse Auswahl an PICs, 
auch ohne das lästige Bankswitching.
Der 16F84 ist ein schlechtes Beispiel, weil total veraltet.
Mich störts eh nicht, weil der C-Compiler mir diese lästige Mühe 
abnimmt.
Einen RISC-uC in Assembler zu programmieren ist Masochismus.

von MaWin (Gast)


Lesenswert?

Passt in den PIC16F84 mehr als ein main() { while(1) { } } ?

Nur, wer uC in Assembler programmiert, merkt, wie viel Code ein Compiler 
erzeugen müsste, und wie wenig für den 1k ist.

von Peter D. (peda)


Lesenswert?

MaWin schrieb:
> Nur, wer uC in Assembler programmiert, merkt, wie viel Code ein Compiler
> erzeugen müsste, und wie wenig für den 1k ist.

Nö, nur wer kein Assembler lesen kann, für den ist 1kB wenig.

Man muß eben nur nicht für sämtliche Variablen double nehmen, sondern 
das gerade sinnvolle Format (oftmals reicht uint8_t), dann kann man auch 
effektiv programmieren. Und auch keinen seitenlangen Spaghetticode, 
sondern sinnvoll in Funktionen und Schleifen unterteilen.

Wer das Assemblerlisting des Compilers lesen und daraus 
Schlußfolgerungen ziehen kann, für den sind 1kB ne Menge.


Peter

von Master S. (snowman)


Lesenswert?

@ Torben: zurück zu deinem thema/fragen: das mit RAM, ROM etc. hast du 
richtig verstanden. was du noch vergsessen hast. ist, dass sich 
mikrokontroller durch praktische hardware-module kennzeichnen: 
beispielsweise anstatt für eine RS232 (serielle PC-schnittstelle) im 
programm die pins zeitrichtig zu toggeln, gibt's darfür ein modul, in 
das du den zu übertragenden wert schreibst und sagst 'los, jetzt senden' 
und sich dann dieses modul selbstständig um die übertragung kümmert - 
dir also viel aufwand abnimmt. beispiele für solche module sind I2C, 
RS232, Timer etc.

wenn du neu bei den PICs bist, vergiss die 16er-reihe!!! wie oben 
beschrieben und immer wieder schlecht gemacht wird: die haben 
verschiedene bänke, zwischen denen umgeschlatet werden muss - resp. um 
die du dich beim assembleren oder der compiler, wenn du in C 
programmierst, kümmern musst.

die PIC18 sind ideal: einfach und nicht zu überladen. die PIC24 sind 
schneller und haben mehr solche hardware-module, sind aber ein bisschen 
komplizierter.

sprut.de ist genial um die funktionsweise und die hardware der PICs 
kennen zu lernen - und falls du willst in assembler zu programmieren. 
für einen ersten und schnellen erfolg (und somit spass) empfehle ich dir 
wärmstens mit PIC18 und MPLAB + C18 zu beginnen!

viel spass!

von Ich (Gast)


Lesenswert?

Machs lieber mit AVR: neuer, besseres Tutorial (wo wohl?)

von Master S. (snowman)


Lesenswert?

@Ich: dieser "ratschlag" musste wohl kommen!? bitte, mach dafür einen 
eigenen 1001-ten thread auf, ja?! ..PICs und AVRs sind ebenbürdig: für 
beide familien gibt es sowohl alte bekannte uC oder aber moderne 
exemplare mit viel leistung (die 1000 threads in diesem forum, die das 
behandlen, vergleich oft alte PICs mit neuen AVRs - naja..). die einen 
mögen lieber die entwicklungsumgebung für AVRs, die anderen MPLAB für 
PICs - ich konnte/musste mit beiden arbeiten und bin bei PICs geblieben 
(MPLAB ist wirklich angenehm), andere sind bei AVR geblieben.
wenn du dich bereits bei den PICs eingelesen hast, bleib bei denen. wenn 
du später verstehst wie uC funktionieren und die AVRs gegen die PICs 
abschätzen kannst und die AVRs besser findest, kannst du immer noch 
wechseln, aber zu beginn würde ich dir empfehlen auf eine familie zu 
setzen.

von Daniel M. (dmar)


Lesenswert?

Schau mal auf der Seite von microchip nach und les
die z.B. den User´s Guide zum PICKit3 durch.
(in Englisch)

Evtl. besorgst du dir auch gleich das PICKit3 mit Demoboard (PICKit3 
Debug Express).

http://www.microchipdirect.com/productsearch.aspx?Keywords=DV164131

(Als Student/Schüler gibt es Rabatte)

Eine weitere Möglichkeit ist dir PIC´s am Besten den PIC 18F4550 
kostenlos von Microchip schicken zu lassen und dir ein Board von einem 
Drittanbieter zu besorgen + PICKit3 ohne Zubehör.

Ich hab z.B. das P40 von olimex.

Oder du holst gleich alles bei wem anders z.B. mikroe.com

von Master S. (snowman)


Lesenswert?

> am Besten den PIC 18F4550
der ist wirklich gut, um die ersten schritte zu machen und wird lange 
hinhalten (hat viel drin)

ja, ein PICkit3 in der eBucht kaufen oder ein ICD2-Clone selber 
nachbauen, ist sehr ratsam und günstig.

dann noch MPLAB und C18* gratis runterladen
http://www.microchip.com/MPLAB
http://www.microchip.com/C18

dann ein demo-board kaufen (mit taster, ein paar LEDs und einem 2x16 LCD 
- mehr braucht's am anfang nicht) oder vorerst mal auf einem steckbrett 
(geht auch ganz gut) das aufbauen, was man gerade braucht.


* die sog. "student"-version ist freeware und schaltet nach 60 tagen ein 
paar code-optimierungen ab, die für hobby- und studium zu selten 
gebraucht werden, als dass es darauf ankommt.

von Torben (Gast)


Lesenswert?

@ alle
Erst einmal danke für die vielen und schnellen Antworten.

Ich werde auch erst mal bei den PICs bleiben, vorallem weil ich mir 
schon den auf sprut.de vorgestellten Brenner8 nachgebaut habe.

Eure Antworten haben mir sehr weitergeholfen und ich seh solangsam recht 
klar, was den Microcontroller angeht.

Nur woran erkenne ich, ob ein PIC die Bank-Unterteilung hat oder auch 
nicht?

MfG Torben

von simon (Gast)


Lesenswert?

Hi,

steht im Datenblatt, dort taucht des dann bei der Registerbeschriebung 
auf. Die Tabelle mit den Registern hatt dann mehrere Spalten mit den 
Registern und oben stehen die Status-Bits, links die Adressen.

Gruß simon

von Maik W. (werner01)


Lesenswert?

servus,

die pic18'er Reihe hat des bankswitching nicht mehr!
zu meinen Erfahrungen:

ich habe angefangen mit pic16f628! Habe mir bewußt nur Controller der 
16'er
Reihe bis 2 Kbyte rom geholt weil darüber B.-switching von Nöten ist!
Bin danach tu Pic18f2550 weil 12 Mips und relativ leicht zu programmiern 
und konnte die bei 15 mips anstatt 12 mips laufen lassen. die lf-Tyen 
haben 16 Mips.
Da ich aber mehr Rechenleistung brauchte, bin ich jetzt bei den Pic24hj 
Typen gelandet!
Die sind ein wenig kommplizierter zu handhaben, sind dafür aber sehr 
schnell und das bei 16 Bit Breite, haben also 40 Mips!

Ich bin Assemblerprogrammierer weil ich die Rechenleistung effektiv 
nutzen möchte.
mein Fazit ist:

Die Pic18'er ist zwar etwas langsamer als die 8-Bit AVR's (4 Mips), sind 
aber viel leicher zu beherrschen.
Die Pic24HJ sind der Hammer, denn sehr starke 16-Bitter ,denn 40 Mips 
bei 16 Bit.

viel Spaß beim proggen

von stepp64 (Gast)


Lesenswert?

Maik Werner schrieb:
> die pic18'er Reihe hat des bankswitching nicht mehr!
> zu meinen Erfahrungen:

Das ist so nicht ganz richtig. Auch die 18F haben immer noch RAM-Banke 
(bis zu 16 Stück mit jeweils 256 Bytes) welche über das BSR-Register 
ausgewählt werden können. Bei den 18F wurden in Bezug auf den RAM auch 
noch andere Dinge geändert. So liegen jetzt die SFR-Register (also die 
Steuerregister) in Bank 15 auf den Adrssen 0x60 - 0xFF. Zusätzlich gibt 
es eine Art "virtuelle" Bank, die Access-Bank. In der Access-Bank werden 
die Bytes 0x00 bis 0x5F aus Bank0 mit den SFR-Registern in eine Bank 
gelegt. In jedem Befehl, der auf den RAM zugreifst kann man nun angeben, 
ob man Zugriff auf die Access-Bank haben will oder auf die Bank, auf 
welche das BSR-Register zeigt. Dadurch entfällt quasi das Bankswitching 
bei den SFR-Registern, da man im Befehl einfach angibt die Access-Bank 
zu benutzen. Seine eigenen Daten legt man dann einfach in z.Bsp Bank 1 
und stellt das BSR auch auf Bank 1. Nun kann man einfach im Befehl 
zwischen den eigenen Daten und den SFRs umschalten. Benötigt man mehr 
wie 256 Bytes muss man allerdings wieder umswitchen...

Schönes WM Spiel heute
Sven

von Dieter W. (dds5)


Lesenswert?

stepp64 schrieb:
> Maik Werner schrieb:
>> die pic18'er Reihe hat des bankswitching nicht mehr!
>> zu meinen Erfahrungen:
>
> .... Benötigt man mehr wie 256 Bytes muss man allerdings wieder
> umswitchen...

oder man benutzt zur Adressierung einen der 3 fsr Pointer, die können 
den kompletten RAM Bereich ansprechen incl. so nützlicher Sachen wie 
z.B. autoincrement oder decrement.

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.