mikrocontroller.net

Forum: Compiler & IDEs LED Blinken lassen


Autor: DeltaEx (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieso blinkt die LED nicht mir dem Code?? Was mache ich falsch?

/*********************************************
Taste-LED (1 LED)
Compiler            : winavr
Chip type           : AT90S2313
nst, 12.05.2005
*********************************************/
#include <avr/io.h>
#include <inttypes.h>
#ifndef F_CPU
#define F_CPU 10000000UL     /* Quarz mit 10.0000 Mhz  */
#endif
#include <avr/delay.h>


int main(void)
{

  DDRB &= 0xff;

  PORTB = 0xff;


  while (1)
  {
  PORTB |= ( 0 << 1);

  _delay_ms(1000);

  PORTB &= ~(1 << 1);

  _delay_ms(1000);
  }
}

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weil du die Doku zu <avr/delay.h> auch nicht lesen kannst.  Hättest du
wenigstens zwei oder drei Threads hier mitgelesen, wäre dir dasselbe
Problem bei jemandem anders aufgefallen.

Bitte gehe zurück zur Badstraße, gehe nicht über LOS, und rechne dir
aus, welche Verzögerung maximal bei 10 MHz mit der 16-bit-Schleife
machbar ist.  Dann hälst du einen Oszi an deine LED und misst mal
nach, ob sie einigermaßen mit der entsprechenden Frequenz flimmert...

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
An welchen Pin ist denn deine LED angeschloosen? Ich nehme mal an, an
PB.1. Die Zeile

PORTB |= ( 0 << 1);

ändert jedoch nur einmal den Zustand von PORTB, danach nicht mehr.

Probiere es mal hiermit:

while (1)
{
  PORTB ^= 2;       // EX-OR
  _delay_ms(1000);
}

Gruß
Thorsten

Autor: mthomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
- DDRB=0xff, nicht &=
- PORTB|=(1<<1), nicht (0<<1)
- Parameter an delay testweise kleiner (vgl. aktuelle Diskussion in
einem anderen Thread und avr-libc-Dokumentation und "delay.h")

Autor: mthomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hoppla, viel los hier heute...

Autor: DeltaEx (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
LOL das ist ja blöd!! Wieso kann man nicht direct 2000 für 2 sek
eigeben? hat das was mit dem AVR zutun??
So geht das:

while (1)
{
  PORTB ^= 2;       // EX-OR
  for(i=0;i<78;i++)
  {
  _delay_ms(26);
  }
}

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> LOL das ist ja blöd!! Wieso kann man nicht direct 2000 für 2 sek
> eigeben? hat das was mit dem AVR zutun??

avr-libc (dazu gehört delay.h und _delay_ms) ist Open Source. Wenn du
irgendetwas blöd gelöst findest, darfst du gerne einen Patch schreiben
und die fragliche Stelle verbessern. Rummeckern kann jeder.

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Er schafft es ja nichtmal die Doku zu lesen, bevor er anfängt zu posten.
Da ist das glaube ich zu viel verlangt.

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.