MSP430 Programmieren!

Diskutiere MSP430 Programmieren! im Elektronik und Chipkarten-Programmierung Forum im Bereich Hardware & Software Forum; Gute Idee, leider war's das nicht... Damit ist die Leitung einfach dauernd auf 1.
  • MSP430 Programmieren! Beitrag #21
P

Phip

Mitglied
Dabei seit
01.12.2006
Beiträge
6
Reaktionspunkte
0
Ort
Sarnen (CH)
Gute Idee, leider war's das nicht... Damit ist die Leitung einfach dauernd auf 1.
 
  • MSP430 Programmieren! Beitrag #22
S

SupaChris

Bekanntes Mitglied
Dabei seit
23.07.2001
Beiträge
1.167
Reaktionspunkte
0
Ort
Elb-Florenz
Wenn durch einen Pullup die Leitung dauerhaft auf 1 ist, ist der Portpin entweder nicht richtig angelötet, oder nicht richtig initialisiert. Du musst per PxSEL die Pins erst mal an die SPI übergeben, und außerdem trotzdem die Richtung per PxDIR einstellen. Erst dann klappts.

Interrupt 25µs? Welche Taktfrequenz hast du denn? Nimmst du den DCO?

Wenn man den MSP aus dem LPM3 aufweckt, und den DCO benutzt braucht der 6µs plus 6 Takte des DCO-Taktes, bis er in der ISR ist, hab ich nachgemessen, stimmt. Wenn man im LPM0 bis 2 ist, gehts viel schneller. Im Aktivmodus natürlich noch schneller. Ich glaub 6 Takte braucht er, um in die ISR zu springen.

Ansonsten is der natürlich mit den max. 8MHz bissl langsam, aber dafür brauch er sagenhaft wenig Strom. Ich arbeite für meine Diplomarbeit mit dem, klappt alles prima. Vor allem das schnelle wechseln der LPMs klappt hervorragend.
 
  • MSP430 Programmieren! Beitrag #23
P

Phip

Mitglied
Dabei seit
01.12.2006
Beiträge
6
Reaktionspunkte
0
Ort
Sarnen (CH)
Hallo SupaChris,

die Leitung ist schon richtig initialisiert, ich hab' an dem SPI teilweise (jetzt nicht) eine SD-Karte dran, funktioniert problemlos. Ausserdem ist der MISO, bzw. SOMI-Pin ja der Ausgang des EV5041, daher kann es auch nicht an der Einstellung MSP-Seitig liegen... Ein Eingang ist's ja, sonst hätte ich da keine solche Spikes.
Der MSP ist dauernd im Aktiv-Modus und läuft mit der maximalen DCO-Frequenz (Ist die wirklich max. 5MHz?!). Da scheinen die 25µs schon verdammt lange zu sein. Ich denke mal, der Compiler mach da etwas, was er nicht sollte...
Es liegt aber auch nicht an der maximalen Taktfrequenz von 8MHz, das reicht dicke. Aber wenn dann halt ein Prozessor mit RISC-Architektur bis zu sechs Takten für einen Befehl braucht, dann ist das schon heftig...

Gruss
Philipp

PS @cmddegi:
Du hast oben noch was von den Fusebits geschrieben: Daran liegt's nicht, der MSP430 hat nur eine einzige Fuse und das ist die Security-Fuse. Wenn man die wegbläst, dann lässt er sich überhaupt nicht mehr über JTAG programmieren. Allerdings kann man die mit unserem Programmer (glücklicherweise) gar nicht zerstören, daher liegt's sicher nicht daran.
Das halte ich im Übrigen auch für einen grossen Vorteil der MSPs gegenüber z.B. der AVRs, da man da wirklich alle Einstellungen im laufenden Programm vornehmen kann.
 
  • MSP430 Programmieren! Beitrag #24
P

Phip

Mitglied
Dabei seit
01.12.2006
Beiträge
6
Reaktionspunkte
0
Ort
Sarnen (CH)
Also, ich habe jetzt mal noch eine zweite Platine bestückt. Genau gleiches Problem. Der EV will einfach nicht antworten und die Leitung scheint in der Luft zu hängen...
 
  • MSP430 Programmieren! Beitrag #25
S

SupaChris

Bekanntes Mitglied
Dabei seit
23.07.2001
Beiträge
1.167
Reaktionspunkte
0
Ort
Elb-Florenz
Also der DCOI geht theoretisch bis 56MHz, das sollte reichen. Und der RISC Kern braucht nicht 6 Takte für einen Takt, sondern, er braucht 6 Takte, um den Interrupt zu bedienen. Ist ja auch klar, der Stack und die Statusregister müssen gesichert werden, das dauert nun mal ein paar Takte.
Und um aus dem LPM in Active zu springen dauerts nun mal 6µs by design, steht alles im Datenblatt. Aber nur wenn man den DCO benutzt. Wenn man einen XT2 benutzt, muss der erst wieder hochgefahren werden. Mit dem Compiler hat eine ISR nix zu tun, das ist Hardware.

Wie kommst du drauf, dass der 5MHz maximal hat? Ich betreibe die MSPs an 3,6V Betriebsspannung mit 8,192MHz aus dem DCO, mit einem 32Khz Quarz als Referenz (ACLK).
 
  • MSP430 Programmieren! Beitrag #26
P

Phip

Mitglied
Dabei seit
01.12.2006
Beiträge
6
Reaktionspunkte
0
Ort
Sarnen (CH)
Oha, dann muss ich mir meine Einstellungen vom DCO nochmal ansehn. Wie hast du den denn eingestellt um auf eine höhere Frequenz zu kommen?
Ich sagte auch nicht, dass er immer sechs Takte pro Befehl (Nicht Takte pro Takt ;) ) benötigt, sondern dass er /bis/ sechs Takte pro Befehl braucht. Für RISC ist das schon recht viel. Die 6µs für einen Int sind natürlich von der Hardware vorgegeben, aber bei mir braucht das Ding 25µs bei 5MHz Takt bis der erste Befehl in der ISR ausgeführt wird. Getaktet mit DCO, kein LPM. Daher gehe ich davon aus, dass der Compiler noch einiges an den Anfang der ISR einbaut, das eigentlich nicht dort sein sollte.

Gruss
Philipp
 
  • MSP430 Programmieren! Beitrag #27
S

SupaChris

Bekanntes Mitglied
Dabei seit
23.07.2001
Beiträge
1.167
Reaktionspunkte
0
Ort
Elb-Florenz
Code:
//------------------------------------------------------------------------------
void Set_DCO (void)                         // Set DCO to selected frequency
//------------------------------------------------------------------------------
{

#define DELTA 125                            // target DCO = DELTA*(32768) = 4096000
  unsigned int Compare, Oldcapture = 0;
  
  CCTL2 = CM_1 + CCIS_1 + CAP;              // CAP, ACLK
  TACTL = TASSEL_2 + MC_2 + TACLR;          // SMCLK, cont-mode, clear

  while (1)
  {
    while (!(CCIFG & CCTL2));               // Wait until capture occured
    CCTL2 &= ~CCIFG;                        // Capture occured, clear flag
    Compare = CCR2;                         // Get current captured SMCLK
    Compare = Compare - Oldcapture;         // SMCLK difference
    Oldcapture = CCR2;                      // Save current captured SMCLK

    if (DELTA == Compare) break;            // If equal, leave "while(1)"
    else if (DELTA < Compare)               // DCO is too fast, slow it down
    {
      DCOCTL--;
      if (DCOCTL == 0xFF)
      {
        if (!(BCSCTL1 == (XT2OFF)))
        BCSCTL1--;                          // Did DCO roll under?, Sel lower RSEL
      }
    }
    else
    {
      DCOCTL++;
      if (DCOCTL == 0x00)
        {
          if (!(BCSCTL1 == (XT2OFF + 0x07)))
          BCSCTL1++;                        // Did DCO roll over? Sel higher RSEL
        }
    }
  }
  CCTL2 = 0;                                // Stop CCR2
  TACTL = 0;                                // Stop Timer_A
}
 
  • MSP430 Programmieren! Beitrag #28
P

Phip

Mitglied
Dabei seit
01.12.2006
Beiträge
6
Reaktionspunkte
0
Ort
Sarnen (CH)
Also ich sehe einfach nicht, wie man auf mehr als 5MHz DCO-Frequenz kommen soll. Ich stelle den bei mir so ein:

DCOCTL = DCO2 | DCO1 | DCO0;
BCSCTL1 = RSEL2 | RSEL1 | RSEL0;
BCSCTL2 = SELM0;

(Deine Funktion kann ich net ausprobieren, da ich keinen 32kHz-Quarz angeschlossen hab')

Damit wähle ich ja bereits die höchstmögliche Frequenz, wie sie auch im Datenblatt angegeben ist (msp430f1611.pdf, Seite 36, fDCO77). Oder gibt's noch einen anderen DCO in den Chips, mit dem man höher gehen kann?
Ausserdem solltest du mit der Anweisung DCOCTL++/-- aufpassen. Damit verstellst du ja auch die MODx-Bits.
 
  • MSP430 Programmieren! Beitrag #29
S

SupaChris

Bekanntes Mitglied
Dabei seit
23.07.2001
Beiträge
1.167
Reaktionspunkte
0
Ort
Elb-Florenz
Das Programm ist auf einem C-Demo von TI. Das klappt einwandfrei. Mit dem 32Khz Quarz kommt man auf 56MHz laut meinem Buch. 8 hab ich schon ausprobiert. Da sind ja noch paar FN Steuerbits, die die Stromquelle auswählen, um die Frequenzbereiche abzudecken.
 
  • MSP430 Programmieren! Beitrag #30
S

SupaChris

Bekanntes Mitglied
Dabei seit
23.07.2001
Beiträge
1.167
Reaktionspunkte
0
Ort
Elb-Florenz
Hab nochma nachgeschaut, auf Seite 36, das angegebene ist mit dem RC.Oszillator. Der kommt dann nicht so hoch. Wenn du den 32Khz Quarz anschließt, kommste auch auf mehr als 5MHz.

Es sind alle ganzzahligen Verfielfachungen von 2 bis 1024 der Quarzfrequenz möglich. Also 64Khz bis 32MHz an einem 32Khz Quarz.

Außerdem ist der RC-Osc grottenschlecht, den kann man doch für nix verwenden. Schon ne UART Kommunikation mit dem PC scheitert dann (meist).
 
Zuletzt bearbeitet:
  • MSP430 Programmieren! Beitrag #31
M

mk321

Neues Mitglied
Dabei seit
30.11.2006
Beiträge
4
Reaktionspunkte
0
Hall Leute!

Sorry wollte mich an sich früher gemeldet haben.

Ich habe das SPI jetzt Softwaremäßig implementiert. Jetzt kann ich den Chip wunderbar ansprechen. ISt leider nicht so sparsam dann das ganze.
Mit dem Hardware SPI habe ich nicht immer die korrekten Werte zurück bekommen. Ich denke das liegt daran, daß bei Senden bzw Empfangen die Flanken an denen das Signal getriggert wird unterschiedlich sind.

Gruß

MK
 
  • MSP430 Programmieren! Beitrag #32
S

SupaChris

Bekanntes Mitglied
Dabei seit
23.07.2001
Beiträge
1.167
Reaktionspunkte
0
Ort
Elb-Florenz
Hmm...laut Datenblatt übernimmt der EV5041 im SPI Modus die Daten mit der steigenden Flanke, und mit der fallenden kann man lesen. So stehts im Datenblatt auf Seite 16. Das passt doch haargenau zum SPI-Mode 00. Also CKPL und CKPH beide 0. Schau mal im Family User Guide des MSP430, da stehts auf Seite 289 genauso drin.
 
  • MSP430 Programmieren! Beitrag #33
M

mk321

Neues Mitglied
Dabei seit
30.11.2006
Beiträge
4
Reaktionspunkte
0
An sich stimmt das. Leider funktioniert das trotzdem nicht. Habe sogar die anderen Varianten also SPI Modi durchprobiert.

MK
 
  • MSP430 Programmieren! Beitrag #34
S

SupaChris

Bekanntes Mitglied
Dabei seit
23.07.2001
Beiträge
1.167
Reaktionspunkte
0
Ort
Elb-Florenz
Zum DCO hab ich nochma eine kleine Berichtigung. An der alten MSP430X1xxx Baureihe geht wirklich nur maximal 5MHz ungefähr. Mit einem 32,768Khz Quarz aber sehr genau und mit kleinem Jitter.

Die 8MHz habe ich auf einem MSP430X4xx eingesetzt, der hat den FLL+ drin, kann theoretisch bis 56MHz erzeugen.

Kleiner Irrtum von mir. War bissl durchnander gekommen, bei den vielen MSP-Varianten die ich mittlerweile bearbeite.
 
Thema:

MSP430 Programmieren!

ANGEBOTE & SPONSOREN

https://www.mofapower.de/

Statistik des Forums

Themen
213.180
Beiträge
1.579.173
Mitglieder
55.879
Neuestes Mitglied
stonetreck
Oben