www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430F2013 Grundlagen


Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;

Autor: Jörg S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich nehme an du willst einfach den binären Wert der Variable "Wert" 
senden?

Mein Vorschlag:
void Wort_Senden (void)
{
  unsigned char c;
 
  
  for (c = 16; c > 0; c--)  
  {
    if (Wert & 0x01)  // LSB gesetzt?
      P2OUT |= 0x01;   // Pin 2.1 high
    else
      P2OUT &= ~0x01;   // Pin 2.1 low
    
    Wert >>= 1;  // rechts schieben um 1 Bit
    

    P1OUT |= 0x01;               // H Clock
    for (i = ImpulseDauer; i > 0; i--) ;
    P1OUT &= ~0x01;              // L Clock
    for (i = ImpulseDauer; i > 0; i--) ;
  }
  
  P2OUT &= ~0x01;  // Pin 2.1 low
}

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.