Forum: Mikrocontroller und Digitale Elektronik LED mit Interrupt umschalten


von Navid M. (Firma: mori) (navidmo198)


Lesenswert?

Hallo
ich möchte eine LED mit Interrupt umschalten. Aber das geht nicht.
STM32F091RC nucleo board.
push button= PA10
LED= PB0,PB1,PB2,PB3
1
int main(int argc, char* argv[])
2
{
3
4
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA , ENABLE);
5
        GPIO_InitTypeDef GPIO_Push_button;
6
        GPIO_Push_button.GPIO_Pin = GPIO_Pin_10;
7
        GPIO_Push_button.GPIO_Mode = GPIO_Mode_IN;
8
        GPIO_Push_button.GPIO_OType = GPIO_OType_PP;
9
        GPIO_Push_button.GPIO_Speed = GPIO_Speed_2MHz;
10
        GPIO_Push_button.GPIO_PuPd = GPIO_PuPd_DOWN;
11
        GPIO_Init(GPIOA, &GPIO_Push_button);
12
13
        RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOB, ENABLE);
14
            GPIO_InitTypeDef GPIO_LED;
15
            GPIO_LED.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 ;
16
            GPIO_LED.GPIO_Mode = GPIO_Mode_OUT;
17
            GPIO_LED.GPIO_OType = GPIO_OType_PP;
18
            GPIO_LED.GPIO_Speed = GPIO_Speed_2MHz;
19
            GPIO_LED.GPIO_PuPd = GPIO_PuPd_NOPULL;
20
                  GPIO_Init(GPIOB, &GPIO_LED);
21
22
23
            RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
24
              SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource10);
25
            //interrupt_definieren
26
              EXTI_InitTypeDef External_Interrupt;
27
              External_Interrupt.EXTI_Line= EXTI_Line10;
28
              External_Interrupt.EXTI_Mode= EXTI_Mode_Interrupt;
29
              External_Interrupt.EXTI_Trigger= EXTI_Trigger_Rising;
30
              External_Interrupt.EXTI_LineCmd= ENABLE;
31
              EXTI_Init(&External_Interrupt);
32
            //NVIC definieren
33
              NVIC_InitTypeDef Interrupt_Controller;
34
              Interrupt_Controller.NVIC_IRQChannel= EXTI4_15_IRQn;
35
              Interrupt_Controller.NVIC_IRQChannelPriority=0x00;
36
              Interrupt_Controller.NVIC_IRQChannelCmd= ENABLE;
37
                NVIC_Init(&Interrupt_Controller);
38
39
  if(EXTI_GetITStatus(EXTI_Line10) != RESET){
40
41
    if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_10)){
42
        GPIO_SetBits(GPIOB, GPIO_Pin_0 | GPIO_Pin_1| GPIO_Pin_2 | GPIO_Pin_3 );}
43
44
    else
45
      GPIO_ResetBits(GPIOB, GPIO_Pin_0 | GPIO_Pin_1| GPIO_Pin_2 | GPIO_Pin_3 );
46
      EXTI_ClearITPendingBit(EXTI_Line10);}
47
48
  while (1)
49
  {
50
51
52
  // Infinite loop, never return.
53
}
54
}
55
#pragma GCC diagnostic pop
Ich wäre sehr dankbar wenn jemand mir helfen könnten

: Bearbeitet durch User
von Jörg R. (solar77)


Lesenswert?

Navid M. schrieb:
> ich möchte eine LED mit Interrupt umschalten. Aber das geht nicht.

Vielleicht ist die LED verpolt?

von Stefan F. (Gast)


Lesenswert?

Formatiere das mal so, dass man es auch lesen kann. Wo ist deine ISR? 
Und um welchen Mikrocontroller geht es überhaupt? An welchen Pin ist die 
LED wie angeschlossen? An welchen Pin ist dein Taster wie angeschlossen? 
Zeige mal einen Schaltplan und Foto vom Aufbau.

von Navid M. (Firma: mori) (navidmo198)


Lesenswert?

Ich mache es auf dem Nucleo Stm32f09 Board.LED ist Ok.

von Stefan F. (Gast)


Lesenswert?

Beantworte die Fragen bitte vollständig. Es gibt keinen STM32F09, da 
fehlen Ziffern und Buchstaben.

von Navid M. (Firma: mori) (navidmo198)


Lesenswert?

Entschuldigung.
STM32F091RC

von Stefan F. (Gast)


Lesenswert?

Beantworte die Fragen bitte vollständig.

von Navid M. (Firma: mori) (navidmo198)


Lesenswert?

Was meinen Sie,Wo ist ISR? Das ist mein 2.Projekt mit Stm32 und ich bin 
nicht Profi.

von Stefan F. (Gast)


Lesenswert?

Gegenfrage: Was wollen Sie mit einem Interrupt ohne ISR anstellen? Was 
ist mit den anderen Fragen?

Ich kann hier nur empfehlen, erst einmal die Grundlagen ohne diese HAL 
Bibliothek zu lernen. ISR kann man notfalls googeln.

Für den Anfang ist zum Beispiel diese Anleitung gut: 
http://www.pomad.fr/node/2

Wenn das zu kompliziert ist, vielleicht besser mit einem AVR 
Mikrocontroller anfangen. Da kommt man schneller rein. 
http://stefanfrings.de/mikrocontroller_buch/index.html

von Peter D. (peda)


Lesenswert?

In der IDE zu Deinem MC sollte es doch bestimmt ein Beispielverzeichnis 
geben, wo man leicht das korrekte Aufsetzen eines Interrupthandlers 
entnehmen kann.

Abgesehen davon kann man sich auch fragen, warum professionelle 
Tastenabfragen absichtlich den externen Interrupt nicht benutzen 
(Stichwort Entprellen).

Läuft auf Deinem MC ein OS, weil Du dem Main Argumente übergibst?

von Wolfgang (Gast)


Lesenswert?

Navid M. schrieb:
> ich möchte eine LED mit Interrupt umschalten. Aber das geht nicht.
Natürlich geht das. Du machst nur irgendetwas falsch, wobei der 
Interrupt genau genommen selber nicht irgendetwas umschalten kann. Aber 
in der Routine, die nach Auftreten des Interrupts ausgeführt wird, lässt 
sich der erforderliche Programmteil gut unterbringen.

von Teo D. (teoderix)


Lesenswert?

Stefan ⛄ F. schrieb:
> Gegenfrage: Was wollen Sie mit einem Interrupt ohne ISR anstellen?

Da denk lieber..... Wie viel Haar, wollen wir spalten?! ;)

von Stefan F. (Gast)


Lesenswert?

Teo D. schrieb:
> Da denk lieber..... Wie viel Haar, wollen wir spalten?! ;)

Dann sei du doch bitte so nett und erkläre dem TO, wie er seine LED mit 
Interrupt aber ohne ISR ansteuern kann. Ich fühle mich dazu nicht 
imstande.

Die Frage sollte ein deutlicher Hinweis sein, dass er da etwas wichtiges 
vergessen hat. Wenn er nicht weiss, dass er die ISR vergessen hat, weiss 
er nicht, was ein Interrupt ist. Und solange er das nicht weiss, sollte 
er noch nicht anfangen, entsprechende Quelltexte zu schreiben oder zu 
kopieren.

von Einer K. (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Wenn er nicht weiss, dass er die ISR vergessen hat, weiss
> er nicht, was ein Interrupt ist. Und solange er das nicht weiss, sollte
> er noch nicht anfangen, entsprechende Quelltexte zu schreiben oder zu
> kopieren.

Kinder fangen das Fahrradfahren an, ohne dessen Fahrphysik 
verstanden/studiert zu haben.

Du möchtest sagen, dass alle Kinder falsch handeln.

Oder andersrum:
Wenn man immer nur das tun würde, was man schon kann und weiß, dann 
würde es keine Entwicklung geben.


Liebster stefanus ist das dein Ziel, des runter machens?
Andere in der Entwicklung bremsen?

Du siehst, ich bin immer noch auf der Suche nach deinen Motiven!

von Stefan F. (Gast)


Lesenswert?

Arduino Fanboy D. schrieb:
> Liebster stefanus ist das dein Ziel, des runter machens?

Nein, das war nicht beabsichtigt. Ich wollte nur auf den Fehler 
hinweisen ohne fiesen Hintergedanken.

von MaWin (Gast)


Lesenswert?

Navid M. schrieb:
> ich möchte eine LED mit Interrupt umschalten. Aber das geht nicht.

Doch, das geht schon, aber man muss es richtig machen.

1. Ein Taster ist als Interrupt-Quelle ungeeignet. Bei jedem Tastendruck 
sendet der 3 oder 4 (oder 10) Interrupts, weil er prellt. Daß Taster 
nicht per (flankengetriggertem) Interrupt ausgewertet werden dürfen, 
weiss jedes Kind.

2. Wenn ein Interrupt auf PinChange ausgelöst wird (durch irgendien 
andere Quelle als deinen Taster, z.B. einen NE555 als Taktgeber oder 
Entprellschaltung), dann muss auch irgendein damit verknüpfter Code 
irgendetwas tun. Dieser Code heisst Interrupt (Service) Routine. Die 
fehlt bei dir komplett.

Also: Grundlagen lernen.

von Stefan F. (Gast)


Lesenswert?

MaWin schrieb:
> Daß Taster
> nicht per (flankengetriggertem) Interrupt ausgewertet werden dürfen,
> weiss jedes Kind...

Ich ergänze: weiss jedes Kind, dass auf mikrocontroller.net aufmerksam 
mit liest.

Für erste Versuche mit Interrupts finde ich die Iddee aber gar nicht so 
falsch, diese zunächst manuell auszulösen. Wenn er die LED in der ISR 
toggelt, wird er das Problem des Prellens auch direkt bemerken und sich 
dann damit weiter befassen (hoffentlich).

von Einer K. (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> ohne fiesen Hintergedanken.


Ja, dass du da nicht bewusst drüber nachdenkst, ist mir schon klar!
Das ist offensichtlich ein lang trainierter und unreflektiert 
ablaufender Automatismus. (denn sonst würdest du ja nicht dauernd das 
Gegenteil behaupten, wenn man dich drauf anspricht)


Dennoch scheint das irgendeins deiner Bedürfnisse zu befriedigen.
Aber ich finde das noch heraus, worum es sich dreht!
Da mache dir nur keine übertriebenen Hoffnungen.

von Stefan F. (Gast)


Lesenswert?

Arduino Fanboy D. schrieb:
> Dennoch scheint das irgendeins deiner Bedürfnisse zu befriedigen.

Oder die Unfähigkeit, angemessen zu kommunizieren. Rate mal, warum ich 
Programmierer geworden sein könnte und nicht z.B. Verkäufer.

von Peter D. (peda)


Lesenswert?

Arduino Fanboy D. schrieb:
> Kinder fangen das Fahrradfahren an, ohne dessen Fahrphysik
> verstanden/studiert zu haben.

Sie fangen aber damit an, indem sie schauen, wie andere es machen.
D.h. nicht mit Lenker hinten oder Räder oben.

von Peter D. (peda)


Lesenswert?

Ob und was an dem Code nicht wie gewünscht funktioniert, kann ich 
natürlich nicht einschätzen, da ich weder Chip noch Toolchain kenne.
Es ist allerdings schon sehr beeindruckend, welche riesen Menge Zeugs 
dafür initialisiert werden muß.
Falls irgendeine Vorlage verwendet wurde, wäre es sinnvoll, diese zu 
verlinken. Vielleicht stehen da irgendwelche Erläuterungen.

Ich würde erstmal ohne Interrupt versuchen, eine LED zum Leuchten zu 
bringen.
Also Taste ein-> LED ein, Taste aus -> LED aus.

von Einer K. (Gast)


Lesenswert?

Peter D. schrieb:
> Arduino Fanboy D. schrieb:
>> Kinder fangen das Fahrradfahren an, ohne dessen Fahrphysik
>> verstanden/studiert zu haben.
>
> Sie fangen aber damit an, indem sie schauen, wie andere es machen.
> D.h. nicht mit Lenker hinten oder Räder oben.

Ich weiß es noch wie Gestern!
Dein erstes Spielzeug Fahrrad hast du unter lautem "Da! Da! Da!" 
Geschrei, immer wieder auf den Boden geknallt, bis es in Fetzen gegangen 
ist.
Wie Gestern!

von Fahrrad (Gast)


Lesenswert?

Wie bist denn Du drauf?

von Einer K. (Gast)


Lesenswert?

Fahrrad schrieb:
> Wie bist denn Du drauf?

Keine 3 Tage hats bei dem peda gehalten, dann wars kaputt, das Fahrrad.

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.