Hallo ! ich bin ein newbie in C-Programmierung, und möchte euch ein Paar fragen stellen, die ihr mit leichtigkeit Beantworten könnt. 1.Frage : Warum leuchtet die LED die ich am PORTD7 angeschlossen habe nicht, wenn ich den Taster an PINB0 drücke ? Quellcode: #define F_CPU 4000000UL #include <avr/io.h> int main(void) { DDRD = (1<<7); DDRB = (0<<PB0); PORTB = (1<<PB0); while(1); { if(bit_is_clear(PINB,PB0)) { PORTD = (1<<7); } else { PORTD = (0<<7); } } return(0); } 2.Frage : Im PDF des "AVR-GCC-Tutorial_-_www_mikrocontroller_net.pdf" steht auf seite 21 im Quelltext: "inline uint8_t debounce(volatile uint8_t *port, uint8_t pin) " was ist diese Funktion "inline" und was heißt "volatile" ? außerdem : typedef union { uint16_t i16; struct { uint8_t i8l; uint8_t i8h; }; } convert16to8; und was heißt "typdef union" ? und: uint8_t key_pressed(const volatile uint8_t *inputreg, uint8_t inputbit) { static uint8_t last_state = 0; was heißt "const volatile" und was heißt "static uint8_t" wenn ihr noch ( andere ) tutorials und gute links parat habt, ich Wäre dankbar, wenn ihr sie hier posten würdet. Gruß , Jakov
Jakov K. schrieb: > 1.Frage : Warum leuchtet die LED die ich am PORTD7 angeschlossen habe > nicht, wenn ich den Taster an PINB0 drücke ? Wie ist der Taster denn angeschlossen? Gruß Oliver
Weil du Konstrukte wie:
> 0<<7
verwendest? Was glaubst du was dies tut?
vom pin zu gnd ohne pullup widerstand, aber den habe ich ja aktiviert :D MFG jakov
soweit ich es verstanden habe: es "verschiebt" die null 7 mal nach "links" , d.h, an pinx7 ?! wenn du schon so fragst , dann wird es wohl falsch sein :D wie ist es denn richtig ?
Die LED ist vom Port über einen Vorwiderstand direkt zu gnd. noch was nebenbei : ich habe mit basic ( Bascom) angefangen zu Programmieren, aber die Demoversion hat mir nicht ausgereicht, deswegen steige ich auf C um. mit der schaltungstechnik müsste alles stimmen ;)
Jakov K. schrieb: > soweit ich es verstanden habe: > es "verschiebt" die null 7 mal nach "links" , d.h, an pinx7 ?! > > wenn du schon so fragst , dann wird es wohl falsch sein :D > wie ist es denn richtig ? Also, in deinem Code tut es was du willst. Aber es zeigt du hast keine Ahnung. Es rotiert die Binärzahl 00000000 um 7 stellen nach links. Also steht am Ende wieder 0000000. Ergo, kannst auch weglassen und direkt PORTD=0 schreiben. (1<<7) macht natürlich wieder sinn, aber eher (1<<PB7), dann wird sofort klar du tun willst. Grundsätzlich ist dein Programm richtig, also liegts an der Hardware.
Für die anderen Fragen schaust du besser in ein C-Büchlein rein. Aber deine LED sollte, auch wenn der Code Mist ist, trotzdem mal leuchten. Ingo
wo kriege ich denn ein solches " C-Büchlein" her ? hast du einen schönen link ? oder eine Empfehlung ?
Oder der Klassiker, hat mir auch geholfen: http://www.amazon.de/Programmieren-C-Reference-Manual-deutscher-Sprache/dp/3446154973/ref=sr_1_2?ie=UTF8&qid=1334165590&sr=8-2 Ingo
Der Fehler im ersten Quelltext ist klein, aber wirksam: Es muss
1 | while(1) |
heißen, nicht
1 | while(1); |
Letzteres heißt nämlich in Worten "solange 1 gleich 1 ist, führe folgende Anweisung aus: ';' ". Das, was nach dem Strichpunkt kommt, wird nie ausgeführt, weil der Mikrocontroller in einer Endlosschleife die leere Anweisung ; ausführt. Lässt du den Strichpunkt weg, ist die erste Anweisung nach dem while dein Teil in {}, also das, worauf sich das while eigentlich beziehen soll.
daaankeschön ! wieder was dazugelernt :D merci ! Leider habe ich momentan kein solches c-Büchlein ... gibt es pdf's wo sowas drinsteht ? oder i-welche internetseiten ? Danke im Voraus ! Jakov
Jakov K. schrieb: > i-welche internetseiten ? http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial mfg mf
gut, dankeschön, da bin ich auch schonmal draufgestoßen ;) ich meine "mal was anderes" .. naja, ich werde mich erstmal mit dem beglücken müssen :D
Jakov K. schrieb: > daaankeschön ! > wieder was dazugelernt :D > merci ! > > Leider habe ich momentan kein solches c-Büchlein ... > gibt es pdf's wo sowas drinsteht ? > oder i-welche internetseiten ? > > Danke im Voraus ! > Jakov Mein Link verweist auf ein open book von galileo. das ist komplett online zu lesen.
Wen Du GOOGLE bemühst findest Du massenhaft C / C++ Toturials oder Reference Guides...
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.