hallo zusammen, ich bin neu auf dem gebiet "c" und habe ein kleines erstes programm geschrieben! wie auch sonst funzt das nicht richtig! ich kann ausgänge setzten aber iwie kann ich das PIN-register nicht auslesen oder hab es falsch konfiguriert! ich arbeite mit avrstudio und avr-gcc!...makefile hab ich nicht selber erstellet, sondern nur bei avrstudio die konfiguarion der "cpu und takt vorgenommen" liegt hier der fehler !? code: #include <avr/io.h> int main(void) { DDRC |= (1<<DDC2) | (1<<DDC3) |(1<<DDC4) |(1<<DDC5); DDRB &= ~(1<<DDB0); if (PINB &(1<<PINB0)) { PORTC |= (1<<PC2); } else { PORTC &= ~(1<<PC2); } } ich hoffe ihr könnt mir helfen :) Dankeschön :)
Dein Programm ist GANZ schnell zuende wenn es keine mainloop gibt:
1 | #include <avr/io.h> |
2 | |
3 | int main(void) |
4 | {
|
5 | DDRC |= (1<<DDC2) | (1<<DDC3) |(1<<DDC4) |(1<<DDC5); |
6 | DDRB &= ~(1<<DDB0); |
7 | |
8 | while(1) // do forever |
9 | {
|
10 | if (PINB &(1<<PINB0)) |
11 | {
|
12 | PORTC |= (1<<PC2); |
13 | }
|
14 | else
|
15 | {
|
16 | PORTC &= ~(1<<PC2); |
17 | }
|
18 | }
|
19 | }
|
Ohne genau zu wissen was du erreichen willst, versuchs mal mit ner Endlosschleife in der du die Abfrage und das Setzen machst, sonst läuft es nur einmal durch. PS: Ein "return 0" am Ende ist auch nicht verkehrt. EDIT: Da war einer schneller...
hey danke für die schnellen antworten :) macht sinn ;) werd das gleich mal testen
Hallo nochmal! jetzt funktioniert alles soweit :) eine frage hätte ich aber noch... ist die vorgehensweise while(1) eine gänige lösung !? gibt es andere möglichkeiten !? MfG :)
Till Hagemann wrote: > Hallo nochmal! jetzt funktioniert alles soweit :) > eine frage hätte ich aber noch... > ist die vorgehensweise while(1) eine gänige lösung !? Ist völlig normal. Dein Programm darf nie aufhören. Was soll auch der µC sonst tun, wenn er * zwar noch Strom hat * aber kein Programm mehr dass er abarbeiten soll
Na ja, jeder Prozessor braucht einen Loop (while(1) ) Im Unterschied zu einem PC der mehrere Prozesse hat, ist ein uC auf einen einzigen Prozess beschränkt, also genau derjenige, der du geschrieben hast. Falls das Programm irgendwann zu Ende ist, weiss der Prozessor nicht mehr was er tun soll, also läuft er mal quer über den ganzen Speicher, was irgendwelche ungewünschte Aktionen oder Absturz zur Folge haben kann. (Bei einem PC kehrt der Prozessor wieder zum Betriebssystem zurück, also hat er noch andere Aufgaben die er erledigen muss) Bei deinem Programm lag das Problem an einem anderen Ort: Deine if-Abfrage wurde nur einmal durchlaufen, und zwar genau beim Aufstarten des Prozessors. Eine spätere Änderung am PINB0 hatte somit keine Auswirkungen.
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.