Pic32
Auf dieser Seite dreht sich alles um den Miktrokontroller PIC32MX220F032D [1].
Es folgt sicher bald der ein oder andere Talk zu diesem Mikrokontroller, der MIPS-Architektur, Pinguino, dem Flauschball und anderen in Bezug stehenden Projekten. (Wer mag kann da gerne was von übernehmen)
Pinguino
Pinguino ist ein an Arduino angelehntes open source Projekt. Eines der Pinguinoboards verwendet genau den Mikrokontroller unseres Begehrens.
Status: 7 Stück dieser dieser Pinguinoboards wurden bestellt. Kostenpunkt: 11,84 Eiros pro Stück.
Zwei der Boards werden künftig im Space liegen. Diese können gerne zum Experimentieren verwendet werden. Wer eins davon besitzen möchte, braucht nur 12 Striche bei yela an die Mate-Credittafel zu kritzeln.
Entwicklung
Entweder Pinguino-IDE nehmen: Die ist allerdings viel schwarze Magie (geht schon mit dem USB-Bootloader los).
Für den Anfang alternativ ein reiner Toolchain+Makefile-Ansatz: http://hilses.de/project-template.tar.gz (Achtung: enthält Linker-Konfiguration für PIC32-PINGUINO-MX220). Benötigt zur Zeit die XC32-Toolchain von Microchip: http://www.microchip.com/pagehandler/en-us/family/mplabx/#downloads (dort sind auch die Compiler, u.a. XC32, verfügbar). Beispielprojekt mit Benutzung des Microchip Application Library USB Stacks: http://hilses.de/project-usb-generic-demo.tar.gz (aktualisiert zuletzt 5.8.2012)
Die Microchip Application Libraries können hier heruntergeladen werden: http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2680&dDocName=en547784
Die aktuelle Version hat noch einen Bug bei USB im Interrupt-Betrieb in Verbindung mit PIC32MX1xx/2xx - also auch unserem Gerät. Soll der Interrupt-Modus genutzt werden, kann dieser Patch für die Application Libraries verwendet werden: http://hilses.de/microchip-applibs-usb-hal-pic32-mx1xx2xx-bug.patch.txt
Zum Flashen ist zur Zeit mphidflash Mittel der Wahl. Am besten die letzte SVN-Version, da die ohne libhid auskommt (benutzt stattdessen libusb-0.1) und vernünftig mit einfachen Nutzerrechten flashen kann: http://code.google.com/p/mphidflash/source/checkout
Bootloader
Der mitgelieferte Bootloader ist sehr groß. Zu beachten ist, dass immer die Linker-Konfiguration (procdef.ld) in den Projekt-Sourcen sein muss, sonst greift die PIC32MX220F032D-Standard-Konfiguration -- die weiß nichts von einem Bootloader und generiert Code, der den Bootloader-Code überschreiben sollte (was der Bootloader selbst eigentlich verhindern müsste, kann aber mangels tatsächlichem Source-Code nicht überprüft werden). So wie es ausschaut überprüft der Bootloader nicht die Grenzen, es ist also möglich mit einer falschen Linker-Konfiguration den Bootloader zu überschreiben. Soll schon vorgekommen sein ;-)
Der Bootloader scheint ansonsten ein gemäß Microchip AN1388 (http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en554836) gestrickter zu sein.
Für eigenen Code stehen in KSEG0 (Program Memory) 0x3600 Bytes, das sind 13824 Bytes, zur Verfügung.
Im besten Falle sollte uns gelingen, den USB-Stack des Bootloaders zu verwenden, denn mit einem weiteren USB-Stack ist das Program Memory ansonsten voll.
Perspektivisch sollte ein Umstieg auf den UART-basierten Bootloader (viel, viel kleiner, benötigt aber 3.3V-Pegel-Interface) erwogen werden.
Register
Für Neugierige: Nach einem Boot mit dem Pinguino-Bootloader und bei laufender Applikation mit USB-Stack (USB generic client, Interrupt-Handling aktiviert) sieht so der Inhalt der Register aus: http://hilses.de/pinguino-mx220-registers.html
Pinbelegung
Leider ist das Board nicht entsprechend der typischen MCU-Pin-Namen beschriftet, sondern in einem Pseudo-Arduino-Stil. Pinout des MCUs: http://ww1.microchip.com/downloads/en/devicedoc/61168b.pdf#page=20 (PIC32MX1xx/2xx Family Datasheet) Tatsächlich hat das Board folgende Pinbelegung:
PIC32 Pinguino MX220 ==================== Pin on PCB PIC32 pin ========== ========= (osc) 30: OSC1 (CLKI/RPA2/RA2) 31: OSC2 (CLKO/RPA3/RA3) USB: ==== (VUSB/+3.3V) 10: VUSB VBUS (+5V) 42: VBUS USB D+ 08: PGED2/RPB10/D+/CTED11/RB10 USB D- 09: PGEC2/RPB11/D-/RB11 GND ID (n.c.) UEXT: ===== +3.3V (P1) GND (P2) U1TX (P3) 33: SOSCI/RPB4/RB4 U1RX (P4) 34: SOSCO/RPA4/RA4/T1CK/CTED9 SCL1 (P5pu) 44: RPB8/SCL1/CTED10/PMD4/RB8 SDA1 (P6pu) 01: RPB9/SDA1/CTED4/PMD3/RB9 SDI1 (P7) 32: TDO/RPA8/PMA8/RA8 SDO1 (P8) 35: TDI/RPA9/PMA9/RA9 SCK1 (P9) 14: CVREF/AN10/C3INB/RPB14/VBUSON/SCK1/CTED5/RB14 UEXT CS (P10pu) 13: TCK/CTED8/PMA7/RA7 Analog Con2: ============ A0 25: AN6/RPC0/RC0 A1 26: AN7/RPC1/RC1 A2 21: PGED1/AN2/C1IND/C2INB/C3IND/RPB0/PMD0/RB0 A3 22: PGEC1/AN3/C1INC/C2INA/RPB1/CTED12/PMD1/RB1 A4 23: AN4/C1INB/C2IND/RPB2/SDA2/CTED13/PMD2/CNB2/RB2 A5 24: AN5/C1INA/C2INC/RTCC/RPB3/SCL2/PMWR/CNB3/RB3 Digital Con4: ============= D8 (pu,BTN) 43: RPB7/CTED3/PMD5/INT0/RB7 D9 (LED2) 12: TMS/PMA10/RA10 D10 (#SS/PGEC3) 20: PGEC3/VREF-/CVREF-/AN1/RPA1/CTED2/PMD6/RA1 D11 (SDO2) 41: RPB5/USBID/RB5 D12 (SDI2) 11: AN11/RPB13/CTPLS/PMRD/RB13 D13 (SCK2,LED1) 15: AN9/C3INA/RPB15/SCK2/CTED6/PMCS1/RB15 GND AREF/PGED3 19: PGED3/VREF+/CVREF+/AN0/C3INC/RPA0/CTED1/PMD7/RA0 Digital Con5: ============= D0 (U2RX) 04: RPC8/PMA5/RC8 D1 (U2TX) 05: RPC9/CTED7/PMA6/RC9 D2 27: AN8/RPC2/PMA2/RC2 D3 36: AN12/RPC3/RC3 D4 37: RPC4/PMA4/RC4 D5 38: RPC5/PMA3/RC5 D6 02: RPC6/PMA1/RC6 D7 03: RPC7/PMA0/RC7 ICSP: ===== 1 RESET 2 +3.3V 3 GND 4 AREF/PGED3 19: PGED3/VREF+/CVREF+/AN0/C3INC/RPA0/CTED1/PMD7/RA0 5 D10 (#SS,PGEC3) 20: PGEC3/VREF-/CVREF-/AN1/RPA1/CTED2/PMD6/RA1 6 n.a.
Pic32 raw
In diese Sektion gehören Dinge zum Pic32, die nichts mit dem Pinguino zu tun haben.
Ein Buch über die Programmierung von Pic32 Mikrokontrollern in C. (Natürlich ist das MIPS-Assembler auch seeehr spannend)
-
Im Space: Ja
Ausgeliehen an: ---
Wenn Ihr das Buch mit nach hause nehmen möchtet, dann vermerkt das bitte hier im Wiki.
Im Noklab befindet sich ein pickit 3 Programmer Clon. Bitte vorsichtig damit umgehen, da Leihgabe.
Doku von Microchip
Interessante Projekte
- freertos is a real-time operating system for embedded devices
- Microchip AN1264 Integrating Microchip Libraries with a Real-Time Operating System
MPLAB X
MPLAB X ist die IDE von Microchip, der passende compiler XC32 muss zusaetzlich installiert werden.
Sehr zu empfehlen ist die Hilfe: Help --> Help Contents (besonders C32 Toolchain). Dort zu finden ist beispielsweise eine schrittweise Anleitung zur Erstellung eines Beispielprojektes und einiges an Codebeispielen zu den verschiedenen Chipfeatures.
Flauschball
Die Elektronik des Flauschballs soll mit diesem Chip laufen. Alles was in Bezug zu dem Flauschballprojekt steht, gehört in diese Sektion. Die Ergebnisse von yela und eine ausführliche Projektbeschreibung findet ihr auf der Flauschballhomepage.
Fragen und Anregungen zum Flauschball an yela
Bauteilkiste
Im Space steht eine Kiste mit Bauteilen, die für den Flauschball relevant sind. Diese stelle ich für Pic32-Projekte zur Verfügung. Natürlich ist das nicht ganz uneigennützig, denn ich bin ziemlich interessiert an einem Austausch über die Funktionsweise und Programmierung dieser Bauteile. ;)
Wer mag darf trotzdem gerne Mate-Creditstriche bei yela machen.
Bitte nicht in der Kiste rumwühlen, sondern stattdessen auf folgende Inhaltsliste schauen.
-
PIC32MX220F032D
Kann genommen werden -
Nur ein hübscheres Bild
-
Laborplatine
Kann genommen werden, nur 2 da -
Schrumpfschlauch
Kann genommen werden -
Batterie Charge Management Controller
Kann genommen werden -
Kabel
Kann genommen werden -
Flachbandkabel und Steckerkrams
Kann genommen werden -
Batterien und 3.7V 2000mA Akku
Akku nur Leihgabe, Batterien ok -
microUSB Buchsen
Kann genommen werden -
Button
Kann genommen werden -
Schiebeschalter
Kann genommen werden -
Accelerometer
Kann genommen werden -
NRF24L01+ Modul
Nur eins da, nur Leihgabe -
LDO
Kann genommen werden -
RGB-LEDS
Kann genommen werden -
microSD Verbinder
Kann genommen werden -
Lautsprecherkabel
Kann genommen werden -
Verschiedene Lautsprecher
Hier möchte ich erst einen Klangvergleich durchführen. Kann geliehen werden, oder nach Rücksprache
Details zu den Bauteilen, z.B. Links zu den Datasheets sind auf der Flauschballhomepage.
Wenn Ihr was nützliches rausfindet, immer rein damit ins Wiki! :)
RGB-LED
Die verwendeten RGB-LEDs sind common Anode. Sie haben vier Beinchen, wobei das laengste Bein die Anode ist (+,rot). Schaut man ins Innere einer dieser LEDs, ist zu erkennen, dass sie ein gutes Beispiel dafür ist, dass es Außnahmen dafür gibt, dass der "Kelch" immer am Kathodenbeinchen liegt.
Auf der einen Seite der Anode ist nur ein weiteres Bein, dies ist das Beinchen für rot, an dem ich eine Spannung von 2,3 V für gut befunden habe. Auf der anderen Seite der Anode liegen die Beinchen für grün und blau, wobei das Blaue das Aeußere ist. An beide würde ich eine Spannung von 3,3 V legen.
Sound
Alex stellt fest (Memory Requirements for PIC32), dass die Helixbibliothek zum abspielen von MP3s wahrscheinlich nicht auf den Chip passen wird und empfiehlt(*)diesen MP3 Decoder.
Aufgrund des hohen Preises des Decoders würde ich zumindest beim Endbausatz eher von MP3 absehen, denn dieser soll möglichst günstig werden.
(*) ich habe den gefunden, noch nie in der Hand gehabt und die Unterlagen nur angelesen--Alex 23:43, 11. Jul. 2012 (CEST)
- ein netter "class d" Verstärker der ist sicher nicht für den fb... aber kommt aus einer netten Familie
Funk
Einige Seiten mit Unterlagen, Example Code usw. für PIC32 vers. nRF24L01+
- mech.northwestern.edu
- [2] Example PIC Code
- Demo Code for bi-directional communication between the MOD-NRF24LR and the LPC-P2148 Prototype Board
- Eine Einleitung
- Das Datenblatt zum nRF24L01
- [3]
Alternative Funk Systeme
- Wifi Module für kleine Systeme € > 20€ wird aber sicher viel billiger ;-)