Hi, ich will von einem L6235 der eine U71MX antreibt, das Tachosignal messen. Dieses ist gepulst mit Uss=4,2V, ton=280µs und toff=4,2ms. Nachdem ich nun schon seit Tagen mit Labview rumprobiert habe und mich diese Art der Entwicklung einfach nur ankotzt, da es einfach mal total unübersichtlich ist, frage ich mich ob ich diese Messung nicht auch mit meinem µC bewerkstelligen kann. Eigentlich will ich nur die Anlaufzeit der U71MX messen. Wenn ich also den Mittelwert meiner Tachospannung nehme, müsste man dann doch bei einer Aufnahme von 1 Messwert pro ms eine anständige Kurve zustande kriegen. Die Frage ist nur wie man das realisieren kann? Kann man dieses Spannungssignal einfach an einen I/O Pin des MSP430Fg4618 führen, dieses dann umrechnen und in eine Dateischreiben? Bzw. in den Speicher und von da dann an den PC übertragen und in eine Dateischreiben. Das müsste doch gehen, oder? Wie geht man dabei am besten vor? Also, Unterteilung in Teilprojekte. Ich hab da immer so meine Probleme solche Dinge zu strukturieren und will am liebsten immer alles auf einmal ^^ Deswegen frag ich ;) Viele Grüße, Stefan M.
Stefan Marx schrieb: > Kann man dieses Spannungssignal einfach an einen I/O Pin des > MSP430Fg4618 führen, dieses dann umrechnen und in eine Dateischreiben? > Bzw. in den Speicher und von da dann an den PC übertragen und in eine > Dateischreiben. Ich würde ein USB/RS232 Anschluss an den MSP machen und das direkt übertragen.
Jörg S. schrieb: > Ich würde ein USB/RS232 Anschluss an den MSP machen und das direkt > übertragen. Also ist es möglich, dass der µC das verarbeitet :) Ich hab den auf einem Experimenter Board, wo eine RS232 zur Verfügung steht. Was ich bisher noch nicht rausgefunden habe...ich kann mit CCE zwar den Code für den µC schreiben, aber eine Consolenanwendung kann man damit nicht realisieren, oder? Weil irgendwie muss doch die Datei erzeugt werden?
>Also ist es möglich, dass der µC das verarbeitet :) Wüsste nicht was dagegen spricht. >eine Consolenanwendung kann man damit nicht realisieren, oder? Terminals, auch welche die speichern, gibt es wie Sand am Meer.
Jörg S. schrieb: > Terminals, auch welche die speichern, gibt es wie Sand am Meer. Sowas wie das Hyperterminal. Wie sieht dann das Konzeot aus, nachdem mein µC das Signal verarbeitet? Der Spannungspegel an dem PIN muss dann mit dem A/D Wandler in einen Digitalenwert umgewandelt werden. Und diesen übergebe ich dann der RS232 sozusagen.... ist das zu einfach gedacht?
Nö. So einfach ist das. Und im Artikel RS232 sind Tips, wie man die Daten auch grafisch visualisieren kann.
Was darf denn da so maximal an Spannung und Strom an den jeweiligen PIN anliegen? Spiele gerade mit einem BeispielCode rum, der dass Signal für den ADC12 selbst erzeugt und dann je nach größe eine LED an oder abschaltet. Kurioserweise schaltet sich die Diode ab, wenn ich mein Oszi an diesen Pin hänge, um die Spannung zu messen.
1 | #include "msp430xG46x.h" |
2 | |
3 | void main(void) |
4 | {
|
5 | WDTCTL = WDTPW + WDTHOLD; // Stop WDT |
6 | ADC12CTL0 = SHT0_2 + ADC12ON; // Sampling time, ADC12 on |
7 | ADC12CTL1 = SHP; // Use sampling timer |
8 | ADC12IE = 0x01; // Enable interrupt |
9 | ADC12CTL0 |= ENC; |
10 | P6SEL |= 0x01; // P6.0 ADC option select |
11 | P5DIR |= 0x02; // P5.1 output |
12 | |
13 | while (1) |
14 | {
|
15 | ADC12CTL0 |= ADC12SC; // Start sampling/conversion |
16 | __bis_SR_register(LPM0_bits + GIE); // LPM0, ADC12_ISR will force exit |
17 | }
|
18 | }
|
19 | |
20 | #pragma vector = ADC12_VECTOR
|
21 | __interrupt void ADC12_ISR(void) |
22 | {
|
23 | if (ADC12MEM0 >= 0x7ff) // ADC12MEM = A0 > 0.5AVcc |
24 | P5OUT |= 0x02; // P5.1 = 1 |
25 | else
|
26 | P5OUT &= ~0x02; // P5.1 = 0 |
27 | |
28 | __bic_SR_register_on_exit(LPM0_bits); // Exit LPM0 |
29 | }
|
Wie müsste ich PIN6.0 denn configurieren, damit ich ein Signal draufgeben kann?
>Was darf denn da so maximal an Spannung und Strom an den jeweiligen PIN >anliegen? Wenn du die 2,5V Referenz nimmst 2,5V, bei 1,5V Referenz dann maximal 1,5V :) Strom wird hoffentlich nicht viel fliessen, sonst ist was kaputt. >Wie müsste ich PIN6.0 denn configurieren, damit ich ein Signal >draufgeben kann? Du meinst die Aussenbeschaltung?
Jörg S. schrieb: > Strom wird hoffentlich nicht viel fliessen, sonst ist was kaputt. Sind 20 mA viel? g Bin bei sowas immer ganz schnell ^^ > Du meinst die Aussenbeschaltung? Außenbeschaltung? Ja wenn ich eben meine Spannung vom Tachosignal auf den PIN lege und dann sehen will, ob die Spannung zum Beispiel > 0.5*Vref oder so Bei dem Beispiel kommt die Spannung ja irgendwie von Innen, die dann diese Bedingung erfüllt.
Hab mal noch ne andere Frage. Wenn mein ADC nun das Signal umgerechnet hat und in den Memoryplatz 0 geschrieben hat, wohin kann ich diesen Wert dann ausgeben? Also, irgendwie muss ich ja wissen, ob die Umwandlung nun korrekt von statten ging?
> Also, irgendwie muss ich ja wissen, ob die Umwandlung nun korrekt von > statten ging? Das weisst du, wenn die __interrupt void ADC12_ISR(void) aufgerufen wird. > Wenn mein ADC nun das Signal umgerechnet hat und in den Memoryplatz 0 > geschrieben hat, wohin kann ich diesen Wert dann ausgeben? Du kopierst dir in ADC12_ISR() den Wert aus ADC12MEM0 in eine Variable und setzt dir einen Merker/Flag. Im Hauptprogramm kontrollierst du laufend den Merker, machst ggf. die Ausgabe und resettest den Merker. Artikel Interrupt lesen und besonders auf atomaren Datenzugriff und volatile Kennzeichnung achten. Artikel FAQ lesen und die Frage "Wie kann ich Zahlen auf LCD/UART ausgeben?" auf deine Hardware (Display? UART?) anpassen.
Ok. Danke Sellerie :) Hab hier nochmal eine Frage zu Vref bzw. AVcc. In dem Beispiel hier msp430xG46x_adc12_01.c Wird das AVcc irgendwo definiert? Meiner Meinung nach nicht.
1 | #include "msp430xG46x.h" |
2 | |
3 | void main(void) |
4 | {
|
5 | WDTCTL = WDTPW + WDTHOLD; // Stop WDT |
6 | ADC12CTL0 = SHT0_2 + ADC12ON; // Sampling time, ADC12 on |
7 | ADC12CTL1 = SHP; // Use sampling timer |
8 | ADC12IE = 0x01; // Enable interrupt |
9 | ADC12CTL0 |= ENC; |
10 | // P6SEL |= 0x01; // P6.0 ADC option select
|
11 | P6DIR |= 0x01; // P6.0 Input |
12 | P5DIR |= 0x02; // P5.1 output |
13 | |
14 | while (1) |
15 | {
|
16 | ADC12CTL0 |= ADC12SC; // Start sampling/conversion |
17 | __bis_SR_register(LPM0_bits + GIE); // LPM0, ADC12_ISR will force exit |
18 | }
|
19 | }
|
20 | |
21 | #pragma vector = ADC12_VECTOR
|
22 | __interrupt void ADC12_ISR(void) |
23 | {
|
24 | if (ADC12MEM0 <= 0x7ff) // ADC12MEM = A0 < 0.5AVcc = 0.5*2,7V = 1,35V? |
25 | P5OUT |= 0x02; // P5.1 = 1 |
26 | else
|
27 | P5OUT &= ~0x02; // P5.1 = 0 |
28 | |
29 | __bic_SR_register_on_exit(LPM0_bits); // Exit LPM0 |
30 | }
|
Im Datenblat steht, dass für Vref
1 | |
2 | ADCTL0 = REFON // für Vref 1.5V |
oder
1 | ADCTL0 = REFON + REF2_5V // für Vref 2.5V |
gesetzt werden muss. Auf welche AVcc bzw. Vref greift dann dieses Beispiel zurück? Kann man auch ein externes Vref zum Vergleich eines Messsignals anlegen?
Weiss ich nicht, mir liegt das Datenblatt nicht vor. Erste Suchseite von Google mit "msp430xG46x datasheet" liefert auf den ersten Blick auch nichts passendes.
Wenn ich mir den L6235 so ansehe, scheint mir eine Frequenzmessung vielleicht zielführender zu sein als das ganze erst analog zu "glätten".
Serieller schrieb: > Weiss ich nicht, mir liegt das Datenblatt nicht vor. msp430.com ist die TI-eigene Einstiegsseite, auf der man mit ein paar Klicks sowohl Datenblatter und User Guides als auch AppNotes und Beispielcode findet.
Mein Fheler, hatte nach msp430xG46x gesucht statt nach dem aktuellen Vertreter MSP430Fg4618. Das Datenblatt ist sehr spartanisch, was die Beschreibungen betrifft. http://focus.ti.com/lit/ds/symlink/msp430fg4618.pdf Eine bessere Erklärung gibt es in http://www.swarthmore.edu/NatSci/echeeve1/Class/e91/Lectures/E91%286%29A2D.pdf Das Bit REFON würde in ADC12CTL0 gesetzt, ist es aber nicht. Daher greift das Beispiel auf eine externe Referenzspannung zurück. Und zwar auf V+ = AVcc und V- = AVss, wenn ich das richtig deute (ADC12MEMCTL0 Bits SREF0..2 alle 0) => Folien 4 und 8 im 2. Link.
Serieller schrieb: > Das Datenblatt ist sehr spartanisch, was die Beschreibungen betrifft. Deswegen gibt es ja den jeweiligen "Family User's Guide", der ausführliche Beschreibungen der Peripherie enthält, und die Codebeispiele, die die Nutzung der verschiedenen Peripherieelemente beschreiben. Mit der Kombination sollte man ganz gut zurechtkommen.
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.