Forum: Mikrocontroller und Digitale Elektronik Pull-Up aktivieren


von Flitzii (Gast)


Lesenswert?

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

von Peter II (Gast)


Lesenswert?

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?

von Flitzii (Gast)


Lesenswert?

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.

von Peter II (Gast)


Lesenswert?

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?

von Karl H. (kbuchegg)


Lesenswert?

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.

von Flitzii (Gast)


Lesenswert?

Ich denke mal für alle Bit´s von Port D.
Weil es werden ja auch alle Bit´s High.

von Karl H. (kbuchegg)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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 :-)

von Peter II (Gast)


Lesenswert?

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?

von Flitzii (Gast)


Lesenswert?


von Flitzii (Gast)


Lesenswert?

PORTC |= (1<<PD0);
PORTC |= (1<<PD1);
PORTC |= (1<<PD2);
PORTC |= (1<<PD3);
PORTC |= (1<<PD4);


Vielleicht so?

von Karl H. (kbuchegg)


Lesenswert?

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?

von Peter II (Gast)


Lesenswert?

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);

von Flitzii (Gast)


Lesenswert?

0F :)

von Karl H. (kbuchegg)


Lesenswert?

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 ) ;

von Flitzii (Gast)


Lesenswert?

Aber ich will ja Bit 0-4 High schalten. Und nicht Bit 4-8.
Müsste ich dann nicht F0 Als Hex Wert eingeben?

von Karl H. (kbuchegg)


Lesenswert?

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 :-)

von Flitzii (Gast)


Lesenswert?

Vielen dank :)

jetzt geht es :-)

von Karl H. (kbuchegg)


Lesenswert?

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