Hey Leute, ich als blutiger Anfänger hänge jetzt schon an einer sehr einfachen Schaltung fest. Da ich auch begreifen und lernen möchte habe ich nicht einfach Beispiele kopiert sondern an denen angelehnt meinen eigenen Sourcecode geschrieben. Sinn meiner Schaltung soll sein, dass eine LED leuchtet wenn man einen Taster drückt. Lässt man den Taster los soll die LED auch ausgehen. Das einschalten der LED funktioniert auch tadellos nur aus ausschalten geht nicht immer. Es scheint so als wäre die LED beim loslassen des Tasters in keinem definiertem Zustand da sie mal an bleibt und mal ausgeht. Leuchtet die LED weiter, leuchtet sie beim nächsten Betätigen des Tasters heller. Da ich schon seit Tagen suche weiß ich auch nicht ob der Fehler im Sourcecode oder in der Schaltung liegt. #include <avr/io.h> #define F_CPU 16000000UL #include <util/delay.h> int main(void) { DDRB = 0xFF; //Register B Ausgänge DDRC = 0x00; // Register C Eingänge PORTC = 0xFF; // Register C Pullups ein while (1) { if (!(PINC & ( 1<<PC4 ))) //wenn PC4 HIGH dann... { PINB |= ( 1<<PB0 ); // LED an PB0 an } else { PINB &= ~ ( 1<<PB0 ); // ansonste LED an PB0 aus } } return 0;
:
Bearbeitet durch User
1 | int main(void) |
2 | {
|
3 | DDRB = 0xFF; // Register B Ausgänge |
4 | DDRC = 0x00; // Register C Eingänge |
5 | PORTC = 0xFF; // Register C Pullups ein |
6 | |
7 | while (1) |
8 | {
|
9 | if ((PINC & ( 1<<PC4 ))) //wenn PC4 High dann... |
10 | {
|
11 | PORTB |= ( 1<<PB0 ); // LED an PB0 an |
12 | }
|
13 | else
|
14 | {
|
15 | PINB &= ~( 1<<PB0 ); // ansonste LED an PB0 aus |
16 | }
|
17 | }
|
18 | return 0; |
19 | }
|
Ein PINB vergessen, in PORTB umzubauen.
1 | int main(void) |
2 | {
|
3 | DDRB = 0xFF; // Register B Ausgänge |
4 | DDRC = 0x00; // Register C Eingänge |
5 | PORTC = 0xFF; // Register C Pullups ein |
6 | |
7 | while (1) |
8 | {
|
9 | if (!(PINC & ( 1<<PC4 ))) //wenn PC4 Low dann... |
10 | {
|
11 | PORTB |= ( 1<<PB0 ); // LED an PB0 an |
12 | }
|
13 | else
|
14 | {
|
15 | PORTB &= ~( 1<<PB0 ); // ansonste LED an PB0 aus |
16 | }
|
17 | }
|
18 | return 0; |
19 | }
|
Vielen Dank, das umwandeln von Pin in Port brachte den gewünschten Erfolg aber warum verwendet man hier den Port-Befehl. Ich dachte wenn man einzelne Pins ansteuert oder liest ist der Befehl PIN angebracht und wenn man das Register definieren möchte (z.B. Pullups) dann nimmt man Ports?
Ein Irrtum. Dann solltest du nochmal das Datenblatt deines µC befragen. Dort steht recht exakt beschrieben, wie es zusammen hängt.
Guido L. schrieb: > Hey Leute, > ich als blutiger Anfänger hänge jetzt schon an einer sehr einfachen > Schaltung fest. Da ich auch begreifen und lernen möchte habe ich nicht > einfach Beispiele kopiert sondern an denen angelehnt meinen eigenen > Sourcecode geschrieben. Sinn meiner Schaltung soll sein, dass eine LED > leuchtet wenn man einen Taster drückt. Lässt man den Taster los soll die > LED auch ausgehen. Das einschalten der LED funktioniert auch tadellos > nur aus ausschalten geht nicht immer. Es scheint so als wäre die LED > beim loslassen des Tasters in keinem definiertem Zustand da sie mal an > bleibt und mal ausgeht. Leuchtet die LED weiter, leuchtet sie beim > nächsten Betätigen des Tasters heller. Da ich schon seit Tagen suche > weiß ich auch nicht ob der Fehler im Sourcecode oder in der Schaltung > liegt. > Hallo, Deine Schaltung hat noch einen kleinen Fehler, AREF liegt nicht an AVcc sondern, Er erhält nur einen kleinen 100nF Kondensator nach Masse natürlich.
Ah ja klar vielen Dank für den Hinweis, hat zwar in diesem Fall nicht die Funktion beeinträchtigt aber man will ja von vornherein saubere Schaltungen aufbauen sowie saubere Codes schreiben. Also vielen Dank. Bin generell sehr begeistert wie einem so blutigen Anfänger hier geholfen wird, auch wenn er so "banale" Fragen stellt.
Wenn du an den Taster Eingang auch noch einen pull up Widerstand hängst, dann "sieht" der Eingang auch einen definierten Pegel.
Jörn P. schrieb: > Wenn du an den Taster Eingang auch noch einen pull up Widerstand hängst, > dann "sieht" der Eingang auch einen definierten Pegel. Aua: Guido L. schrieb: > DDRC = 0x00; // Register C Eingänge > PORTC = 0xFF; // Register C Pullups ein Frank L. schrieb: > entprell den Taster und Alles wird gut Nö. Die Lampe soll so funktonieren als wäre der µC da gar nicht drin: Knopp gedrückt=Licht, loslassen=Dunkelheit. Da muss nichts entprellt werden.
Hallo Guido. Benutze ruhig das Atmel Studio. Dort simulierst du deinen Code und schaust im IO-Viewer nach den Ports. Da fällt dir in windeseile auf, dass sich ein Register ja gar nicht ändert. Und schon ist der Typo gefunden.
Danke für den Tipp, Atmel Studio verwende ich sogar, habe nur noch nichts simuliert, werde mich wohl auch mal da mal mit beschäftigen.
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.