Forum: Mikrocontroller und Digitale Elektronik begriffserklärung


von Helmut G. (gowea)


Lesenswert?

kann mir jemand ich kurzform bitte folgende sachen erklären:

1. Frage:
DDRC = (1 << DDC2) | (1 << DDC3)  // portc pin 2 und 3 als eingang
definieren
WIE DEFINIERE ICH DIE ALS AUSGANG (DDRC = (0 << DDC2) | (0 << DDC3))

2. Frage:
wie funktioniert eine while schleife


mfg helli

von MicroMann (Gast)


Lesenswert?

Ich will ja nicht unfair erscheinen, aber hast du mal ins Tutorial
geschaut ? Wenn du das durcharbeitest, kannst du alle diese Fragen
selbst beantworten.

von TravelRec. (Gast)


Lesenswert?

Frage 1 ist Quark, eine 1 im DDRx-Register bedeutet immer, daß der
jeweilige Pin als AUSGANG geschaltet ist, 0 bedeutet Eingang.

von Karl heinz B. (kbucheg)


Lesenswert?

zu 1)
Nein. So geht das nicht.
Der springende Punkt ist, dass eine 1 an einer Bit-
position den entsprechenden Pin als Eingang beschaltet
und eine 0 dementsprechend als Ausgang. Alles was du nicht
explizit mit 1 setzt ist sowieso automatisch 0.
d.h. in
DDRC = (1 << DDC2) | (1 << DDC3)
wird das Bit #2 und Bit #3 auf 1 gesetzt. Alle anderen Bits
sind damit 0 -> #2 und #3 sind Eingang, alle anderen sind
Ausgang.

2)
da klinke ich mich jetzt aus. Das ist C Grundlagenwissen das
in jedem noch so schlechtem Lehrbuch enthalten ist.
Ohne dieses Wissen solltest du nicht versuchen einen µC zu
programmieren. Das kann nur schief gehen. Versuch deine ersten
Schritte in C besser auf einem PC. Da gibt es viel bessere
Möglichkeiten rauszufinden warum ein Programm nicht funktioniert
und du musst dich auch am Anfang nicht um die absoluten low-level
Dinge kümmern um die du bei einem µC nicht herumkommst.
Zur Erklärung: Deine Frage ist äquivalent zu:
  Ich möchte an meinem Motor dìe Kolberückzugsfeder wechseln. Wie
  rum muss ich meinen Schraubenzieher halten?

von Karl heinz B. (kbucheg)


Lesenswert?

> 1 an einer Bit-position den entsprechenden Pin als Eingang

Aeh. Anders rum
0  Eingang
1  Ausgang

Mich hat die Frage nach dem 'while' fertig gemacht.

von Helmut G. (gowea)


Lesenswert?

ok thx
zu 1) hab ich eigentlich schon gewusst, aber vor verwirrung nicht mehr
drangedacht

zu 2) ok, werd mal schauen

von Timmo H. (masterfx)


Lesenswert?

Also nochmal eine Zusammenfassung:
1. Eine "1" im DDRx bedeutet Ausgang, eine 0 bedeutet eingang. Daher
hast du das oben verdreht.
2. Eine while schleife wird so lange durchlaufen bis die Bedingung in
der Klammer nicht mehr erfüllt ist, oder sie durch ein "break;"
verlassen wird. Bsp:
1
a = 0;
2
b = 5;
3
while(a < b){
4
  a++;
5
}
Die Schleife wird also nach 5 Durchläufen beendet bzw. sie wird erst
gar nicht mehr "betreten".
Das könnte man auch so lösen:
1
a = 0;
2
b = 5;
3
while(1){
4
  a++;
5
  if(a == 4) break;
6
}
Natürlich machen diese Konstruke eher wenig sinn, bei sowas ist eine
For-Schleife angebrachter.

von Timmo H. (masterfx)


Lesenswert?

Muss natürlich if(a == 5) heissen.

von MicroMann (Gast)


Lesenswert?

Wobei die break-Variatte 'böse' ist ;)

von Rahul (Gast)


Lesenswert?

Würde man "goto" verwenden, wäre es böse.
"break" ist schon in Ordung.

>Muss natürlich if(a == 5) heissen.

nee
if(a == b)

von Rolf Magnus (Gast)


Lesenswert?

goto kann auch sinnvoll sein, wenn man mehrere verschachtelte Schleifen
hat und aus der inneren heraus komplett aus der Schachtel ausbrechen
will.

von Rahul (Gast)


Lesenswert?

Dass kann man auch sauberer machen, indem man ein
"Schleifenverlassflag" setzt. Man weiß in dem Fall ja nicht, welcher
"Müll" noch auf dem Stack liegt...

von Karl heinz B. (kbucheg)


Lesenswert?

> das könnte man auch so lösen

Im konkreten Fall macht's keinen Unterschied. Aber im
allgemeinen schon. Daher eher so:

  a = 0;
  b = 5;
  while(1) {
    if( a > b )
      break;
    a++;
  }

Die Abfrage muss vor dem 'Schleifenrumpf' erfolgen, nicht
hinterher.

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.