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
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.
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.
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.
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
@ 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!
@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.
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
> 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.
@ 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
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.