Forum: Mikrocontroller und Digitale Elektronik LED blinken lassen


von Marcela N. (mnikoli)


Lesenswert?

Hallo zusammen,

kann mir jemand mitteilen, wie ich eine LED eines dsPIC33 blinken lassen 
kann? auf welchen PIN muss ich da zugreifen? Habe CON3, CON5 und CON6. 
Weiß aber nicht welchen PIN ich von welchem Connector nutzen soll um das 
Blinken der LED zu realisieren.

Danke euch

von Paul2 (Gast)


Lesenswert?

dsPIC33
Das ist doch eine Prozessor-Familie, nichtmal ein konkretes Bauteil.
Und schon gar keine fertige Platine oder Schaltung, wo eine Leuchtdiode 
drauf ist.
Meines Wissens gibt es keinen uC mit integrierter LED --- das wäre evtl. 
eine Marktlücke.

von Meine Kristallkugel sagt . . . (Gast)


Lesenswert?

Das geht ganz einfach:
mit DEM Compiler und DER LIB: blink_led();

von Marcela N. (mnikoli)


Lesenswert?

ALso ich nutze das EVIDENCE - FLEX003 - KIT, DSPIC FLEX FULL FEATURE 
BOARD.

Da drauf sind LEDS und ein Microcontroller von Microchip 
dsPIC33FJ256MC710.
Ich möchte jetzt über diesen MC eine LED (von insgesamt 6) blinken 
lassen. Weiß leider nicht wie ich da vorgehen soll.

Das Board hat ganz viele PINS wie man direkt auf den MC zugreifen kann, 
jedoch weiß ich nicht wie ich damit das LED blinken lasse. Ist meine 
erste Erfahrung mit MC´s.. Ich hoffe, dass es jetzt verständlicher ist. 
Sorry..

Ich nutze den MPLAB C Compiler von Microchip.

Gruß Marcela

von Silvan K. (silvan) Benutzerseite


Lesenswert?

http://www.evidence.eu.com/download/flex_data_sheets/datasheet_FLEX003_%28v1_03.07.2008%29.pdf

Wenn das Dokument richtig deute sind 6 LEDs auf dem Board, die nicht 
dazu gedacht sind von dir angesteuert zu werden.

Du müsstest also an einen von den vielen Pins eine eigene LED 
anschließen. In deinem Programm dann den Pin als Ausgang definieren und 
auf Logisch 1 oder 0 setzen um die LED ein bzw. auszuschalten (je 
nachdem, wo du das andere Beinchen der LED angschlossen hast).

von Marcela N. (mnikoli)


Lesenswert?

Hi Silvan,

danke für den Beitrag. Woher weißt du, dass ich keine der 6 LED´s 
ansteuern kann. Ich dachte die DL4 (gelbe Diode) ansteuern zu können.

Gruß Marcela

von Grübler (Gast)


Lesenswert?

Marcela Nikoli schrieb:
> Ich dachte die DL4 (gelbe Diode) ansteuern zu können.

Das vermute ich auch. Ein Schaltplan wäre schon nützlich.

von Marcela N. (mnikoli)


Lesenswert?

Ok, wenn ich richtig versstanden habe, kann man die LED mit RB14 
ansteuern.

Ist dann folgender CODE richtig?
1
 #include <p33Fxxxx.h>
2
#include <stdio.h>
3
4
#define LEDSYS PORTBbits.RB14
5
6
int main(void)
7
{
8
  TRISBbits.TRISB14 = 0;
9
10
  while(1)
11
  {
12
    char i=0;
13
14
    // toggle LED
15
     if (LEDSYS == 1)
16
     {
17
         LEDSYS=0;
18
     }
19
     else
20
     {
21
         LEDSYS=1;
22
     }
23
    
24
    // delay
25
    for(i=0;i<255;i++)
26
    {
27
    }
28
  }
29
}

von Marcela N. (mnikoli)


Angehängte Dateien:

Lesenswert?

Hier de Schaltplan, leider nur als pdf erhältlich. weiß nicht wie ich 
daraus gif mache...

Gruß Marcela

von Karl H. (kbuchegg)


Lesenswert?

Das ist kein Schaltplan.
Das ist der Belegungsplan der Steckverbinder.

Daraus kann man aber nichts ableiten, wo an der CPU nun was 
angeschlossen ist. Für deine Aufgabenstellung brauchst du detailiertere 
Pläne, die die Schaltung auf der Platine zeigen.

Hast du denn keine Demoprogramme zum Board?
Da wird doch meistens jede noch so klitzekleine Kleinigkeit in einem 
Programm in Aktion gezeigt.

von Tüll (Gast)


Lesenswert?

Marcela Nikoli schrieb:
> for(i=0;i<255;i++)

Schnell auf 255 zählen dauert jetzt nicht sooooo lange. Da wirst du kein 
blinken sehen.

von Marcela N. (mnikoli)


Lesenswert?

Oh sorry, habe die falsche pdf hochgeladen...
Port B Pin 14 ist das richtige zur LED
Hat auch kurz geblinkt. jetzt net mehr.. hmm, warum???
Habe nichts geändert...

habe die schleife erweitert. mein code sieht jetzt so aus:
1
 
2
//Setze Den Pin als Ausgangspin
3
  TRISBbits.TRISB14 = 0;
4
5
  // Setze PortB.Pin14 auf 1 (5V)
6
  PORTBbits.RB14  = 0;
7
oscConfig();
8
9
  //Schleife
10
  while(1)
11
  {
12
  int i=0;
13
        int j = 0;
14
15
    // toggle LED
16
     if (LEDSYS == 1)
17
     {
18
         LEDSYS=0;
19
     }
20
     else
21
     {
22
         LEDSYS=1;
23
     }
24
    
25
    // delay
26
    for ( i=0; i<5000; i++)
27
    { j=0;
28
      for ( j=0; j<100; j++)
29
      {
30
      }
31
    } 
32
  }

hat auch funktioniert. doch  jetzt  geht es wieder mal nicht...

hat jemand ne andere lösung anstatt der doppelten for schleife???

Gruß

von Marcela N. (mnikoli)


Lesenswert?

danke, hab es selbst herausgefunden.

ein LED blinkt. Die Warteschleifen waren zu lang, wodurch es lange 
gedauert hat, bis die schleifen durch waren. i=5 und j=3 gewählt.
Außerdem liest man mit LATBbits.LATB14 ein.

hier der richtige code...
1
//Setze Den Pin als Ausgangspin
2
  TRISBbits.TRISB14 = 0;
3
4
  // Setze PortB.Pin14 auf 1 (5V)
5
  PORTBbits.RB14  = 0;
6
oscConfig();
7
8
  //Schleife
9
  while(1)
10
  {
11
  int i=0;
12
        int j = 0;
13
14
    // toggle LED
15
     if (LATBbits.LATB14 == 1)
16
     {
17
         LATBbits.LATB14 =0;
18
     }
19
     else
20
     {
21
         LATBbits.LATB14 =1;
22
     }
23
    
24
    // delay
25
    for ( i=0; i<5000; i++)
26
    { j=0;
27
      for ( j=0; j<100; j++)
28
      {
29
      }
30
    } 
31
  }




gruß

von ()(()))()((() (Gast)


Lesenswert?

Marcela Nikoli schrieb:
> i=5 und j=3 gewählt.
Huh? Was meinst du?

Deine Schleifen sind ein aussichtsreicher Kandidat für den Optimizer der 
zum Compiler gehört (bzw. da eingebaut ist, frag mich nicht)...

von Karl H. (kbuchegg)


Lesenswert?

Marcela Nikoli schrieb:

> ein LED blinkt. Die Warteschleifen waren zu lang, wodurch es lange
> gedauert hat, bis die schleifen durch waren.

Warts ab, bis du deinem Compiler das Optimieren erlaubst. Dann sind die 
Schleifen plötzlich kurz. Sehr kurz. Laufzeit 0 um genau zu sein.

von Michael S. (rbs_phoenix)


Lesenswert?

Das ist der richtige Zeitpunkt, sich mal mit Timern zu beschäftigen ;)

Und das j=0; hättest du dir denke ich sparen können, steht ja schon in 
der 2. For-Schleife.

Und eine theoretische Frage an alle. Würde ein guter optimierer das auch 
entfernen, wenn in der inneren for-schleife ein NOP ist?

von Karl H. (kbuchegg)


Lesenswert?

Kommt zwar auf den Optimizer an aber im Allgemeinen sind Optimizer 
ziemlich gut darin, solche Dinge zu eliminieren. Man müsste ihm den NOP 
so markieren, dass der Optimizer nichts damit anstellen darf.

von Marcela N. (mnikoli)


Lesenswert?

habe die schleifen entfernt und eine delay(); funktion von microchip 
genutzt.

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.