[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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren