delay funktion (led blink nicht sondern dauerleuchten)

Gast #784463
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;
}
Gast #784494
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
#1098281
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
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren