Hallo, für meine ersten Erfahrungen mit der ARM Welt, habe ich mir das MiniDK2 Board mit einem LPC1768 und Display aus der Bucht besorgt. Aus dem LPCOpen Projekten versuche ich gerade mein eigenes Projekt aufzubauen (mit LPCXpresso). Ansteuerung der LED's, Taster und auch HTTP Server funktionieren schon. Ich verwende dich gleiche Struktur wie LPCOpen (Chip- , Boardlayer und Applikation) Das LPCXpresso Board Projekt (für 1769) habe ich dafür kopiert und verändert. Als nächsten Schritt würde ich gerne die Displayhintergrundbeleuchtung regeln (dimmen). Ein-/Ausschalten funktioniert schon - ist ja einfach. Die HG-Beleuchtung hängt am Port 1.26 welcher ja neben normalen IO auch noch - 'MC1B — Motor control PWM channel 1, output B' und - 'PWM1[6] — Pulse Width Modulator 1, channel 6 output.' kann. Hier habe ich schon das erste Entscheidungsproblem: was ist der Unterschied zwischen PWM und Motor Control PWM? Ich bin jetzt davon ausgegangen, dass PWM das Einfachere / Richtigere ist. Allerdings stoße ich beim Versuch erste Schritte im Code zu implementieren auf Probleme. Im LPCOpen konnte ich keine Demoprojekte/Beispielcode für PWM finden. Also mit Google gesucht und ein paar Beispielcodezeilen sind schnell gefunden. Einer der ersten Treffer schlägt vor, den Timer so zu initialisieren: LPC_SC->PCLKSEL0 |= 1 << 12; Sieht einfach aus - doch bevor ich zu weiteren Codezeilen komme, scheitere allerdings schon daran, dass ich kein Headerfile finde, das mir irgendwie LPC_SC oder PCLKSEL0 anbietet. Natürlich könnte ich mich jetzt durchquälen anfangen und alle Speicheradressen der Register (lt. Datenblatt) selber anlegen und so meinen PWM so zum laufen bekommen (oder zumindest zu versuchen). Ich glaube aber, dass ich da irgendwo gehörig auf dem falschen Weg bin ... Kann mir jemand einen Tipp geben oder hat jemand einen 'einfachen' PWM Ausgang mit dem LPC1768 am laufen und das ganze in einem LPCXpresso Projekt (mit LCPOpen)? Danke vorab für eure Hilfe! vG Alram
Hallo Alram, LPC_SC findest Du im CMSIS Cortex-M3 Core Peripheral Access Layer Header File für NXP LPC17xx Device Series. Ohne diese Headerdatei zu programmieren macht die Sache deutlich komplexer. Zu finden zum Beispiel hier für das LPC1768 mbed: https://mbed.org/users/mbed_official/code/mbed/file/6473597d706e/TARGET_LPC1768/LPC17xx.h Hier etwas zum experimentieren und lernen: http://openlpc.com/4e26f1/examples/pwm.lpc17xx Viel Erfolg
Sehr hilfreich bei der Initialisierung des LPC ist folgendes Tool, was ich immer wiede gerne verwende: http://alexan.edaboard.eu/ Nicht nur für die PWM ....
Alram Lechner schrieb: > irgendwie LPC_SC oder PCLKSEL0 Das ist ein Krampf mit den Registerbezeichnungen, die leider in diversen Varianten verwendet werden. LPC_SC->PCLKSEL0 sieht sehr nach LPC17xx.h aus: [c]typedef struct { __IO uint32_t FLASHCFG; /* Flash Accelerator Module */ uint32_t RESERVED0[31]; __IO uint32_t PLL0CON; /* Clocking and Power Control */ __IO uint32_t PLL0CFG; __I uint32_t PLL0STAT; __O uint32_t PLL0FEED; uint32_t RESERVED1[4]; __IO uint32_t PLL1CON; __IO uint32_t PLL1CFG; __I uint32_t PLL1STAT; __O uint32_t PLL1FEED; uint32_t RESERVED2[4]; __IO uint32_t PCON; __IO uint32_t PCONP; uint32_t RESERVED3[15]; __IO uint32_t CCLKCFG; __IO uint32_t USBCLKCFG; __IO uint32_t CLKSRCSEL; __IO uint32_t CANSLEEPCLR; __IO uint32_t CANWAKEFLAGS; uint32_t RESERVED4[10]; __IO uint32_t EXTINT; /* External Interrupts */ uint32_t RESERVED5; __IO uint32_t EXTMODE; __IO uint32_t EXTPOLAR; uint32_t RESERVED6[12]; __IO uint32_t RSID; /* Reset */ uint32_t RESERVED7[7]; __IO uint32_t SCS; /* Syscon Miscellaneous Registers */ __IO uint32_t IRCTRIM; /* Clock Dividers */ __IO uint32_t PCLKSEL0; __IO uint32_t PCLKSEL1; uint32_t RESERVED8[4]; __IO uint32_t USBIntSt; /* USB Device/OTG Interrupt Register */ __IO uint32_t DMAREQSEL; __IO uint32_t CLKOUTCFG; /* Clock Output Configuration */ } LPC_SC_TypeDef; [\c] Du musst diese Datei in dein Projekt einbinden.
Danke für eure Hinweise. Hab mir nun von NXP die CMSIS Library (lpc175x_6x_cmsis_driver_library_0.zip) heruntergeladen. Darin befindet sich auch die von euch erwähnte LPC17xx.h mit den gesuchten Inhalten. Mein Problem ist nun: Ich habe die LCPOpen Library (http://www.lpcware.com/content/nxpfile/lpcopen-software-development-platform-lpc17xx-packages) heruntergeladen und mit dieser begonnen. Dort befindet sich im Chip-Projekt die Datei chip_lpc175x_6x.h. diese widerum beinhaltet nur (mehr) einen Bruchteil der LPC17xx.h bzw. dürften die Inhalte der ursprünglichen LPC17xx.h auf zig andere Headerfiles verteilt worden sein. Diese werden dann in der chip_lpc175x_6x.h inkludiert. Und am Ende der Datei (nach den includes) befindet sich folgender, netter Hinweis: /* FIXME : PWM drivers */ grrr Scheint so, als ob PWM im LPCOpen einfach ignoriert wurde. Vermutlich bleibt mir jetzt nichts anderes über, als die LPC17xx.h manuell um meine benötigten Teile in mein Projekt zu mischen .... Oder kennt wer Alternativen? vG Alram
Ich habe letztens codeREd auf CMSIS_CORE_LPC17xx umgestellt. Das ist die neueste CMSIS-Version. Vorteile gegenüber der Vorgängerversion sind für mich nicht erkennbar. LPCOpen habe ich noch nicht probiert. Ich gehe mal davon aus dass CMSIS_CORE_LPC17xx NXP-Standard ist. Es ist dann sicher kein Fehler, diesen Standard zu verwenden. Also, neueste Version von CodeRed nehmen und ein CMSIS-Grundprojekt erstellen. In dieses Grundprojekt kann man dann alles andere einbinden.
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.