mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik delay funktion (led blink nicht sondern dauerleuchten)


Autor: tim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

folgenden Code habe ich aus mc.net übernommen. Ich kann nur ein 
dauerleuchten der LED erzeugen, sie sollte aber blinken. Wo ist mein 
Fehler??? Ich habe ihn nach 7h immer noch nicht gefunden. Verzweifelung! 
Ich bin dabei C und MC zu
lernen, und hänge jetzt echt fest.
Ich habe einen atmel 32 mit 7.328Mhz

Danke für eure Hilfe!!!



#include <avr/io.h>
#ifndef F_CPU
/* Definiere F_CPU, wenn F_CPU nicht bereits vorher definiert
   (z.B. durch Übergabe als Parameter zum Compiler innerhalb
   des Makefiles). Zusätzlich Ausgabe einer Warnung, die auf die
   "nachträgliche" Definition hinweist */
#warning "F_CPU war noch nicht definiert, wird nun mit 3686400 
definiert"
#define F_CPU 3686400UL     /* Quarz mit 3.6864 Mhz */
#endif
#include <util/delay.h>     /* in älteren avr-libc Versionen 
<avr/delay.h> */

/*
 lange, variable Verzögerungszeit, Einheit in Millisekunden

Die maximale Zeit pro Funktionsaufruf ist begrenzt auf
262.14 ms / F_CPU in MHz (im Beispiel:
262.1 / 3.6864 = max. 71 ms)

Daher wird die kleine Warteschleife mehrfach aufgerufen,
um auf eine längere Wartezeit zu kommen. Die zusätzliche
Prüfung der Schleifenbedingung lässt die Wartezeit geringfügig
ungenau werden (macht hier vielleicht 2-3ms aus).
*/

void long_delay(uint16_t ms) {
    for(; ms>0; ms--) _delay_ms(1);
}

int main( void )
{
    DDRB = ( 1 << PB0 );        // PB0 an PORTB als Ausgang setzen

    while( 1 ) {                // Endlosschleife
        PORTB ^= ( 1 << PB0 );  // Toggle PB0 z.B. angeschlossene LED
        long_delay(1000);       // Eine Sekunde warten...
    }

    return 0;
}

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In deinem Programm gibt es erst mal keinen Fehler.
Wenn die LED nicht wie gewünscht blinkt, dann hat das
andere Ursachen, die von hier aus nicht diagnostizierbar
sind.

zb. ist das Programm korrekt gebrannt worden?

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du lange genug gewartet mit deiner Einschätzung?

Wenn du statt mit 7,37 MHz vom Quarz mit den internen 1 MHz des
RC-Oszillators fährst, geht die LED erst nach reichlich 7 s das
erste Mal aus (um dann 7 s lang aus zu bleiben).

Autor: Gerhard. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist es moeglich dass der AVR CPU nicht angegeben wurde? Ich sehen 
nirgendwo den AVR Typ.

Ich habe das Program auf einen PIC in CCS C schnell ausprobiert und es 
fuktionierte auf Anhieb. Am eigentlichen Program kann es wirklich nicht 
liegen.

Gruss,
Gerhard

Autor: Thomas Korthoff (thomas47058)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

bin neu hier und hab vor mich richtig ins Thema einzuarbeiten. Dazu habe 
ich mir von Olimex das Board P28 gekauft zusammen mit einem Atmega8 und 
dem AVRISP MK2 USB Programmierer. Alles soweit schön und gut. Das 
Programmieren funktioniert. Jedoch funktionieren nur die Programme, die 
auf der Olimex Homepage als Beispiel zu finden sind. Sobald ich einen 
Quell-C-Text herauskopiere, in ein eigenes Projekt einfüge, kompiliere 
und versuche zu flashen, geht es nicht mehr. Das BlinkingLed Programm zB 
sorgt nur dafür, dass die LED dauerleuchtet, aber nicht blinkt.

Der Atmega8 wird mit einem 8MHz Quarz getaktet. Ich benutze AVR Studio 
um zu programmieren und zu flashen, neueste Version. WinAVR ist auch 
frisch installiert.

Ich habe schon vermutet, dass die Makefile evtl nicht passt, die AVR 
Studio kreiert. Allerdings weiß ich nicht welche Einstellungen ich noch 
tätigen soll, abgesehen von "Device" und "Frequency" unter 
Project>Config. Options. Sind sonst noch wichtige Einstellungen 
vorzunehmen? Im Anhang das Makefile von AVR Studio. Bitte gebt bescheid 
wenn ich das Makefile von Olimex auch posten soll.

Vielen Dank im Voraus!
Thomas

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.