Forum: Mikrocontroller und Digitale Elektronik MSP430G2553 Impulse zählen - wie schnell?


von asterix (Gast)


Lesenswert?

Hi, hat jemand einen MSP430G2553, einen Frequenzgenerator und kann 
nachgucken wie schnell der MSP430G2553 die eingehenden Impulse zählen 
kann?
1
#include "msp430g2553.h"
2
3
unsigned long impulse;
4
5
void count() { impulse++; }
6
7
void setup(void) {
8
  Serial.begin(9600);
9
10
  TACCTL0 = CCIE;                 
11
  TACCR0 = 12000; //(aufwachen bei impuls, zählen, schlafen legen, und) jede sekunde code im timer0 ausführen
12
  TACTL = MC_1 | TASSEL_1; 
13
14
  impulse = 0;
15
16
  attachInterrupt(P1_2, count, FALLING); //zähle impulse
17
}
18
19
void loop() {
20
  _BIS_SR(LPM3_bits + GIE);
21
}
22
23
#pragma vector=TIMER0_A0_VECTOR
24
__interrupt void Timer0_A0 (void) {
25
  Serial.print(impulse); //anzeigen
26
  impulse=0; //resetten
27
}

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

In einen Interrupthandler gehört kein Aufruf von Funktionen wie 
"Serial.print".

von Sven B. (scummos)


Lesenswert?

Das Ding hat bestimmt Timer, die man als Counter für einen Pin 
konfigurieren kann.

von count (Gast)


Lesenswert?

Sven B. schrieb:
> Das Ding hat bestimmt Timer, die man als Counter für einen Pin
> konfigurieren kann.

Du meinst capture compare Einheiten, ja, die hat er.

von Clemens L. (c_l)


Lesenswert?

count schrieb:
> Sven B. schrieb:
>> Das Ding hat bestimmt Timer, die man als Counter für einen Pin
>> konfigurieren kann.
>
> Du meinst capture compare Einheiten

Nein, er meint die TACLK-Signale auf Pins P1.0 und P3.7.

von count (Gast)


Lesenswert?

und initialisiert dafür den Interrupt P1_2.

???

Externe Takte lassen sich wunderbar mit der capture Einheit zählen, auch 
beim MSP430.

von Clemens L. (c_l)


Lesenswert?

count schrieb:
> Externe Takte lassen sich wunderbar mit der capture Einheit zählen

Die Capture-Einheit erfasst den Zeitpunkt einer Signalflanke; zum 
Zählen braucht man wieder den Interrupt, was keinen Vorteil gegenüber 
einem GPIO-Interrupt hat.

Hardware-Unterstützung für das Zählen selbst gibt es nur mit den 
TACLK-Eingängen.

von ./. (Gast)


Lesenswert?

Der Timer A kann Impulse auf dem extern zu konfigurierenden
Eingang INCLK zaehlen.

Bei einem Tastverhaeltnis von 0.5 bis zu seiner Frequenz
von Fsystem sagt das Datenblatt.

Wenn der DCO mit 16 Mhz laeuft, werden das dann wohl auch
16 MHz sein.

von asterix (Gast)


Lesenswert?

Hallo,
sry für die späte Antwort.

> In einen Interrupthandler gehört kein Aufruf von Funktionen wie "Serial.print".
Das is nur damit er ausgibt. Der Code ist nur ohne diesen Serial (dann 
aber mit LCD zum sehen Zahl der Impulse) getestet und 
funktioniert/zählt, allerdings war da wie gesagt kein Serial Zeug 
eingebaut, da das nicht auf meinem/einem Linux OS funktioniert, wie ich 
feststellen musste.

Das theoretische schön und gut aber wie schnell der Code nun zählen kann 
hat keiner beantwortet (habe leider keinen Frequenzgenerator oder womit 
man das am besten testen könnte).

Der Code funktioniert so: Chip schläft/spart Strom, wacht bei Impuls auf 
und zählt diesen, und legt sich wieder schlafen. Wenn wer meint der Code 
kann verbessert werden, am besten gleich den fertigen Vorschlag als 
abgeänderten Code posten, nicht nur Sätze.

Vorteil der MSP430 Architektur für mich ist der sehr geringe 
Stromverbrauch ohne viel modifizieren zu müssen, statt wie das bei einem 
Arduino der Fall ist und selbst dann (bei relativ vielen Tricks) 
verbraucht der noch ein Stück mehr. (Es gibt viele Geräte die einen Chip 
aus der MSP430 Familie nutzen statt einem Arduino wenn es darauf 
ankommt, dass das Gerät lange mit einer Batterie laufen soll.)

von Sven B. (scummos)


Lesenswert?

Haben doch mehrere Leute gesagt: wenn du schnell zählen willst, dann 
nimm einen der Hardware-Counter! Der Interrupt ist dafür völlig 
ungeeignet.

von Peter D. (peda)


Lesenswert?

asterix schrieb:
> (Es gibt viele Geräte die einen Chip
> aus der MSP430 Familie nutzen statt einem Arduino wenn es darauf
> ankommt, dass das Gerät lange mit einer Batterie laufen soll.)

Das ist Quatsch mit Soße.
Du mußt schon die CPUs selber miteinander vergleichen und nicht eine CPU 
mit einem Board, was noch viele andere Verbaucher enthält.

AVRs werden z.B. in Heizungsthermostaten verwendet und da muß die 
Batterie mindestens ein Jahr halten.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Peter D. schrieb:
> AVRs werden z.B. in Heizungsthermostaten verwendet und da muß die
> Batterie mindestens ein Jahr halten.

Nun, in elektronischen Heizkostenverteilern (die zehn Jahre Laufzeit 
haben) finden sich oft MSP430-Varianten.

Aber auch so ist das ein Vergleich von Quark mit Gurken, denn Dein 
Heizungsthermostat leidet in erster Linie unter dem Stromverbrauch des 
Motors, nicht unter dem des µCs.

Ob der Threadersteller die ihm jetzt schon mehrfach genannte Kernaussage 
erkennt, daß der Ansatz ungeeignet ist, per Interrupt zu zählen?

von Peter D. (peda)


Lesenswert?

asterix schrieb:
> Wenn wer meint der Code
> kann verbessert werden, am besten gleich den fertigen Vorschlag als
> abgeänderten Code posten, nicht nur Sätze.

Nö, da bist Du hier falsch.
Code gibts nur, wenn den mal jemand zufällig schon fertig hat.
Du wirst doch wohl im Datenblatt/Manual die paar Zeilen selber finden 
können, wie man einen der Timer als Counter konfiguriert.

von Peter D. (peda)


Lesenswert?

Rufus Τ. F. schrieb:
> denn Dein
> Heizungsthermostat leidet in erster Linie unter dem Stromverbrauch des
> Motors, nicht unter dem des µCs.

So isses, oftmals spielt der Verbrauch des nackten MCs überhaupt keine 
Rolle, auch nicht bei Batteriebetrieb.
Man kann also seinen persönlichen Präferenzen freien Lauf lassen. Der 
eine mag AVR, der andere eben MSP, 80C51, PIC usw.

von asterix (Gast)


Lesenswert?

Na gut, wenn keiner einen Frequenzgenerator hat und den Code mal eben 
schnell testen kann, is ok, ich dachte nur einen LaunchPad für 10-15€ 
und dann einen Fre., davon gibt es sicherlich einige Leute die beiden 
haben, vor allem in so einem Forum.

> So isses, oftmals spielt der Verbrauch des nackten MCs überhaupt keine
> Rolle, auch nicht bei Batteriebetrieb.

Eben doch. Und ja, der MSP430G2553 als LaunchPad Konkurrenz zum Arduino 
ist trotzdem deutlich stromsparender weil von Design aus. Arudino zieht 
75 mA, der MSP430G2553 im LaunchPad 10 mA und ohne Jumper LED 1 mA (das 
ist jetzt ohne LPM Modi!). Mit komplizierten Stromspar Tricks zieht der 
reine (auf Breadboard ohne Stromkonverter und so weiter) ATMEGA328P-PU 
(P für picoPower Version, da ist es möglich) Chip 0,6 mA, der 
MSP430G2553 is da im 0,0x mA Bereich. Und zumindest für das (schnelle) 
Zählen und dann pennen -- da habe ich Gammon (wer kennt sich da schon 
besser aus als er) gefragt -- ist der ATMEGA328P-PU nicht unter 0,6 mA 
zu bekommen (typischer Wert ist hier etwas über 1mA aber mit noch 
komplizierteren Tricks auf 0,6mA dann). Und von den vielen Anfänger 
unfreundlichen Stromspar-Tricks, um auf die 0,6mA zu kommen, ganz 
abgesehen.

> Nun, in elektronischen Heizkostenverteilern (die zehn Jahre Laufzeit
> haben) finden sich oft MSP430-Varianten.
Hier weiß einer Bescheid – aber nicht nur in Heiz.. Es geht vor allem um 
portable kleine „Geräte“ (wohl eher „Gerätchen“) (nicht irgendeine 
Heizung wo in der Tat egal ist ob der Chip 0,001mA, .., 1mA oder sogar 
>>10mA zieht). Will man eher unter einem Jahr Laufzeit dann ATMEGA (MEGA 
steht wohl für mega Stromverbrauch) (auf Breadboard zieht dieser ~30mA, 
der Konkurrent MSP430G2553 1mA, da fängt es an), will man eher 5-10Jahre 
dann MSP430G2553. Auch in medizinischen Geräten, wo es auf langen 
Batteriebetrieb ankommt, werden die MSP430 Chips verwendet, nicht 
ATMEGAs XD ;)

Der ATMEGA328 is deutlich größer als der MSP430G2553 (das deutet schon 
den größeren Stromverbrauch an). Aber da er größer ist, hat er bestimmt 
andere Vorteile (mehr Speicher und RAM hat er glaube ich, schneller ist 
er vielleicht auch, und natürlich ganz andere Features), ich will den 
ATMEGA nur bezüglich des Stromverbrauchs schlechtreden :D

https://www.google.de/search?q=msp430+LPM+modes ->
http://forum.allaboutcircuits.com/picture.php?albumid=274&pictureid=2440

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.