Forum: Mikrocontroller und Digitale Elektronik Hilfe bei erstem Projekt


von mmax (Gast)


Lesenswert?

Hallo,

Ich braeuchte ein wenig Hilfe bzw. Anregungen fuer mein erstes Projekt. 
Es geht dabei darum einen barometrischen Sensor (MS5611-01BA01) mit 
Hilfe eines MSP430 (Im Moment TI Launchpad mit MSP430G2231) auszulesen 
und das ganze soll nur mit Solarzellen versorgt werden.

--- Mikrocontroller ---
Zuerst hatte ich mal versucht an meinen Rechner Daten/Zeichen zu 
schicken, da ich das fuer essentiell halte um irgendwas auszugeben und 
Fehler zu finden (stdout sozusagen). Da dieser MSP430 leider kein UART 
verbaut hat, bleibt mir wohl nur Software UART ueber. Hab dazu auch 
einen funktionierenden Code gefunden [1], doch mir scheint das ziemlich 
buggy ... mal funktionierts, mal nicht. Das scheint bei SW UART aber so 
zu sein, also waere ein MSP mit UART doch besser. Kann ich z.B den 
MSP430G2553IN20 in mein Launchpad (Rev1.4) stecken?

--- Barometrischer Sensor ---
Dann kann der MS5611 Sensor I2C und SPI ... was soll ich nehmen bzw. was 
funktioniert zuverlaessiger? Codebeispiele hab ich fuer beide 
Schnittstellen gefunden. Wenn jemand einen funktionierenden Code fuer 
diesen Sensor hat, waere das auch ein Entscheidungsgrund.

--- Solar ---
Versorgt soll die Schaltung dann schlussendlich von der Sonne werden. 
Die Solarzellen werden einen 1F Kondensator speisen und dieser sollte 
ueber einen LDO Spannungsregler die Schaltung versorgen. Gedacht hatte 
ich da an einen MAX8510, doch den gibts anscheinend nicht mehr ... kann 
mir jemand einen geeigneten empfehlen?

[1] http://gpio.kaltpost.de/?p=784

Danke fuer euer Antworten.

lG,
Max

von took (Gast)


Lesenswert?

mmax schrieb:
> Anregungen fuer mein erstes Projekt

mmax schrieb:
> doch mir scheint das ziemlich
> buggy ... mal funktionierts, mal nicht

Finde heraus, warum das so ist.

mmax schrieb:
> Kann ich z.B den
> MSP430G2553IN20 in mein Launchpad (Rev1.4) stecken?

Datenblätter raus und vergleichen.

von MaWin (Gast)


Lesenswert?

Wenn du nicht mal den UART zum Laufen bekommst,
brauchst du den Rest nicht bauen zu wollen.

Man wird halt die Doku lesen und beachten müssen:
http://gpio.kaltpost.de/?page_id=972

Da MS5611-01BA01 und MSP ab 1.8V laufen, kann eine
unstabilisierte Versorgung direkt aus dem GoldCap
ausreichend sein, wenn man den (5.5V) Goldcap an
einer Überladung aus der Solarzelle über 3.6V hindert,
z.B. per TLV431 oder ICL7665 oder einen 2.5V GoldCap
mit einem 2.5V shunt-Regler schützt.

Ein LP2950-3 hat halt immer einen Spannungsverlust
und damit eine schlechte Nutzung der Solarenergie zu
Folge.

von mmax (Gast)


Lesenswert?

took schrieb:
> mmax schrieb:
>> doch mir scheint das ziemlich
>> buggy ... mal funktionierts, mal nicht
>
> Finde heraus, warum das so ist.

Ich denke mal dass ein ein UART, nur in SW relaisiert, sowieso nicht so 
gut funktioniert da man von einem Timer, also indirekt von der Taktung, 
abhaengig ist. Da ich den internen Takt des MCs verwende, gehe ich mal 
davon aus dass es daran liegt. Man findet hier im Forum ja auch 
genuegend Beitraege dazu. Also entweder anderen MC oder externen Quarz.

> mmax schrieb:
>> Kann ich z.B den
>> MSP430G2553IN20 in mein Launchpad (Rev1.4) stecken?
>
> Datenblätter raus und vergleichen.

Naja, laut Webseite ist das Launchpad mit allen MSP430G2xx kompatibel, 
sollte also funktionieren. Und die neue Rev 1.5 ist standardmaessig mit 
dem MC ausgestattet.

von Karl H. (kbuchegg)


Lesenswert?

mmax schrieb:
> took schrieb:
>> mmax schrieb:
>>> doch mir scheint das ziemlich
>>> buggy ... mal funktionierts, mal nicht
>>
>> Finde heraus, warum das so ist.
>
> Ich denke mal dass ein ein UART, nur in SW relaisiert, sowieso nicht so
> gut funktioniert da man von einem Timer, also indirekt von der Taktung,
> abhaengig ist.

Wenn du dir das mal genau überlegst, dann kommst du drauf, dass du 
selbstverständlich auch bei einer Hardware-UART von der Taktung abhängig 
bist. Denn auch eine Hardware-UART saugt sich ja nicht irgendwie magisch 
den korrekten Takt aus den Fingern.

von mmax (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
>> Ich denke mal dass ein ein UART, nur in SW relaisiert, sowieso nicht so
>> gut funktioniert da man von einem Timer, also indirekt von der Taktung,
>> abhaengig ist.
>
> Wenn du dir das mal genau überlegst, dann kommst du drauf, dass du
> selbstverständlich auch bei einer Hardware-UART von der Taktung abhängig
> bist. Denn auch eine Hardware-UART saugt sich ja nicht irgendwie magisch
> den korrekten Takt aus den Fingern.

Alles ist vom Takt abhaengig. Aber wenn der UART direkt auf dem MC 
implementiert ist, ist er interrupt gesteuert, oder?

Also meinst du dass eine externer Quarz sowieso vernuenftiger waere?

von mmax (Gast)


Lesenswert?

MaWin schrieb:
> Wenn du nicht mal den UART zum Laufen bekommst,
> brauchst du den Rest nicht bauen zu wollen.

eben!

> Man wird halt die Doku lesen und beachten müssen:
> http://gpio.kaltpost.de/?page_id=972

Das ist die Doku zum HW UART ... geht mit meinem MC aber nicht.

> Da MS5611-01BA01 und MSP ab 1.8V laufen, kann eine
> unstabilisierte Versorgung direkt aus dem GoldCap
> ausreichend sein, wenn man den (5.5V) Goldcap an
> einer Überladung aus der Solarzelle über 3.6V hindert,
> z.B. per TLV431 oder ICL7665 oder einen 2.5V GoldCap
> mit einem 2.5V shunt-Regler schützt.
>
> Ein LP2950-3 hat halt immer einen Spannungsverlust
> und damit eine schlechte Nutzung der Solarenergie zu
> Folge.

Ok, das ist mal ein guter Tip. Ich denke ich werds mal ohne 
Spannungsregler testen, vielleicht brauch ich den wirklich nicht.

von mmax (Gast)


Lesenswert?

Ich spiele noch immer mit dem Software UART von [1] herum. Und selbst 
der originale Code funktioniert nicht zuverlaessig. Manchmal muss ich 
minicom ("minicom -o -D /dev/ttyACM0 -b 9600") mehrmals starten um eine 
funktionierende Kommunikation hinzubekommen.

Ist das normal bzw. kennt jemand das auch?
Hift vielleicht ein externen Quarz (12MHz)?
Wuerde es was bringen auf einen MC mit integrierten UART (MSP430G2553) 
umzusteigen?

Bin fuer jede Hilfe dankbar!

So macht das naemlich wenig Spass und bevor ich das mit der MC->PC 
Verbindung nicht hinbekomme, brauch ich gar nicht weitermachen.

[1] http://gpio.kaltpost.de/?p=784

lG,
Max

von MSP430 (Gast)


Lesenswert?

mmax schrieb:
> Ist das normal bzw. kennt jemand das auch?
> Hift vielleicht ein externen Quarz (12MHz)?
> Wuerde es was bringen auf einen MC mit integrierten UART (MSP430G2553)
> umzusteigen?

Ich nutze den SW-UART mit den kalibrierten DCO Frequenzen. Das läuft 
gut.

Besser ist natürlich der Umstieg auf den MSP430 mit einer USCI. Mit dem 
DCO gehen dann auch höhere Frequenzen. Auch dafür gibt es Demos bei TI.

von RDuke (Gast)


Lesenswert?

Was soll die Schaltung denn machen? Ich habe ein Gleitschirm-Variometer 
gebaut, klingt sehr ähnlich...

Für Debug-UART benutze ich folgendes (aus dem AVR-Freaks-Forum):
1
void sputchar( uint8_t c )
2
{
3
  c = ~c;
4
  STX_PORT &= ~(1<<STX_BIT);            // start bit
5
  for( uint8_t i = 10; i; i-- ){        // 10 bits
6
    _delay_us( 1e6 / BAUD );            // bit duration
7
    if( c & 1 )
8
      STX_PORT &= ~(1<<STX_BIT);        // data bit 0
9
    else
10
      STX_PORT |= 1<<STX_BIT;           // data bit 1 or stop bit
11
    c >>= 1;
12
  }
13
}


Der MS5611 reagiert sehr empfindlich auf Veränderungen der 
Versorgungsspannung, ich benutze den TS5205 als Spannungsregler.

von mmax (Gast)


Lesenswert?

Ja genau das hab ich auch vor! Welchen Drucksensor hast du denn 
verwendet? Gibts naehere Infos zu deinem Projekt?

Den UART brauch ich eben nur um mir Debuginfos ausgeben zu lassen, bevor 
das nicht zuverlaessig funktioniert brauch ich nicht weitermachen, denke 
ich. Ich werd mal deinen Code testen.

Danke,
Max

von Bernd N (Gast)


Lesenswert?

Launchpad geprüft...
1
#include "msp430g2231.h"
2
#include "inttypes.h"
3
4
#define TXD BIT1                                                  // TXD an P1.1
5
#define BitTime   104                                             // 9600 Baud, SMCLK=1MHz (1MHz/9600)=104
6
7
// globale Variablen
8
uint16_t TXByte;                                                  // TXByte + Start/Stop BIT's
9
10
// Prototypes
11
void putChar (uint8_t c);
12
void printfEasy (const char *s);
13
14
void main (void)
15
{
16
    WDTCTL = WDTPW | WDTHOLD;                                     // Stop WDT
17
    BCSCTL1 = CALBC1_1MHZ;                                        // Set range
18
    DCOCTL = CALDCO_1MHZ;                                         // SMCLK = DCO = 1MHz
19
20
    P1SEL |= TXD;                                                 // TXD connected @ Timer
21
    P1DIR |= TXD;                                                 // als Ausgang
22
23
//  ---- Soft. UART Timer Setup ----
24
    CCTL0 = OUT;                                                  // TXD Idle as Mark = '1'
25
    TACTL = TASSEL_2 | MC_2;                                      // SMCLK, continuous mode
26
27
    __bis_SR_register (GIE);                                      // interrupts enabled
28
29
    printfEasy ("Hello World\n\r");
30
31
    while (1) {}
32
}
33
34
// ---- simple printf ----
35
36
void printfEasy (const char *s)
37
{
38
    while (*s) {
39
        putChar (*s++);
40
    }
41
}
42
43
// TXing a byte
44
void putChar (uint8_t c)
45
{
46
    while (CCTL0 & CCIE);                                         // Warten bis die ISR alle BITs ausgesendet hat
47
    TXByte = 0x200 | (c << 1);                                    // Char + Stop BIT in TXByte einfügen
48
    CCR0 = TAR + 16;
49
    CCTL0 = CCIS0 | OUTMOD0 | CCIE;                               // re-Enable Interrupts, trigger Transmit ISR
50
}
51
52
// Timer A0 interrupt service routine
53
#pragma vector=TIMERA0_VECTOR
54
__interrupt void Timer_A (void)
55
{
56
    if (TXByte) {                                                 // Wenn alle BITs ausgesendet sind...
57
        (TXByte & 1) ? (CCTL0 &= ~ OUTMOD2) : (CCTL0 |= OUTMOD2);
58
        TXByte >>= 1;
59
        CCR0 += BitTime;                                          // BIT Zeit aufaddieren
60
    } else {
61
        CCTL0 &= ~ CCIE;                                          // ...disable interrupt
62
    }
63
}

Viel Spass.

von RDuke (Gast)


Lesenswert?

Ein paar Infos gibts hier: 
http://www.paraglidingforum.com/viewtopic.php?t=36799&start=120 Das Ding 
im Legostein ist meins.
Kennst Du das "Le BipBip"? Da ist auch ein MSP430 und ein MS5607 drin, 
und der Code ist auf http://www.lebipbip.com veröffentlicht. Der Code 
für den MS5611 ist sehr ähnlich, glaube nur zwei Shift-Anweisungen sind 
anders.

von mmax (Gast)


Lesenswert?

RDuke schrieb:
> Ein paar Infos gibts hier:
> http://www.paraglidingforum.com/viewtopic.php?t=36... Das Ding
> im Legostein ist meins.

Sehr genial ... gute Idee im Legostein.

Das "Le BipBip" kannte ich nicht, schaut aber schon sehr professionell 
aus ... aber mir gehts ja auch ums basteln. Den Code hab ich noch net 
gfunden, werd ihn mir aber mal anschaun.

Meine Anregung kam vom:
http://pataga.net/ (frueher mal www.pixelproc.net oder so)

Ich hab auf jeden Fall mal Solarzellen, Goldcap und einen MSP430G2553 
bestellt, den Rest hab ich soweit zu Hause.

lG,
Max

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.