[MSP430] ]SPI Kommunikation funktioniert bei niedriger Spannung nicht.

Gast #3630464
Lesenswert?
• ▲
▼
Hey,

habe hier einen MSP430F2274, den ich an 6 74HC595 in Serie 
anschließe(Q7S zu DS). An den Shift-Register sind LED's 
angeschlossen(keine Vorwiderstände). In meinem Code shifte ich ein Bit, 
um die LED's zu testen. Bei 3,3V VCC klappt es wunderbar. Wenn ich aber 
auf 3,0V die Spannung reduziere, stoppt die Signalübertragung. Oder, wie 
ich gerade festgestellt habe, bei beliebiger Spannung, wenn ich mit dem 
Oszi direkt an die Pins rangehe.

Bei allen SPI Leitungen, STCP und OE habe ich einen Serienwiderstand von 
100 Ohm. Außerdem sind noch Tantals zwischen VCC und GND vorhanden.


PS: Wenn ich mit dem Oszi direkt an die Pins rangehe, sehe ich Rauschen 
in mV-Bereich. Ab einer Etfernung von ca 4mm zeigt der Oszi mir erst die 
Flanken.


Code:
1
#include "msp430f2274.h"
2

3

4
#define STCP BIT1
5
#define OE BIT3
6

7

8

9
void delay(unsigned int i);
10
void enable(void);
11
void disable(void);
12
void latch_on(void);
13
void latch_off(void);
14
void write_SPI(unsigned long data);
15

16

17
unsigned long Data; //32 bit
18
int i;
19

20
int main(void)
21
{ 
22
 
23
  
24
    WDTCTL = WDTPW + WDTHOLD;             // Stop watchdog timer
25
    BCSCTL1 = CALBC1_1MHZ;    //changing the DCO's oscillations to 16MHz
26
    DCOCTL = CALDCO_1MHZ;
27
    P1OUT |= 0x0B;
28
    P3SEL |= 0x11;
29
    UCA0CTL1 |= UCSWRST;                     // RESET
30
    UCA0CTL0 |= UCCKPH + UCMSB + UCMST + UCSYNC;
31
    UCA0CTL1 |= UCSSEL_2;     
32
    UCA0BR0 = 0x00;
33
    UCA0BR1 = 0;
34
    UCA0MCTL = 0;
35
    UCA0CTL1 &= ~UCSWRST; 
36
    
37
    
38
    
39
    Data = 0x01;
40
    while(1)
41
      {
42
    if (Data==0){Data=1;}  
43
    Data=Data<<1;                                 // Increment Data value  
44
      
45
    write_SPI(Data);
46
      
47
      
48
          latch_on();
49
          enable();
50
          delay(500);
51
          disable();
52
          
53
            }
54
    }  
55
    
56

57

58
void write_SPI(unsigned long data)
59
{  
60
    latch_off();
61
    while (!(IFG2 & UCA0TXIFG));            // USCI_A0 TX buffer ready?
62
    UCA0TXBUF = data>>24;                       // Byte to SPI TXBUF
63
    while (!(IFG2 & UCA0TXIFG));            // USCI_A0 TX buffer ready?
64
    UCA0TXBUF = data>>16;                       // Byte to SPI TXBUF
65
    while (!(IFG2 & UCA0TXIFG));            // USCI_A0 TX buffer ready?
66
    UCA0TXBUF = data>>8;                       // Byte to SPI TXBUF
67
    while (!(IFG2 & UCA0TXIFG));            // USCI_A0 TX buffer ready?
68
    UCA0TXBUF = data;                       // Byte to SPI TXBUF
69
    while (!(IFG2 & UCA0TXIFG));            // USCI_A0 TX buffer ready?
70
    
71
}
72

73
void latch_on( void )
74
{
75
  P1OUT |= STCP;
76
  P1OUT &= ~STCP;
77
 
78
} 
79

80
void latch_off(void)
81
{
82
  P1OUT &= ~STCP;
83
}
84

85
void delay(unsigned int ms)
86
{
87
   while (ms--)
88
    {
89
         __delay_cycles(1000); // set for 16Mhz change it to 1000 for 1 Mhz
90
    }
91
}
92

93
void enable( void )
94
{
95
  P1OUT &= ~OE;
96
}
97
 
98
void disable( void )
99
{
100
  P1OUT |= OE;
101
}
Gast #3630820
Lesenswert?
• ▲
▼
Die Idee war mit einem Step-Down VCC suf die Forwardvoltage zu 
reduzieren, um so den Akku, mit der die Schaltung versorgt wird, länger 
zu halten, da ja der µC nur Strom im µBereich benötigt.

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.