Forum: Mikrocontroller und Digitale Elektronik [MSP430] ]SPI Kommunikation funktioniert bei niedriger Spannung nicht.


von Steffen M. (Gast)


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
}

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Steffen M. schrieb:
> Bei allen SPI Leitungen, STCP und OE habe ich einen Serienwiderstand von
> 100 Ohm.

Wozu soll der gut sein?

von Steffen M. (Gast)


Lesenswert?

Also ich hab das so verstanden, dass das den Signal gläten soll.

von spontan (Gast)


Lesenswert?

Bin zu faul zum nachsehen, für welche Spannungen sind denn die HC595 
spezifiziert?

von Steffen M. (Gast)


Lesenswert?

Laut Datenblatt sollen ie Register die Spnnungen von 2V bis 6V 
mitmachen.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Steffen M. schrieb:
> Also ich hab das so verstanden, dass das den Signal gläten soll.

Mit was für einer Taktfrequenz betreibst Du Deine SPI-Schnittstelle? Und 
wie lang ist die Strecke zwischen µC und Schieberegister?

Lass' die Widerstände einfach mal weg.

: Bearbeitet durch User
von Steffen M. (Gast)


Lesenswert?

1 MHz isz die Taktfrequenz für die Shiftregister.

Die Strecke ist ca. 8 cm.

von Steffen M. (Gast)


Lesenswert?

Ich hab zuerst ohne Widerstände getan. Gleicher Effekt. Ich glaube ohne 
Strombegrenzung wirds nicht klappen.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das ist ziemlich unwahrscheinlich. Da liegt ganz sicher ein komplett 
anders gelagertes Problem vor.

Magst Du ein Bild (Photo, aber 
http://www.mikrocontroller.net/articles/Bildformate beachten) Deines 
Aufbaus posten?

von Steffen M. (Gast)


Angehängte Dateien:

Lesenswert?

Hier mein provisorischer Aufbau.

Hoffe man erkennt es einigermaßen.

von Daniel V. (danvet)


Lesenswert?

Steffen M. schrieb:

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

Du brauchst 100nF für die Schieberegister. Die Tantals kannst du unter 
umständen sogar weglassen.

von Maxx (Gast)


Lesenswert?

Steffen M. schrieb:
> Hier mein provisorischer Aufbau.
>
> Hoffe man erkennt es einigermaßen.

Seh ich das richtig? Keine Vorwiderstände und die LEDs direkt über die 
595er gespeist?

Was wird bloß mit der Differenz auf Uf und Vcc passieren?
Wie groß meinst du wird If werden?

von Daniel V. (danvet)


Lesenswert?

Daniel V. schrieb:
> Steffen M. schrieb:
>
>> Bei allen SPI Leitungen, STCP und OE habe ich einen Serienwiderstand von
>> 100 Ohm. Außerdem sind noch Tantals zwischen VCC und GND vorhanden.
>
> Du brauchst 100nF für die Schieberegister. Die Tantals kannst du unter
> umständen sogar weglassen.

Ach ja, der µC braucht auch 100nF :-)

von Steffen M. (Gast)


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.

von Max H. (hartl192)


Lesenswert?

Zum 1001 Mal: LEDs werden mit konstantem Strom und nicht mit 
konstanter Spannung betrieben.

: Bearbeitet durch User
von Steffen M. (Gast)


Lesenswert?

Ok, bin noch in der Ausbildung. Ohne Strombegrenzung also nix los.

von Steffen M. (Gast)


Lesenswert?

Okey, ich habe das Problem gelöst. Es lag nicht an den Vorwiderständen. 
Der Port 1 von meinem MSP war kaputt. Umgelötet auf Port 4 und es 
funktioniert, sogar bei 1,8V.

von Maxx (Gast)


Lesenswert?

Steffen M. schrieb:
> Okey, ich habe das Problem gelöst. Es lag nicht an den Vorwiderständen.
> Der Port 1 von meinem MSP war kaputt.

Warum wohl nur.

von Steffen M. (Gast)


Lesenswert?

Die LED's hängen ja nicht an dem MSP, sondern an den Shifts. MSP müsste 
eigntlich davon nicht betroffen sein.

von Maxx (Gast)


Lesenswert?

Steffen M. schrieb:
> Die LED's hängen ja nicht an dem MSP, sondern an den Shifts. MSP
> müsste
> eigntlich davon nicht betroffen sein.

Und der 595 ist so freundlich die Clamping Dioden rechtzeitig 
durchzubrennen bevor die Itod deines MSP Pins erreicht ist.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.