Forum: Mikrocontroller und Digitale Elektronik PIC Tastendruck -> LED leuchtet 5Sekunden?


von Alex (Gast)


Lesenswert?

Hallo zusammen,
bin Neuling in der PIC-Programmierung, umd zunächst mal gerne einen
Beispiel-Code in C für den PIC18F458, dabei möchte ich einmal einen
Taster drücken und dann soll für 5 Sekunden eine LED leuchten.
Was steht dann alles ab:

#include "18f458.h"
...

Danke für Eure Hilfe.

von luxx (Gast)


Lesenswert?

lol,
da erwartet wieder einer nen kompletten quelltext.
hallo, die leute zeigen bei
<<dabei möchte ich einmal einen
Taster drücken und dann soll für 5 Sekunden eine LED leuchten.
Was steht dann alles ab:
#include "18f458.h" >> absolut kein interresse.

Das macht hier (fast) keiner(bei so etwas). Informier dich in
tutorialen und so und bastel dir selbst was zam.

viel glück!

luxx

von Karl heinz B. (kbucheg)


Lesenswert?

> Beispiel-Code in C für den PIC18F458, dabei möchte ich einmal einen
> Taster drücken und dann soll für 5 Sekunden eine LED leuchten.

Das ist offensichtlich noch zu schwierig.
Versuchs mal damit:
  * Per Programm eine LED einschalten
    nur einschalten, nicht mehr!
    Wenn der µC mit der Programmabarbeitung anfängt
    soll die LED leuchten. Auch mal den Gegentest machen:
    Die LED soll nicht leuchten.

  * Einen Taster einlesen und wenn er gedrückt ist, soll
    eine LED leuchten. Das ganze soll dynamisch passieren:
    d.h. wenn du die Taste wieder loslaesst soll auch die
    LED wieder ausgehen, bei erneutem Drücken->LED wieder
    ein.

  * dann beschäftigst du dich mal damit, wie man eine
    Verzögerung hinkriegt.

  * Dann kombinierst du alles was du in Schritten 1 bis 3
    gelernt hast.

von Alex (Gast)


Lesenswert?

So danke für die Tipps und ich bitte um NAchsicht, dass ich mit den hier
gängigen Umgangsformen noch nicht vertraut bin. Also ich habe mir
folgendes von bekannten Foren und Seiten zusammen gebastelt, aber es
klappt noch nicht so wie es sollte. Ich nutze im übrigen MPLAP7.4 mit
C18 3.02 und das MPLAP ICD2 Evaluation Kit, da werden mir übrgens keine
Errors angezeigt. Ist das eigentlich korrekt einfach unter
"Programmer" auf "Program" zu gehen um den Pic zu programmieren
oder muss man den zwischendurch immer wieder löschen? Wenn ja, wie?
Nun zum Quelltext, wäre nett wenn Ihr mich berichtigen könntet.

/** I N C L U D E S
**********************************************************/
#include <p18f458.h>
#include "delays.h"                      // für die Warteschleife

/** Configuration
********************************************************/
#pragma config OSC = HS   //CPU=20 MHz
#pragma config PWRT = ON
#pragma config BOR = OFF
#pragma config WDT = OFF  //Watchdog Timer
#pragma config LVP = OFF  //Low Voltage ICSP


/** D E C L A R A T I O N S
**************************************************/
#pragma code
void main(void)
{
  LATB = 0x00;
  TRISB = 0xFE;

start:
if (PORTAbits.RA4 = 1)
goto marke;
else
goto start;

marke:
  while(1)
  {
    PORTBbits.RB2 = 1;
    Delay10KTCYx(10000);
    PORTBbits.RB2 = 0;
    Delay10KTCYx(10000);
  goto start;
  }//end while

}//end main

von Karl H. (kbuchegg)


Lesenswert?

> folgendes von bekannten Foren und Seiten zusammen gebastelt,

genau so siehts auch aus :-)

Im Ernst: Ich rate dir dringendst in der nächsten Buchhandlung
ein Buch über 'C' zu kaufen. Die gibts sehr oft auch mit
beigelegter CD, auf der eine Entwicklungsumgebung mit drauf
ist, die im Buch auch besprochen wird. Mach deine ersten
Gehversuche in C auf einem PC. Die Fehlersuche dort ist
wesentlich einfacher und angenehmer als mit einem µC.
Und Fehlersuchen wirst du das nächste halbe Jahr noch zur
Genüge.

Foren und Online-Tutorials sind entgegen landläufiger
Meinung kein guter Weg um programmieren an sich zu lernen.
Wenn man erst mal eine Sprache kann und die Hürden der
Programmierung genommen hat, dann ja. Dann sind sie ein relativ
guter Weg um den Umstieg von einer Sprache in eine andere zu
nehmen. Aber von der Pieke auf? Ich kenn zumindest kein
Tutorial das das könnte. Es hat schon seinen Grund warum
Online-Tutorials selten mehr als 20 Seiten umfassen, jedes
nachgeworfene Buch aber mindestens 150 Seiten hat.

Zum Programm.
Gleich vorweg: Ich kenne weder den PIC noch den konkreten
Compiler. Ich kann dir also nicht sagen ob die Register die
du benutzt korrekt sind oder nicht, oder ob es da Besonderheiten
gibt.
Aber:
Ein Vergleich wird in C mit ein == geschrieben. Ein einfaches
= hingegenist eine Zuweisung.
> if (PORTAbits.RA4 = 1)
Ist daher eine Zuweisung und nicht die Abfrage ob das Bit 4 im
Register PORAbits gesetzt ist oder nicht. Dazu müsste es heissen:

  if (PORTAbits.RA4 == 1)

und damit gleich zum Stil. Am besten vergisst du gleich mal
wieder, dass du von goto und Labels je etwas gehört oder
gelesen hast. So programmiert man nicht. goto hat zwar seine
Einsatzbereiche, bis du die aber erreichst ist mindestens ein
dreiviertel Jahr vergangen.

Was willst du tun?
du möchtest, dass das Programm solange wartet, bis RA4 in
PORTAbits endlich 1 geworden ist. Mit anderen Worten:
Solange wie PORTAbits.RA4 den Wert 0 hat, soll geschehen: nichts.

'Solange, wie'. Das ist ein deutlicher Hinweis für eine Schleife.
Konkret eine while-Schleife. Den 'while' bedeutet ja (unter
anderem) im englischen: solange, wie

  while( PORTAbits.RA4 == 0 )
    ;

  while( 1 ) {
    ...

er Sprung aus der zweiten while Schleife heraus nach 'start'
ist ein absolutes no-no. Sowas macht man nicht. Das ist der
erste Schritt zur zu Recht verpönten Sphagetti-Programmierung.
Im Endeffekt steht man dann mit einem Programm da, dass nur noch
wie wild hin und herspringt und keiner kann nachvollziehen
(auch du nicht mehr), wann, warum und weshalb jetzt zu diesem
oder jenem Label gesprungen wird.

So wie oben: Formuliere erst mal deinen Loesungsansatz
vernünftig aus. Ohne dabei das Wort: 'gehe zu' zu benutzen.
Mit while-Schleifen, for-Schleifen ist das alles kein Problem.

Und besorg dir ein Buch.

von kgb (Gast)


Lesenswert?

arroganz ist die umgangsform in diesem forum sonst nichts

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.