www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LED blinken lassen


Autor: Marcela Nikoli (mnikoli)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Paul2 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Meine Kristallkugel sagt . . . (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das geht ganz einfach:
mit DEM Compiler und DER LIB: blink_led();

Autor: Marcela Nikoli (mnikoli)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Silvan König (silvan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://www.evidence.eu.com/download/flex_data_shee...

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).

Autor: Marcela Nikoli (mnikoli)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Grübler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Marcela Nikoli (mnikoli)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, wenn ich richtig versstanden habe, kann man die LED mit RB14 
ansteuern.

Ist dann folgender CODE richtig?
 #include <p33Fxxxx.h>
#include <stdio.h>

#define LEDSYS PORTBbits.RB14

int main(void)
{
  TRISBbits.TRISB14 = 0;

  while(1)
  {
    char i=0;

    // toggle LED
     if (LEDSYS == 1)
     {
         LEDSYS=0;
     }
     else
     {
         LEDSYS=1;
     }
    
    // delay
    for(i=0;i<255;i++)
    {
    }
  }
} 

Autor: Marcela Nikoli (mnikoli)
Datum:
Angehängte Dateien:

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

Gruß Marcela

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Tüll (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Marcela Nikoli (mnikoli)
Datum:

Bewertung
0 lesenswert
nicht 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:
 
//Setze Den Pin als Ausgangspin
  TRISBbits.TRISB14 = 0;

  // Setze PortB.Pin14 auf 1 (5V)
  PORTBbits.RB14  = 0;
oscConfig();

  //Schleife
  while(1)
  {
  int i=0;
        int j = 0;

    // toggle LED
     if (LEDSYS == 1)
     {
         LEDSYS=0;
     }
     else
     {
         LEDSYS=1;
     }
    
    // delay
    for ( i=0; i<5000; i++)
    { j=0;
      for ( j=0; j<100; j++)
      {
      }
    } 
  }

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

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

Gruß

Autor: Marcela Nikoli (mnikoli)
Datum:

Bewertung
0 lesenswert
nicht 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...
//Setze Den Pin als Ausgangspin
  TRISBbits.TRISB14 = 0;

  // Setze PortB.Pin14 auf 1 (5V)
  PORTBbits.RB14  = 0;
oscConfig();

  //Schleife
  while(1)
  {
  int i=0;
        int j = 0;

    // toggle LED
     if (LATBbits.LATB14 == 1)
     {
         LATBbits.LATB14 =0;
     }
     else
     {
         LATBbits.LATB14 =1;
     }
    
    // delay
    for ( i=0; i<5000; i++)
    { j=0;
      for ( j=0; j<100; j++)
      {
      }
    } 
  }
 




gruß

Autor: ()(()))()((() (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)...

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael Skropski (rbs_phoenix)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Marcela Nikoli (mnikoli)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
habe die schleifen entfernt und eine delay(); funktion von microchip 
genutzt.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.