Hallo, Bin umgestiegen auf die IAR, beim Composer kammen weitere Fehlermeldungen im Bereich ADC. Mit meiner Impulspausenmodulation bin ich auf ca. 20/30 Werte(16Bit) pro sec. gekommen.( PIN mit LED) Jetzt muß ich doch ein zweier System nehmen. Selbstgemachter Clock(schau nach) + Daten, der ander µP bekommt auch eine Sofwarelösung. Hätte gerne 200/sec. ADC abfragen, Datenfluss nur in eine Richtung. msp430F2013 USB-Stick Frage: - wie steuere ich 2 PINs an, welche Lötösen, wie sehen die Befehle aus ( sollten den ADC und Ref+/- nicht behindern) Mit dem PIN der LED kann ich den 2µP ansteuern, aber .... (? P2DIR |= 0x01; [P2OUT = 0x01 <> P2OUT = 0x00]; Lötpunkt P4) läuft nicht bei mir (oder auch Error: P3DIR |= 0x01 ? fehlt ein Pulldown Widerstand, Drahtlänge 1m. ( Habe nur ein einfaches Multimeter.) In den PDFs finde ich zwar Hinweise, aber umsetzen kann ich die leider noch nicht. Wie oft kann ich die Daten in den MPS schreiben, gibts da eine Grenze? Vielen Dank, jede Hilfe ist willkommen Dirk ############ so ist der Stand der Dinge void Wort_Senden(); void Wort_Senden2(); void Impulse(); volatile unsigned long ImpulseDauer= 50000; volatile unsigned int Wert; //Global übergabe des Wertes zum Senden #include <msp430x20x3.h> void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer P1DIR |= 0x01; // Set P1.0 to output direction P2DIR |= 0x01; unsigned long i; for (i =50000; i > 0; i--) // Testschleife { Wert= i; Wort_Senden(); } } ---------------- // hier werden die 16Bit verarbeitet void Wort_Senden (void) { unsigned long b = 65536; unsigned long i; unsigned long c; P2OUT = 0x00; for (c = 16; c > 0; c--) { b = b / 2; if (Wert >= b) { Wert = Wert - b; P2OUT = 0x01; // H Lötöse: Pin 4 auf dem Board } else { P2OUT = 0x00; //L } P1OUT = 0x01; // H Clock for (i = ImpulseDauer; i > 0; i--) ; P1OUT = 0x00; // L Clock for (i = ImpulseDauer; i > 0; i--) ; } P2OUT = 0x00;
Ich nehme an du willst einfach den binären Wert der Variable "Wert" senden? Mein Vorschlag:
1 | void Wort_Senden (void) |
2 | {
|
3 | unsigned char c; |
4 | |
5 | |
6 | for (c = 16; c > 0; c--) |
7 | {
|
8 | if (Wert & 0x01) // LSB gesetzt? |
9 | P2OUT |= 0x01; // Pin 2.1 high |
10 | else
|
11 | P2OUT &= ~0x01; // Pin 2.1 low |
12 | |
13 | Wert >>= 1; // rechts schieben um 1 Bit |
14 | |
15 | |
16 | P1OUT |= 0x01; // H Clock |
17 | for (i = ImpulseDauer; i > 0; i--) ; |
18 | P1OUT &= ~0x01; // L Clock |
19 | for (i = ImpulseDauer; i > 0; i--) ; |
20 | }
|
21 | |
22 | P2OUT &= ~0x01; // Pin 2.1 low |
23 | }
|
Hallo Jörg, leider läuft der Code nicht bei mir. Auch die LED auf dem USB-Stick ist dauert an. P2OUT |= 0x01; // Pin 2.1 high P2OUT &= ~0x01; // Pin 2.1 low P1OUT |= 0x01; // H Clock P1OUT &= ~0x01; // L Clock +++++++++++++++ Ist den dieser Anfang richtig? WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer P1DIR |= 0x01; // P2 Lötöse // Set P1.0 to output direction P2DIR |= 0x01; // P4 Lötöse ? Wie steure ich die andern I/O an? --------auch Versuche mit diesem Code gemacht P1OUT ^= 0x01; // Toggle P1.0 using exclusive-OR P2OUT ^= 0x01; ---- P1OUT = 0x01; // P1.0 an P2OUT = 0x01; ... P1OUT = 0x00; // P1.0 aus P2OUT = 0x00; Beidesmal kann ich PIN1(Lötöse P2) messen, PIN2 kann ich auch an den Lötösen nicht messen/finden (sollte Lötöse P4 sein). Trotzdem vielen Dank für den Versuch Dirk
Hallo, bin ein Stück weiter. P1DIR |= 0x0c; // P1.2 and P1.3 output => P1DIR |= 0x0d; // Lötöse P4 auf dem Stick oder P1DIR = 0xFF; // All P1.x outputs damit läuft es dann. P1OUT |= 0x01; // P1.0 set P1OUT &= ~0x04; // aus for (i = 50000; i > 0; i--); // Delay P1OUT &= ~0x01; // P1.0 reset P1OUT |= 0x04; //an for (i = 50000; i > 0; i--); Danke Dirk
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.