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 | }
|