Hallo Kollegen,
entschuldigt bitte die komplette Newbie-Frage.
ich habe paar verständniss Fragen
ich betreibe mein msp430F4xxx mit einer Batterie, nun möchte ich wissen
wie man die Spannung, bzw. strom mit dem ADC messen kann.
Danke
Gruß
jarmi
U = R*I oder hat sich da was geändert ? :-)
Einfach eine Spannung an den ADC Eingang anlegen und fertig. Mittels
ohmschen Gesetz den entsprechenden Spgs. Teiler berechnen.
Und was ist jetzt Dein Problem?
Wie der ADC softwareseitig anzusteuern ist, oder welche Hardware Du an
den ADC anschließen musst, um "die" Spannung oder "den" Strom messen zu
können?
Ersteres wird von TI in Codebeispielen beschrieben, die es für die
unterschiedlichen MSP430-Familien gibt, studiert man diese und die
jeweiligen Programmierhandbücher, sollte man die Vorgänge nachvollziehen
können.
Letzteres hängt ein bisschen davon ab, was "die" Spannung und "der"
Strom sind, die Du da messen willst - etwa die Spannung der den MSP430
versorgenden Batterie? Und den Eigenstrombedarf?
Hallo,
das ohmische Gesetz hat sich meines wissen noch nicht geändert. ich
suche aber fleißig nach neue Regeln.
>>Einfach eine Spannung an den ADC Eingang anlegen und fertig. Mittels>>ohmschen Gesetz den entsprechenden Spgs. Teiler berechnen.
soweit bin ich auch drauf gekommen :p
haben Sie vielleicht eine detailerte BEschreibung dafür, Bitte?
>> detailerte BEschreibung
wofür ? für den Spannungsteiler ? wie wärs wenn du mal erklärst was du
machen willst.
Beispiel, ich möchtem mit dem ADC eine Spannung von 1000V messen.
@ Rufus Τ. Firefly
ich möchte wissen:
- welche Hardware darf ich an welche pin anschliessen?
- wie wird die Spannung vom ADC ausgelesen?
- Batterie Und verfügbare Eigenstrombedarf ermitteln?
Danke für die schnelle Antwort
jarmi schrieb:> - welche Hardware darf ich an welche pin anschliessen?
Jede dafür geeignete an jeden dafür geeigneten.
Was bitte soll man auf so eine Frage antworten?
> - wie wird die Spannung vom ADC ausgelesen?
Das steht -- wie ich bereits beschrieben habe -- in den
Quelltextbeispielen, die es von TI für die unterschiedlichen
MSP430-Varianten gibt. Das steht auch in verschiedenen Büchern und
Online-Tutorials.
Obendrein ist der ADC im Users's Manual der jeweiligen MSP430-Variante
beschrieben.
> - Batterie Und verfügbare Eigenstrombedarf ermitteln?
Dieser Satz keine Frage. Spannungen misst man, in dem man sie entweder
direkt an einen ADC-Eingang anschließt (dann aber muss absolut
sichergestellt sein, daß die Spannung nicht höher werden kann als der
ADC-Eingang erlaubt, also auf keinen Fall größer als die
Betriebsspannung des MSP430 - übrigens darf sie auch nicht negativ
werden) oder aber über einen geeignet dimensionierten Spannungsteiler an
einen ADC-Eingang anschließt. Der Spannungsteiler sollte so hochohmig
wie möglich sein, um die Spannungsquelle nicht unnötig zu belasten, darf
aber auch nicht so hochohmig sein, daß der Innenwiderstand des
ADC-Eingangs die Spannungsteilung merklich beeinflusst.
Ein ADC kann nur Spannungen messen, also gilt es zur Strommessung das
Ohmsche Gesetz (ohne 'i') anzuwenden und mit einem geeignet
dimensionierten Messwiderstand zu arbeiten, durch den der zu messende
Strom fließt. Die über diesem abfallende Spannung wird dann gemessen.
Ja. Du kennst die Höhe der Referenzspannung, Du kennst das Ergebnis der
ADC-Wandlung. Was brauchst Du mehr?
Hinweis:
Wenn z.B. die Referenzspannung 2 V ist, und der ADC "Vollausschlag"
liefert, wie hoch mag da wohl die gemessene Spannung sein?
Und wenn der ADC 0 liefert, wie hoch dann?
ich verwende die interne Reference 1.2V, dem entsprechend zeigt SD16MEM0
= 56512.
mit dem Osci habe ich am A0.0+ 0.42V.
wie finde ich das verhältniss zwischen die 0.42v und 56512??
die werte passen doch nicht zusammen.
mit dem Osci habe ich 0.43v gemessen (was ich auch messen möchte).
mit dem SD16 bekomme ich SD16MEM0=56512
internes Ref: 1,2v
mein Rechen Weg:
0v -----> 0x0000
x.v -----> 0xDCDD = 56541
1,2v -----> 0xFFFF = 65536
x= (56541*1,2)/65536 ==> 1,03V ????
@ Bernd, vielen Dank, das habe ich auch vergissen...
nach dem Rechnen bekomme ich:
x= (56551*0,6)/65536 = 0,5177V
gemessen : 0,428v
Danke für die Schnelle Antwort
Hallo,
endlich habe ich mein SD16 zum laufen gebracht, der letzte Fehler lag am
SD16LSBACC. diese sollte auf 0 gesetzt werden(zumindest bei mir).
Danke für die Hilfe und die Hinweise.
Hallo Freunde,
nach paar experimente mit SD16 habe ich immernoch paar probleme :( ,
die SD16-ISR()wird aufgerufen im Register zeigen
zb. SD16MEM0=0xB722 und SD16IV = 4;
in der ISR zeigen SD16MEM0=0 und SD16IV = 46782;
wobei SD16IV sich doch nur bis 16 variieren?
der Breakpunt ist in Case 4 gesetzt aber der zeiger kommt da nicht an...
mit dem befehl mem0 = SD16MEM0; wird auch nur 0 gelesen,obwohl im
Register
SD16MEM0=0xB722 steht.
weiss jemanden vielleicht was ich falsch mache?
Danke
void drv_SD16_Init()
{
P4DIR=0xFF;
mesureBATCTL1();
// mesureBATCTL2();
SD16CTL = SD16REFON+SD16SSEL_1; // 1.2V ref, SMCLK
// CH A0.0+
SD16INCTL0 |= SD16INCH0+SD16INTDLY0; // Interrupt on 4th sample
SD16CCTL0 |= SD16UNI+SD16IE; // Enable interrupt
// CH A1.0+
// SD16INCTL1 |= SD16INCH1+SD16INTDLY0; // Interrupt on 4th sample;
// SD16CCTL1 |= SD16OSR_1024+SD16UNI+SD16IE;
SD16CCTL0|=SD16SC;
for (int i = 0; i < 0x3600; i++); // Delay for 1.2V ref startup
_EINT();
}
#pragma vector=SD16A_VECTOR
__interrupt void SD16AISR(void)
{
//mem0 = SD16MEM0;
//mem1 = SD16MEM1;
switch (__even_in_range(SD16IV, 16))
{
case 2: // SD16MEM Overflow
break;
case 4: // SD16MEM0 IFG
SD16CCTL0 &=~SD16IFG; // clear Interrupt Flag
mem0 = SD16MEM0;
//SD16CCTL0 &=~SD16SC;
//BATCTL1_LOW();
break;
case 6: // SD16MEM1 IFG
SD16CCTL1 &=~SD16IFG; // clear Interrupt Flag
mem1 = SD16MEM1;
//SD16CCTL1 &=~SD16SC;
//BATCTL2_LOW();
break;
case 8: // SD16MEM2 IFG
break;
}