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
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.
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
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).
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
Marcela Nikoli schrieb: > Ich dachte die DL4 (gelbe Diode) ansteuern zu können. Das vermute ich auch. Ein Schaltplan wäre schon nützlich.
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 | }
|
Hier de Schaltplan, leider nur als pdf erhältlich. weiß nicht wie ich daraus gif mache... Gruß Marcela
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.
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.
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ß
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ß
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)...
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.
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?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.