Forum: Mikrocontroller und Digitale Elektronik LPC - 2 pwm signale


von motz (Gast)


Angehängte Dateien:

Lesenswert?

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

von motz (Gast)


Angehängte Dateien:

Lesenswert?

hab noch die wichtigen infos aus dem datenblatt herausgesucht... hatte 
vorhin keine zeit mehr :)

von motz (Gast)


Angehängte Dateien:

Lesenswert?

und der rest...

thx 4 help

von R. W. (quakeman)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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

von motz (Gast)


Lesenswert?

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

von R. W. (quakeman)


Lesenswert?

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

von R. W. (quakeman)


Lesenswert?

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

von motz (Gast)


Lesenswert?

thx ... funkt natürlich!! :)

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.