Forum: Mikrocontroller und Digitale Elektronik Verzweifle am Unterporgramm - Bit wird nicht gelöscht


von Joachim J. (jemand0815)


Lesenswert?

Hallo zusammen,

ich habe mir ein ziemlich simples Unterprogramm geschrieben.
1
void blink(uint8_t k)
2
{
3
  volatile uint8_t i;
4
  for (i=0;i<=k;i++)
5
  {
6
    PORTB |= (1<<PB1);
7
    _delay_ms(200);
8
    PORTB &= ~(1<<PB1);
9
  }
10
  _delay_ms(1000);
11
}

Im Main sieht es so aus
1
int main(void)
2
{
3
  DDRB = (1<<DDB0)|(1<<DDB1); //PB0 und PB1 als Ausgänge
4
  PORTB =0x00;
5
  blink(10);
6
  while(1)
7
  {
8
        
9
  }
10
}

Es soll eine LED x-mal zum blinken bringen. Im Simlator läufts und der 
Port geht 10 mal an und wieder aus. Das ganze läuft (bzw. läuft nicht 
;-) ) auf einem ATtiny85 bzw. einem Adafruit Trinket 
(https://learn.adafruit.com/introducing-trinket/downloads) Ich merke an 
der Zeit, dass die delays abgearbeitet werden aber die LED bleibt 
konstant an.
Was übersehe ich?

Gruß
Joachim

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Joachim J. schrieb:
> Was übersehe ich?
Sie geht schon aus. Aber nur ganz kurz...
Mach mal ein delay nach dem Bitlöschen.

von chris (Gast)


Lesenswert?

Joachim J. schrieb:
> for (i=0;i<=k;i++)
>   {
>     PORTB |= (1<<PB1);
>     _delay_ms(200);
>     PORTB &= ~(1<<PB1);
>   }

Nach dem Löschen des Bits wird es sofort wieder gesetzt.
Baue ein zweites delay ein, dann siehst du auch was.
1
  {
2
    PORTB |= (1<<PB1);
3
    _delay_ms(200);
4
    PORTB &= ~(1<<PB1);
5
    _delay_ms(200);
6
  }

von Werner A. (homebrew)


Lesenswert?

Joachim J. schrieb:
> {
>     PORTB |= (1<<PB1);
>     _delay_ms(200);
>     PORTB &= ~(1<<PB1);

Du solltest nach dem Ausschalten auch 200ms warten...

von Joachim J. (jemand0815)


Lesenswert?

Man bin ich..... :-)

Danke!

von Tom G. (masterx244)


Lesenswert?

Joachim J. schrieb:
> Man bin ich..... :-)
>
> Danke!

Passiert... Den wald vor lauter Bäumen nicht sehen... Passiert gern bei 
so banalen Fehlern weil man die aus prinzip ausschließt

von Walter S. (avatar)


Lesenswert?

Joachim J. schrieb:
> Es soll eine LED x-mal zum blinken bringen. Im Simlator läufts und der
> Port geht 10 mal an und wieder aus.

glaube ich dir nicht, die Schleife wird nämlich 11x durchlaufen

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.