www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik begriffserklärung


Autor: Helmut G. (gowea)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: MicroMann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: TravelRec. (Gast)
Datum:

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

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Helmut G. (gowea)
Datum:

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

zu 2) ok, werd mal schauen

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht 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:
a = 0;
b = 5;
while(a < b){
  a++;
}
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:
a = 0;
b = 5;
while(1){
  a++;
  if(a == 4) break;
}
Natürlich machen diese Konstruke eher wenig sinn, bei sowas ist eine
For-Schleife angebrachter.

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Muss natürlich if(a == 5) heissen.

Autor: MicroMann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wobei die break-Variatte 'böse' ist ;)

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Rolf Magnus (Gast)
Datum:

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

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.