hi! hab ein kleines problem mit nem lpc925 bzw lpc922. und zwar würd ich gern 2 pwm signale mit dem uc erzeugen, was leider nur zur hälfte funktioniert... hab anfangs nur den timer 1 für pwm konfiguriert -> klappt wunderbar! jedoch mit den einstellungen (siehe anhang), wo ich versuche beide timer für pwm erzeugung zu verwenden ... geht noch immer nur der timer 1 habs datenblatt mit meinen einstellungen schon x mal überprüft -.- is natürlich nie eine 100%ige sicherheit :) hat vielleicht jemande erfahrung damit bzw eine idee? danke im voraus! lg
hab noch die wichtigen infos aus dem datenblatt herausgesucht... hatte vorhin keine zeit mehr :)
Das interessante ist, daß ich vor kurzem selber ein winziges Testprogramm geschrieben habe um den PWM Mode6 der Timer0/1 zu testen. Ich habe es im Keil uVision Simulator getestet und es ist genau das gleiche Problem aufgetreten wie bei dir. Timer1 geht problemlos, aber Timer0 wechselt nicht den T0 Ausgang. Ich habe es bis jetzt nur im Simulator getestet und noch nicht auf der Hardware. Aber wenn es schon im Simulator nicht geht, wird es auf der Hardware vermutlich erst recht nicht gehen. Ich habe den Fehler bis jetzt leider auch noch nicht gefunden, aber ich werde, sobald ich wieder Zuhause bin, mal in einem LPC900 Buch nachlesen, ob dort etwas darüber drinsteht. Falls du den Fehler vorher schon finden solltest wäre ich auf jeden Fall auch an der Lösung interessiert. :) Ciao, Rainer
Fox Mulder wrote: > Aber wenn es schon im Simulator nicht geht, wird es auf der > Hardware vermutlich erst recht nicht gehen. Nach meiner Erfahrung ist es genau umgekehrt. D.h. die Simulatoren können sehr viel weniger als der reale Chip oder haben mehr Bugs. Daher ist immer nur der reale Chip das Maß, ob etwas richtig ist und nicht der Simulator. Das ist ja auch logisch, denn wenn man etwas programmiert, dann muß es im Chip laufen. Wenn es nur im Simulator funktioniert, nützt das keinem. Ich kann ja kein Gerät verkaufen, was nur in der Simulation funktioniert. Peter
ja ich werd mich bemühn ... nur langsam bin ich mit meinem latein am ende ... wie du schon sagtest ... es geht nämlich nur t0 auch nicht... lg martin
Peter Dannegger wrote: > Nach meiner Erfahrung ist es genau umgekehrt. > D.h. die Simulatoren können sehr viel weniger als der reale Chip oder > haben mehr Bugs. Da hast du natürlich Recht. Kein Simulator kann die Hardware zu 100% simulieren in allen Aspekten. > Daher ist immer nur der reale Chip das Maß, ob etwas richtig ist und > nicht der Simulator. > > Das ist ja auch logisch, denn wenn man etwas programmiert, dann muß es > im Chip laufen. Wenn es nur im Simulator funktioniert, nützt das keinem. Genau das sehe ich nicht so. Es ist klar, daß das Ziel sein muß, das Programm am Ende im Controller zum laufen zu bringen. Dieses Ziel erreicht man aber deutlich einfacher, wenn man das Programm vorher sorgfältig im Simulator getestet hat. Schon alleine die Tatsache, daß der Simulator nicht alle Aspekte simulieren kann ist für mich ein Grund mehr, daß ich das was möglich ist erst mal virtuell testen will. Wenn das Programm dann im Simulator einwandfrei funktioniert fange ich an es auf die Hardware aufzuspielen. Somit habe ich mich dann nur noch mit eventuellen Problemen herumzuplagen, welche ich eben nicht simulieren kann, kann mich aber auf den Rest des Codes relativ gut verlassen. Mit diesen Arbeitsschritten fahre ich schon seit etlichen Jahren sehr gut. Aber lassen wir das, denn das weitet sich ansonsten zu einer Grundsatzdiskussion aus welche sowieso zu nichts führt. Jeder hat da eben seinen eigenen Arbeitsablauf. :) Ich habe den Fehler aber nach etwas studieren des Datenblatts gefunden. Leider ist der Grund, weshalb es im Simulator und auf der Hardware nicht geht, im Datenblatt nur schlecht dokumentiert. Das Problem liegt dadran, daß der Pin für T0 gleichzeitig mit SCL des I2C Interface zusammenliegt. Dieser Pin stellt eine Ausnahme der möglichen Port Konfigurationen dar. Man kann fast jeden Pin des Controllers in einen der vier möglichen Konfigurationen betreiben. Diesen Pin kann man aber nur in zwei möglichen Konfigurationen betreiben. Das wären "input-only" und "open-drain". Ich habe in meinem Programm anfangs, genauso wie der Author dieses Threads, den Pins versucht als "quasi-bidirectional" zu konfigurieren. Sobald man den Pin als "open-drain" konfiguriert funktioniert die PWM Generierung an diesem Pin einwandfrei. Man benötigt dann aber einen Pull-Up Widerstand, falls man das Signal direkt am Pin messen möchte. Um den Pin als open-drain zu konfigurieren hier die Einstellungen: // T0 = P1.2 = open-drain (einziger möglicher Ausgangsmodus) P1M1 |= 4; P1M2 |= 4; Da habe ich selbst auch mal wieder etwas neues dazu gelernt. Und der Simulator hat es auch völlig korrekt simuliert. ;) Ciao, Rainer
Ich habe eben mal auf http://www.codearchitect.org/ mir den Beispielcode für eine PWM generierung mit Timer0 erzeugen lassen. Und siehe da, in dem Beispielcode wird für Timer0 der Pin T0 ebenfalls als open-drain konfiguriert. Man kann sich auf der Webseite entweder online den Code für verschiedene interne Peripherie generieren lassen oder das Tool dafür herunterladen. Vielleicht schadet es manchmal nicht da reinzuschauen um Anhaltspunkte für sich selbst zu finden. :) Ciao, Rainer
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.