MojnMojn hab da ein Problem. Ich verstehe nicht wie ich die Internen Pull-Up´s vom Mega8 nur auf Port PD0 - PD4 aktivieren kann. Bei mir werden immer alle Bit´s von Port D high. Will die mit nem Schalter auf Masse ziehen. LG
Flitzii schrieb: > ch verstehe nicht wie ich die Internen Pull-Up´s vom Mega8 nur auf Port > PD0 - PD4 aktivieren kann. wie machst du es denn?
DDRD = 0x00; PORTD = 0xFF; Soweit ich es verstanden habe, setzt die erste Zeile Port D als Eingang und die 2. Zeile die Pull-Up´s.
Flitzii schrieb: > PORTD = 0xFF; > > Soweit ich es verstanden habe, setzt die erste Zeile Port D als Eingang > und die 2. Zeile die Pull-Up´s. und was glaubst du für was die 0xFF stehen?
Flitzii schrieb: > MojnMojn > > hab da ein Problem. > Ich verstehe nicht wie ich die Internen Pull-Up´s vom Mega8 nur auf Port > PD0 - PD4 aktivieren kann. Und ich verstehe nicht, was es da nicht zu verstehen gibt. In dem Moment, in dem du begriffen hast, wie man einzelne Bits an einem Port manipuliert (ohne die anderen zu beeinflussen), ist das doch ein Kinderspiel.
Ich denke mal für alle Bit´s von Port D. Weil es werden ja auch alle Bit´s High.
Flitzii schrieb: > DDRD = 0x00; > PORTD = 0xFF; > > Soweit ich es verstanden habe, setzt die erste Zeile Port D als Eingang > und die 2. Zeile die Pull-Up´s. Und welches Bitmuster hat 0xFF? AVR-Tutorial AVR-GCC-Tutorial
Flitzii schrieb: > Ich denke mal für alle Bit´s von Port D. > Weil es werden ja auch alle Bit´s High. Geht doch! Jetzt hast du dir deine Frage selbst beantwortet :-)
Flitzii schrieb: > Ich denke mal für alle Bit´s von Port D. > Weil es werden ja auch alle Bit´s High. richtig, und wie könnte man es nun ändern das anders Bits gesetzt sind?
Das ist ja mein Problem. Ich versteh es nicht :/ http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Interne_Pull-Up_Widerst.C3.A4nde
PORTC |= (1<<PD0); PORTC |= (1<<PD1); PORTC |= (1<<PD2); PORTC |= (1<<PD3); PORTC |= (1<<PD4); Vielleicht so?
Dezimal Hex Binär Dezimal Hex Binär ----------------------------------------------------------- 0 0 0000 8 8 1000 1 1 0001 9 9 1001 2 2 0010 10 A 1010 3 3 0011 11 B 1011 4 4 0100 12 C 1100 5 5 0101 13 D 1101 6 6 0110 14 E 1110 7 7 0111 15 F 1111 Eine Hex-Schreibweise hat den Charme, dass man einfach die Ziffern aneinander hängen kann um die 8 Bits zu erhalten. Die Hex-Zahl 3B besteht also aus den Ziffern 3 und B. 3 hat das Bitmuster 0011 und B hat das Bitmuster 1011. 3B hat daher das Bitmuster 00111011 dein 0xFF hat daher das Bitmuster 11111111. Das ist aber nicht das was du willst. Du willst das Bitmuster 00001111, weil du ja nur an den unteren 4 Bits die Pullups einschalten willst. Also brauchst du daher welche 2-stellige Hex-Zahl?
Flitzii schrieb: > Vielleicht so? ja, jetzt könnte man es noch ein einer zeile schreiben PORTC = (1<<PD0) | (1<<PD1) | (1<<PD2) | (1<<PD3) | (1<<PD4);
Flitzii schrieb: > PORTC |= (1<<PD0); > PORTC |= (1<<PD1); > PORTC |= (1<<PD2); > PORTC |= (1<<PD3); > PORTC |= (1<<PD4); > > > Vielleicht so? Ja, das ist auch gut. Das ist sogar noch besser, als wenn du die Hex-Zahzl hinschreibst. Obwohl: Den Zusammenhang zwischen der Hex-Schreibweise und den Binären Digits muss jeder µC-Programmierer beherrschen. Da führt kein Weg daran vorbei. PS: Man kann deine 4 Anweisungen auch zusammenfassen PORTC |= ( 1<<PC0) | ( 1 << PC1 ) | ( 1 << PC2 ) | ( 1 << PC3 ) ;
Aber ich will ja Bit 0-4 High schalten. Und nicht Bit 4-8. Müsste ich dann nicht F0 Als Hex Wert eingeben?
Flitzii schrieb: > Aber ich will ja Bit 0-4 High schalten. Und nicht Bit 4-8. > Müsste ich dann nicht F0 Als Hex Wert eingeben? Moment: Bei Zahlen steht das Bit 0 gaaaanz rechts. Die "Einer" sind das Bit 0! Und PS: Bit 0 bis 4, das sind 5 Bits. Zähl nach: 0, 1, 2, 3, 4 das sind 5 Stück :-)
Flitzii schrieb: > Vielen dank :) > > jetzt geht es :-) Das war allen schon klar. Viel wichtiger ist, ob du die Sache mit den Bits, der Schreibweise, dem Aufbau von Zahlensystemen (ok, da gäbs noch viel zu sagen), der Nummerierung, ... zumindest im Ansatz verstanden hast. Da liegt der Teil, über den du Nachdenken musst! Wie sind Zahlensysteme aufgebaut? Wie funktionieren eigentlich unsere gewohnten Dezimalzahlen? Was sagt mir die Zerlegung 5378 = 5 * 1000 + 3 * 100 + 7 * 10 + 8 * 1 = 5 * ( 10 hoch 3 ) + 3 * ( 10 hoch 2 ) + 7 * ( 10 hoch 1 ) + 8 * ( 10 hoch 0 ) und wie ist da der Zusammenhang zwischen der Bezeichnung Dezimalsystem und dieser Zerlegung. Könnte es etwas damit zu tun haben, dass in Dezimal das lateinische 'decem' - lateinisch für 10 - drinnen steckt und in der letzten der beiden Zerlegungen diese 10 eine 'scheinbar tragende Rolle' spielt? Und welchen Zusammenhang gibt es in der '10 hoch ...' Schreibweise zwischen dem Exponenten n bei '10 hoch n' und der Position an der die damit bearbeitete Ziffer in der Dezimalzahl auftaucht? Und wie verallgemeinerst das ganze auf andere Zahlensysteme. Zb das Binärsystem, zb das Hexadezimalsystem? Da liegt hier deine Lektion, die es zu lernen und worüber es nachzudenken gilt.
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.