Nicht angemeldet. · Kennwort vergessen · Registrieren

hi99nife
Mitglied seit 10/2011
2 Beiträge
Betreff: Programmieraufgabe Aug 2011 2a)
Hallo,

in der Angabe steht die LEDs sind aktiviert bei low-Pegel in PORTB.
Für mich heißt das soviel, das die LEDs nur dann leuchten, wenn am entsprechend Pin im PORTB eine 0 liegt.
Warum ist dann in der Lösung die die Tutoren rumgeschickt haben, dann genau das gegenteil der Fall?

  1. do {
  2.             sei();
  3.             poti_value= poti_read();
  4.             num_leds = (poti_value/128) + 1; // 10-bit -> max. 1023
  5.             PORTB = 0x0;
  6.             for (uint8_t i= 0; i < num_leds; i++)
  7.                 PORTB |= (1 << i);
  8.             cli();
  9.         } while (!pressed);

Müsste es nicht wie folgt lauten?

  1. PORTB = 0xff;
  2. for (uint8_t i= 0; i < num_leds; i++) {
  3.     PORTB &= ~(1 << i);
  4. }

Danke
Dieser Beitrag wurde am 26.07.2012, 14:50 von Christian St. verändert.
morty
SPiC-Meister
(Moderator)
Mitglied seit 05/2011
331 Beiträge
Zitat von hi99nife:
Hallo,

in der Angabe steht die LEDs sind aktiviert bei low-Pegel in PORTB.
Für mich heißt das soviel, das die LEDs nur dann leuchten, wenn am entsprechend Pin im PORTB eine 0 liegt.
JEp.

Zitat von hi99nife:
Warum ist dann in der Lösung die die Tutoren rumgeschickt haben, dann genau das gegenteil der Fall?
Das kann ich dir leider auch nicht sagen. Und die Lösung ist eh nicht besonders schön, da die LEDs flackern (Sie werden in jeden Schleifendurchlauf ausgeschaltete und dann wieder eingeschaltet). In der Praxis ist das so schnell, dass sie einfach nur gedimmt sind - schön ist es aber auf jeden Fall nicht.
Deutlich besser (und schneller) wäre in diesem Fall
  1.     uint8_t tmp = 0xff;
  2.     for (uint8_t i= 0; i < num_leds; i++) {
  3.         tmp &= ~(1 << i);
  4.     }
  5.     PORTB = tmp;
oder wie im anderen Thread (langsammer aber auch ohne flackern)
  1.     for (uint8_t i= 0; i < 8 ; i++) {
  2.        if(i < numleds){ PORTB &= ~(1 << i);}
  3.        else{ PORTB |= (1<<i);}
  4.     }
Schließen Kleiner – Größer + Auf diesen Beitrag antworten:
Prüfcode: VeriCode Gib bitte das Wort aus dem Bild ins folgende Textfeld ein. (Nur die Buchstaben eingeben, Kleinschreibung ist in Ordnung.)
Smileys: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O :troll:
Weitere Zeichen:
Gehe zu Forum
Powered by the Unclassified NewsBoard software, 20110527-dev, © 2003-8 by Yves Goergen