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.
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
> 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.
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
> 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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.