Hallo!
Ich programmiere am MSP430G2231.
Ich würde gerne den Timer A0 über den ACLK benutzen + Interrupt.
Wie kann ich nun die Zeit des ACLK so einstellen, dass ich jede sekunde
einen Interrupt bekomme?
Da ich später noch die Low-Power-Modes benutzen möchte, muss es der ACLK
sein.
Ich habe schon versucht mit dem TimerA0 input divider /8 zu arbeiten -
das scheint aber nicht zu reichen..
Freue mich schon über eure Beiträge! :)
Wenn Du ein 32.768 kHz Uhrenquarz angeschlossen hast (Bei dem G2231
vermute ich, dass du ein Launchpad hast?), kannst Du auch sehr einfach
den Watchdogtimer nehmen - sofern Du ihn nicht als Watchdog benötigst.
1
/* Handle WDT interrupt, called 1x per second */
2
#pragma vector=WDT_VECTOR
3
__interruptvoidSekunde(void)
4
{
5
}
6
7
intmain(void)
8
{
9
WDTCTL=WDT_ADLY_1000;/* WDT 1000ms via ACLK @ 32kHz */
10
BCSCTL3=XCAP_2;/* Select XCAP 2 for LFX1 */
11
IE1|=WDTIE;/* Enable WDT interrupt */
12
_EINT();/* Enable Interrupts */
13
for(;;){
14
_BIS_SR(LPM3_bits);/* Sleep */
15
}
16
}
Funktioniert wie gesagt so nur mit externem Uhrenquarz, der ACLK benutzt
dieses per default wenn vorhanden!
Gruß, Jan
Jan S. schrieb:> Wenn Du ein 32.768 kHz Uhrenquarz angeschlossen hast (Bei dem G2231> int main(void)> {> WDTCTL = WDT_ADLY_1000; /* WDT 1000ms via ACLK @ 32kHz */> BCSCTL3 = XCAP_2; /* Select XCAP 2 for LFX1 */> IE1 |= WDTIE; /* Enable WDT interrupt */> _EINT(); /* Enable Interrupts */> for (;;){> _BIS_SR(LPM3_bits); /* Sleep */> }> }>
Danke für das schöne Beispiel.
Eine klitze kleine Optimierung sehe ich noch: Die for Schleife ist bei
Low Power nicht nötig. Nach Ende einer ISR wird der Status inkl. Power
Mode vom Stack gepoppt. In main() wird nach Low Power kein Bfehl mehr
ausgeführt.
Popper schrieb:> Eine klitze kleine Optimierung sehe ich noch: Die for Schleife ist bei> Low Power nicht nötig. Nach Ende einer ISR wird der Status inkl. Power> Mode vom Stack gepoppt. In main() wird nach Low Power kein Bfehl mehr> ausgeführt.
Danke für den Hinweis, das ist in dem Codeausschnitt wirklich unnötig.
In meinen ISR steht aber folgendes ...
1
_BIC_SR_IRQ(LPM3_bits);
... damit der MSP nach der ISR wach bleibt. Natürlich steht in der for
Schleife dann auch noch mehr code vor dem Schalfen gehen.
halli Hallo :)
vielen dank für eure zahlreichen beiträge.
Ja ich benutze das Launchpad - allerdings kann ich leider den watchdog
nicht beutzen (da ich nicht weiß wie ich den Uhrenquarz anschließe :P)
-> evtl könnt ihr ja kurz beschrieben wie das geht? :)
Den code von Sido funktioniert mit ein paar ergänzungen ganz gut -
leider komm ich beim zeitmessen auf ca 3 sekunden :/
und zum user-guide:
irgentwie komm ich in den abschnitt "Basic clock modul+" nicht so ganz
klar :P (Ist jedes Basic clock system control register für ein
bestimmten clock oder wie läuft das?)
freu mich auf eure antworten :)
> nicht beutzen (da ich nicht weiß wie ich den Uhrenquarz anschließe :P)> -> evtl könnt ihr ja kurz beschrieben wie das geht? :)
Auf dem Launchpad, rechts oben neben dem Prozessorsockel, sind
nebeneinander zwei kleine Pads und etwas abseits ein größeres. Da muss
der (vermutlich bereits im Launchpad enthaltene, war zumindestens bei
mir so) Uhrenquarz drauf. Die beiden Beinchen kommen auf die kleineren
Pads und das Gehäuse wird mit dem großen Verbunden
habe eine super anleitung gefunden was das löten des Quarzes angeht :)
http://justinstech.org/2010/07/msp430-launchpad-dev-kit-how-too/
-> warum muss ausgerechnet R29 eingelötet werden (das loch "gestopft" :D
)?
kann mir dennoch einer sagen wieso mein code nur unter debugging läuft?
Der Kerl schrieb:> habe eine super anleitung gefunden was das löten des Quarzes angeht :)>> http://justinstech.org/2010/07/msp430-launchpad-dev-kit-how-too/>> -> warum muss ausgerechnet R29 eingelötet werden (das loch "gestopft" :D> )?
Jap genau das muss gemacht werden, aber ich kann mich Rufus nur
anschließen, überleg dir, ob du das machst, je nachdem wie gut du Löten
kannst, weil es für Ungeübte schon etwas fummelig sein kann.
Was du mit R29 meinst versteh ich nicht??? Und in dem Tut. steht ja auch
nix davon...
> kann mir dennoch einer sagen wieso mein code nur unter debugging läuft?
Hast du nach dem Verlassen des Debuggers (Code Composer von TI? oder was
nutzt du) denn einen Power-Reset gemacht? Denn nach beenden der
Debug-Session wird der Prozessor lediglich angehalten, aber nicht
resetet. Ist zu mindestens bei mir so unter CC 5.3.0
> Was du mit R29 meinst versteh ich nicht??? Und in dem Tut. steht ja auch> nix davon...
hier ein bild von dem was ich mein mit "gestopft".
> Hast du nach dem Verlassen des Debuggers (Code Composer von TI? oder was> nutzt du) denn einen Power-Reset gemacht? Denn nach beenden der> Debug-Session wird der Prozessor lediglich angehalten, aber nicht> resetet. Ist zu mindestens bei mir so unter CC 5.3.0
ja, ich benutze zur Zeit CCS 5.3
Wie mache ich denn einen power-reset?
Gibt es eine Möglichkeit auch das flashen ohne debuggen durchzuführen
damit ich ihn direkt real testen kann?
Nein das ist ok so. Das sind eig. bloß extra Kontakte wenn man einen
Quarz mit einem anderen Rastermaß benutzt. Schaut ganz brauchbar aus auf
dem Bild ;-)
Nach dem Ende der Debugg-Session einfach mal denn VCC-Jumper abziehen
und wieder stecken, oder das USB-Kabel kurz abstöpseln. Da der Debugger
dann nicht initialisiert wird, sollte er ganz normal aus dem Flash
starten.
Ob man ohne Debugger direkt programmieren kann? Bestimmt, aber ich weiß
leider nicht wie...
Aber das ist ja kein ernsthaftes Problem. Du programmierst ihn über den
Debugger, beendest die Session, machst einen Power-Reset und dann läuft
ja alles wie gewünscht.
Vorausgesetzt die Software spielt dann auch mit :D
ok - dann werd ich wohl die löcher erstmal leer lassen und schauen obs
geht bevor ich was zuviel löte was ich im moment nicht brauche ^^
also ich hab schon mehrfach versucht das usb-kabel an und auszustecken -
es funktioniert nur das einschlaten der led1 -> ob timerA0 läuft kann
ich nicht sagen, da led2 sich nicht toggelt.
wenn ich es im debugger laufen lasse (mit breakpoints in ISR von
TimerA0) klappt alles wunderbar.
Die Frage:
"Gibt es eine Möglichkeit auch das flashen ohne debuggen
durchzuführen damit ich ihn direkt real testen kann? "
Die Antwort:
Mit der "FET-Pro430 Lite Software ( FREE )"
http://www.elprotronic.com/download.html
kannst ohne den lästigen CCS-Debugger den Käfer im Launchpad flashen.
Vielleicht muss man dafür zuvor ein Intel-hex-file im CCS generieren.
Für Kommandozeilenfreaks gibt es noch den
http://processors.wiki.ti.com/index.php/MSP430_Flasher_-_Command_Line_Programmer
Ok, ich hab mir gerade erst jetzt den Code auch mal genauer anssehen
können da ich zuvor noch auf Arbeit war.
Schau dir deine Timer Init nochmal an
Dein Code:
> TACTL = TASSEL_1 + MC_0 + TAIE; // TIMERA0 ACLK + STOP + Interrupt
Datenblattausschnitt:
> MCx Bits 5-4 Mode control.> Setting MCx = 00h when Timer_A is not in use conserves power.>> 00 Stop mode: the timer is halted.> 01 Up mode: the timer counts up to TACCR0.> 10 Continuous mode: the timer counts up to 0FFFFh.> 11 Up/down mode: the timer counts up to TACCR0 then down to 0000h
(Lösung: dein Timer steht)
Hups, da ist der Logib wohl verschwunden ^
|
Das war ich
PS. mir ist dann aber schleierhaft wie das im Debugger geht...
Oh ich habs gerade erst gesehen, du aktivierst ihn ja über den
Tastendruck...
Nichts für ungut, hatte ich übersehen rotwerd.
Unabhängig von Deinem eigentlichem Problem, solltest Du dir die
Codebeispiele von TI anschauen. Sehr schön ist auch das Grace-Plugin:
Damit kannst Du über eine GUI die Peripherals konfigurieren. Weiterhin
gibt es noch ein Launchpad Workbook. Gibt es beim Launchpad Wiki.
Hallo Leute,
ich hab das Problem behoben :)
zum flashen:
bei ccs v5.3 wird sobald man debuggt die software geflasht - das heißt
sobald man den stecker kurz zieht und wieder einsteckt sollte euer
programm ohne probleme direkt starten
zum vlo:
yes! damit läuft alles perfekt!
zum timer:
1
TACCR0+=32768;
das ist totaler quatsch (es kommt irgentwann zu nem überlauf ?!) - TAR
sollte einfach auf 0 gesetzt werden sobald es den wert in taccr0
erreicht
zum problem das es im debugger lief und nicht im realen:
ich hatte das basic-clock-modul falsch konfiguriert
1
BCSCTL1&=~XTS;// Low-frequency mode
2
BCSCTL3|=LFXT1S_2;// VLOCLK
so geht alles!
vielen dank an die helfer! ;)
CLOSED
Der Kerl schrieb:> das ist totaler quatsch (es kommt irgentwann zu nem überlauf ?!) - TAR> sollte einfach auf 0 gesetzt werden sobald es den wert in taccr0> erreicht
Naja, wirf doch einmal einen Blick in den family user guide. Der Timer
kann in verschiedenen Modi betrieben werden. Da ist bestimmt auch für
dich etwas dabei. ;-)
Eine eigene Frage?
Dieser Thread ist über 13 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.