hey
habe anbei der Code. Damit er bei euch läuft, müsstet ihr noch eine asm
Datei von mir kriegen. Ich zerbreche mir schon seit einiger Zeit den
Kopf, wie ich die rote LED an port 1.0 zum laufen bekomme.
Initialisierung der Ports scheint mir soweit korrekt, in der ISR vom
TimerB0 setzte/ lösche ich P1OUT der LED. Wer mir helfen kann, ist
wirklich ein Schatz!
Grüße
Reduziere das Programm schrittweise, bis das Problem verschwindet.
Spätestens wenn am Ende nur noch 3 Zeilen übrig bleiben, die immer noch
nicht funktionieren, sollte der Fehler offensichtlich sein.
Stefan ⛄ F. schrieb:> Wenn am Ende nur noch 3 Zeilen übrig bleiben, die immer noch nicht> funktionieren, sollte der Fehler offensichtlich sein.
ich habe bereits die halbe Welt auf den kopf gestellt, komme trzd nicht
drauf
Commer schrieb:> ich habe bereits die halbe Welt auf den kopf gestellt, komme trzd nicht> drauf
Lass wie Welt links liegen und kümmere dich nur um den Dreizeiler, der
das Problem zeigt.
Commer schrieb:> ich habe bereits die halbe Welt auf den kopf gestellt, komme trzd nicht> drauf
Du musst das Problem einkreisen. Die Chancen stehen ziemlich schlecht,
dass hier jemand durch reine Sichtkontrolle in so vielen Zeilen Code den
fehler sieht. Zumal du auch weder den dazugehörigen Schaltplan noch eine
Beschreibung der Programmlogik beigelegt hast.
Wenn du das nicht kannst, fange anders herum an. Schreibe ein Programm,
dass einfach nur diese eine LED einschaltet. Wenn das geht, baust du
alles andere Schritt für Schritt dazu, bis der Fehler wieder kommt.
Dann weißt du, welcher Code-Abschnitt der fragwürdige ist.
Wolfgang schrieb:> ss wie Welt links liegen und kümmere dich nur um den Dreizeiler, der> das Problem zeigt.
leute, ich will nicht unhöflich sein, aber eure Sprücheklopferei hilft
mir null weiter. dann lieber kommentar sparen, spart mir zeit und nerven
Commer schrieb:> leute, ich will nicht unhöflich sein, aber eure Sprücheklopferei hilft> mir null weiter. dann lieber kommentar sparen, spart mir zeit und nerven
Dann frag hier nicht so dumm herum. Mit deinen Angaben kann kein Mensch
was anfangen. Die angegebene Fehlersuchstrategie sollte dir helfen.
Ausserdem könntest du an deinem Deutsch arbeiten: Großschreibung und so.
Commer schrieb:> leute, ich will nicht unhöflich sein, aber eure Sprücheklopferei hilft> mir null weiter. dann lieber kommentar sparen, spart mir zeit und nerven
Der Dreizeiler würde zeigen ob dein Setup und die Elektronik ok sind.
just sayin...
Bitte noch weiter vereinfachen:
ISR/TIMER-Scheisse ersmal raus!
Nur die LED einschalten und fertig.
NUR SO erfährst Du ob die LED, PORT, POLUNG
überhaupt intakt/korrekt sind.
Commer schrieb:> Wolfgang schrieb:>> ss wie Welt links liegen und kümmere dich nur um den Dreizeiler, der>> das Problem zeigt.>> leute, ich will nicht unhöflich sein, aber eure Sprücheklopferei hilft> mir null weiter. dann lieber kommentar sparen, spart mir zeit und nerven
Es wird Dir schon längere Zeit geholfen, merkst Du das nicht?
Etwas selbst denken, dann löst sich das Problem...
Commer schrieb:> leute, ich will nicht unhöflich sein, aber eure Sprücheklopferei hilft> mir null weiter
Wir haben Dir eine bewährte Methode zur Fehleranalyse empfohlen. Wenn du
sie nicht anwenden willst, steht es Dir frei, deine eigenen Methoden zu
entwickeln. Aber die müssen dann von dir kommen, nicht von uns.
Commer schrieb:> hab es auf wesentliche zusammengefasst. leuchten tut sie immernoch> nicht.
Noch weiter vereinfachen. Schalte einfach nur die LED an, ohne Timer. Es
sollte ungefähr auf drei Zeilen Code hinauslaufen, das war kein Scherz!
Pieter schrieb:> P1OUT = 0xFF ; // LED_X = EIN (weil H-aktiv)
also das würde bedeuten, dass die LED leuchtet, sobald ich mein Programm
starte. Soll sie aber nicht. ich möchte die LED zum leuchten bringen,
wenn der TimerB seine ISR aktiviert.
Commer schrieb:> Pieter schrieb:>> P1OUT = 0xFF ; // LED_X = EIN (weil H-aktiv)>> also das würde bedeuten, dass die LED leuchtet, sobald ich mein Programm> starte. Soll sie aber nicht. ich möchte die LED zum leuchten bringen,> wenn der TimerB seine ISR aktiviert.
Junge was ist denn los mit dir? Verstehst du nicht, dass du nur so das
Problem einkreisen kannst?
Ändere den Code so dass die LED immer leuchten muss. Leuchtet sie dann?
Wenn ja, funktioniert dein Interrupt nicht. Wenn nein, funktioniert dein
Aufbau nicht. Gott manche Individuen ey...
Commer schrieb:> Pieter schrieb:>> P1OUT = 0xFF ; // LED_X = EIN (weil H-aktiv)>> also das würde bedeuten, dass die LED leuchtet, sobald ich mein Programm> starte. Soll sie aber nicht. ich möchte die LED zum leuchten bringen,> wenn der TimerB seine ISR aktiviert.
Mach doch erstmal das was man dir vorgeschlagen hat und lass die LED
doch eeeeeeinfach mal leuchten!!! Ob du das später willst oder nicht ist
doch egal.
Immerhin leuchtet die LED bei dir momentan noch überhaupt nicht!
Also:
1
intmain(void)
2
{
3
WDTCTL=WDTPW+WDTHOLD;// WatchDogTimer abschalten
4
// -- INIT_Port1
5
P1SEL&=~(LED_X);// Beide sind BIN-IO
6
P1DIR|=LED_X;// LED = BIN-OUT
7
P1OUT=0xFF;// LED_X = EIN (weil H-aktiv)
8
while(1){_NOP();}
9
}
abtippen, starten... Leuchtet die LED? Ja? Dann weiter...
Leuchtet sie nicht dann stimmt etwas ganz anderes nicht! (Hardware?)
Max B. schrieb:> abtippen, starten... Leuchtet die LED? Ja? Dann weiter...> Leuchtet sie nicht dann stimmt etwas ganz anderes nicht! (Hardware?)
ja den Punkt habe ich schon abgehagt. Nächster Schritt ist für mich die
ISR
Commer schrieb:> Max B. schrieb:>> abtippen, starten... Leuchtet die LED? Ja? Dann weiter...>> Leuchtet sie nicht dann stimmt etwas ganz anderes nicht! (Hardware?)>> ja den Punkt habe ich schon abgehagt. Nächster Schritt ist für mich die> ISR
ja was denn jetzt? Leuchtet die LED mit dem Codeschnippsel?
Wieso sagst du denn nichts??
Max B. schrieb:> int main( void )> {> WDTCTL = WDTPW + WDTHOLD; // WatchDogTimer abschalten> // -- INIT_Port1> P1SEL &= ~(LED_X); // Beide sind BIN-IO> P1DIR |= LED_X; // LED = BIN-OUT> P1OUT = 0xFF ; // LED_X = EIN (weil H-aktiv)> while(1) {_NOP();}> }
hier leuchtet sie
bei den isr nicht mehr. Habe auch die zeile _BIS_SR(GIE); hinzugefügt
Commer schrieb:> wenn ich P1OUT |= LED_X; setzte, leuchtet sie. Aber das ist für mich> eher der Gegenbeweis, das die ISR nicht funktioniert
Aber dennoch ein wichtiger Hinweis, denn nun weißt du dass die Hardware
funktioniert und dass du nun herausfinden musst, warum die ISR nicht
aufgerufen wird.
Ich kenne diesem µC nicht, aber ich würde Dir vorschlagen, es mit einem
neuen Thread zu versuchen.
Titel: msp430f5529 Timer-ISR wird nicht aufgerufen
Dann zeigst du einen minimalen Code, wo der Timer gestartet wird und
beim ersten Interrupt die LED eingeschaltet wird. Schreibe noch dazu,
dass die LED problemlos an geht, wenn du das außerhalb der ISR machst.
Der neue Titel könnte hilfreich sein, die richtigen für das Thema
Experten anzulocken.
Manche µC haben nicht nur Timerinterrupts sondern auch eine Globale
Freigabe der Interrupts. Vielleicht Vergessen?
Interruptflags sollte man in der ISR auch löschen, sonst suchst Du dann
den Fehler warum die LED nicht mehr aus geht.
Der Stefan ist ein wenig selbstverliebt und arrogant. Hat halt einfach
nur ne große Fr....
Zum Timer, neben general interrupt enable, musste den timer interrupt
auch enablen. ?
Mani W. schrieb:> Bin ja absolut kein µCler, aber der TO könnte ja auch mit> einem Multimeter mal messen, vielleicht ist die Led verkehrt oder> defekt...
Nein - nur resistent gegen die Aktivierung von Interrupts.
Stefan ⛄ F. schrieb:> An alle die nicht lesen können oder wollen: Die LED hat an diesem Port> Pin bereits geleuchtet. Nur nicht mit ISR.
Genau, LED leuchtet außerhalb der ISR.
MaWin schrieb:> Zum Timer, neben general interrupt enable, musste den timer interrupt> auch enablen.
wie soll das denn aussehen?? du meinst TB0CTL = CCIE;?
Commer schrieb:> sry, falsches Register: TB0CCTL1 bzw TB0CCTL2 = CCIE;
hiermit funktioniert es tatsächlich, also die LED leuchtet auch
innerhalb der ISR. Es funktioniert aber nur die ISR für CCR0, für CCR2
nicht