Forum: Mikrocontroller und Digitale Elektronik MSP430F2013 Grundlagen


von Dirk (Gast)


Lesenswert?

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;

von Jörg S. (Gast)


Lesenswert?

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
}

von Dirk (Gast)


Lesenswert?

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

von Dirk (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.