MSP430F2013 Grundlagen

Gast #531354
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;
Gast #531510
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
}
Gast #531915
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
Gast #531931
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.