Hallo zusammen,
ich arbeite mich gerade durch die Code-Examples zum MSP430 (430G2231).
Wollte jetzt mal etwas mit der PWM über Capture&Compare
rumexperimentieren.
Zu meiner Testschaltung: Ich weiß selbst, dass das mit nem entsprechend
dimensionierten Vorwiderstand natürlich sauberer wäre, aber den hatte
ich gerade nicht zur Hand, deshalb hab ich kurzerhand vier rote LEDs in
Reihe genommen. Die LEDs laufen an der Versorgungsspannung von 12V auch
so, wie sie sollen.
Allerdings bekomme ich sie nicht über die PWM an P1.2 geschaltet. Aber
den Code folgendermaßen geändert:
1
//original source: msp430g2xx1_ta_16.c
2
#include<msp430g2231.h>
3
4
voidmain(void)
5
{
6
WDTCTL=WDTPW+WDTHOLD;// Stop WDT
7
P1DIR|=0x0C;// P1.2 and P1.3 output
8
P1SEL|=0x0C;// P1.2 and P1.3 TA1/2 options
9
CCR0=51200-1;// PWM Period
10
CCTL1=OUTMOD_7;// CCR1 reset/set
11
CCR1=2;// CCR1 PWM duty cycle
12
TACTL=TASSEL_2+MC_1;// SMCLK, up mode
13
14
_BIS_SR(CPUOFF);// Enter LPM0
15
}
Da die Periode enorm groß ist zur EIN-Zeit (a = 2/51199 ≈ 4e-5) sollten
die Leuchten faktisch aus sein. Sind sie aber nicht.
In der Schaltung vermute ich den Fehler eher nicht, wenn ich die
Verbindung zum uC abziehe, erlöschen die LEDs.
Hat jemand eine Idee? Vllt interpretier ich ja nur die Zeilen des
Codeschnipsels falsch
Patrick A. schrieb:> Hat jemand eine Idee? Vllt interpretier ich ja nur die Zeilen des> Codeschnipsels falsch
Das hat nichts mit dem Codeschnipsel zu tun. Deine Testschaltung ist
Humbug.
Ändere das zu 12V - R - LED - Transistor - GND und es wird
funktionieren. Und ein Widerstand zwischen Basis und uC-Pin wäre auch
nicht verkehrt.
Maik Fox schrieb:> Ändere das zu 12V - R - LED - Transistor - GND und es wird> funktionieren.
Ja, die Last an den Emitter zu hängen war net so schlau, hätte man drauf
kommen können.
Aber dass ich statt "R - LED" auch "R - LED - LED - LED - LED" schalten
kann, darf ich doch annehmen?
>Und ein Widerstand zwischen Basis und uC-Pin wäre auch nicht verkehrt.
Ja, auch dafür war ich zu übereifrig. Hab jetzt leider keinen passenden
da, muss ich erst suchen.
Gruß Patrick
Habe jetzt doch alles zusammen, aber die ganze Chose verhält sich doch
recht merkwürdig.
Im normalen Betrieb leuchten die LEDs voll. Wenn ich die
Spannungsversorgung des uC kappe (sitzt auf nem Launchpad; dh ich zieh
den vom USB-Port), leuchten sie weiterhin, aber deutlich schwächer.
Sollte das etwa daran liegen, dass die Spannungsversorgung der LEDs ein
Schaltnetzteil ist? Der GND des Boards liegt bei ~ -5V zu GND des NT...
Ich mach da nen Denkfehler...
EDIT: Hab nochmal gemessen während des Tippens, von daher: Wenn das mit
den Potentialen geklärt ist, löst sich wohl auch das "ominöse" Leuchten
auf.
Vielleicht ist der Portpin vom MSP ja auch kaputt nach der Aktion mit
den 12 Volt. Lass doch die Schaltung mit dem Transistor weg und häng nur
eine LED mit einem Vorwiderstand vom Portpin aus gegen Masse. So kann
man zumindest testen, ob der Prozessor noch geht.
Grüße,
Peter
Hallo,
ich werde gerade aus dem Datenblatt nicht schlau. Schafft der Portpin
überhaupt die 20mA für ne LED? Dann hätt ich mir die Klimmzüge oben
sowieso sparen können...
Gruß und gut' Nacht!
Patrick A. schrieb:> ich werde gerade aus dem Datenblatt nicht schlau.> Schafft der Portpin> überhaupt die 20mA für ne LED? Dann hätt ich mir die Klimmzüge oben> sowieso sparen können...
Im Datenblatt (nicht Family User Guide) gibt es im Kapitel "electrical
characteristics" ein Unterkapitel über die Outputs. Dort sind Tabelle
und ein paar Diagramme.
Am Beispiel eines MSP430F20xx erkennt man folgendes: In den Tabellen
steht, wieviel Strom man entnehmen/einspeißen darf, um in bestimmten
Toleranzen für den High/Low-Pegel zu bleiben. Das sind bei 0.2V Toleranz
zB 1.5mA. In den Fußnoten der Tabelle steht außerdem, dass die insg.
Belastung über alle Pins je nach Pegeltoleranz nicht größer als +-12mA
(für 0.2V) sein soll.
Die Diagramme auf der nächsten Seite zeigen, wie viel Strom
raus/reinkommt je nach Spannung am Pin.
Eine LED direkt an den MSP430 anzuschließen ist also möglich, aber nur
sinnvoll mit Low-Current-LEDs. Für mehr Strom braucht man einen
Schalttransistor.
> Gruß und gut' Nacht!
Gruß und guten Mittag.
Maik Fox schrieb:> Im Datenblatt (nicht Family User Guide) gibt es im Kapitel "electrical> characteristics" ein Unterkapitel über die Outputs. Dort sind Tabelle> und ein paar Diagramme.>> Am Beispiel eines MSP430F20xx erkennt man folgendes: In den Tabellen> steht, wieviel Strom man entnehmen/einspeißen darf, um in bestimmten> Toleranzen für den High/Low-Pegel zu bleiben. Das sind bei 0.2V Toleranz> zB 1.5mA. In den Fußnoten der Tabelle steht außerdem, dass die insg.> Belastung über alle Pins je nach Pegeltoleranz nicht größer als +-12mA> (für 0.2V) sein soll.
Hallo,
genau diese Diagramme hatte ich im Auge und deshalb auch nachgefragt.
Ich habe jetzt die Ausgänge mit nem Multimeter durchgemessen und dabei
kam raus:
Vcc = 3,5V
P1.2 = 2,6V ≈ 0,75*Vcc
Habe dazu natürlich den Code aus den Examples genutzt und daher ist das
genau das gewünschte Ergebnis (was EUCH sicher weniger verwundert ;-) ).
Und -oh Wunder- auch bei nem Duty Cycle von 0,5 funktionierts.
Ich begeb mich jetzt erst mal auf Suche nach passenden Widerständen.
Normalerweise hat man die ja zu Hause, aber natürlich gerade nicht
auffindbar.
Danke soweit, ich melde mich wieder.
Gruß Patrick
Hallo nochmal,
ich habe meine Testumgebung jetzt neu aufgebaut - und trotzdem steckt
noch ein Fehler drin.
Folgende Vorgehensweise habe ich angewandt:
* Aus dem Datenblatt zum Transistor
(http://www.reichelt.de/?;ACTION=7;LA=28;OPEN=0;INDEX=0;FILENAME=A100%252F2N3904_FAI.pdf
):
- Ube,on = 0,75V bei Ic = 20mA und Raumtemp
- hfe = 220 bei 20mA, Raumtemp und Uce = 5 V (Seite 3 links oben)
--> Ib = 20e-3/220 ≈ 91uA
--> bei Pin-Spannung 3,5V: Rb = 3,5/91e-6 ≈ 38,5kR
* Aus dem Datenblatt der LED
(http://www.reichelt.de/?;ACTION=7;LA=28;OPEN=0;INDEX=0;FILENAME=A500%252FLED_5MM_RT.pdf
):
- Uf = 2,3V
- If = 20mA
--> bei Betrieb an 12V: Rvor = (12 - 2,3)/20e-3 = 485R
(hab nen 470R genommen; Ucesat ist vernachlässigbar klein)
Das Ergebnis seht ihr im Anhang. Habe bewusst 1:1 den Aufbau
wiedergegeben, falls das mit der R-Kette eine Fehlerquelle darstellen
sollte, die sich mir momentan noch nicht erschließt.
Wenn ich also wieder wie oben den Duty Cycle sehr klein wähle, messe ich
mit dem Multimeter ~0V von P1.2 gegen GND des Boards. Wenn ich
allerdings meine Schaltung an den Port lege, dann leuchtet die LED voll
auf. Wenn ich das Kabel zwischen Basiswiderstand und Portpin abziehe,
erlischt sie. Ich seh den Fehler gerade nicht... %(
Btw, sie leuchtet auch, wenn ich die Basis nur mit dem Finger berühre
... das könnt ich mir aber noch mit irgendwelchen Kapazitäten
meinerseits oder so erklären.
Gruß Patrick
Wo ist denn deine GND-Verbindung von MSP und Steck-Board?
Patrick A. schrieb:> Btw, sie leuchtet auch, wenn ich die Basis nur mit dem Finger berühre
Das ist normal.
Dennis schrieb:> Wo ist denn deine GND-Verbindung von MSP und Steck-Board?
Nicht existent. Hab ich ja oben schon mal angerissen: Das Launchpad wird
via USB versorgt, die LED über ein Schaltnetzteil (das ist an den
Klemmen auf dem Steckbrett angeschlossen).
Dennis schrieb:> Ja so funktioniert es aber nicht - du brauchst schon ein gemeinsames> Bezugspotential.
Daran hat es letztendlich noch gelegen, vielen Dank!
Trotzdem ist mir aus der theoretischen Analyse heraus nicht ersichtlich,
warum das Potential unterschiedlich ist.
Das 12V-Netzteil und das NT vom Notebook hängen am gleichen
Hausanschluss (sprich gleicher N-Leiter), daher würde ich erwarten, dass
die Gleichrichtung zum gleichen Bezugspotential hin erfolgt. Und das
hätte ich dann ja auch am USB!?
Patrick A. schrieb:> Das 12V-Netzteil und das NT vom Notebook hängen am gleichen> Hausanschluss (sprich gleicher N-Leiter), daher würde ich erwarten, dass> die Gleichrichtung zum gleichen Bezugspotential hin erfolgt.
Das wäre nur der Fall wenn die Netzteile nicht netzgetrennt wären. Sowas
gab es vor 100 Jahren mal, heutzutage schützt man die Menschen indem die
Netzteile galvanisch trennen :)