ATMega168 & avr-gcc 3.4.4

Gast #257018
Lesenswert?

Hallo Leute!

Ich habe ein Phänomen mit meinem AtMega168 in Verbindung mit dem
avr-gcc 3.4.4.
Es gibt ja ein Makro _delay_ms(...) welches eine gewisse Anzahl an
Millisekunden warten soll.
Ich habe ein Programm in dem ich 1000ms warten will.
Es toggelt einfach einen Portpin, an dem bei mir ein Relais hängt.
Jetzt wird aber, aus irgendeinem Grund, keine Pause von 1000ms
durchgeführt.
Das Relais klappert jetzt ohne Pause so vor sich hin.
Meine CPU arbeitet mit einem 20MHz Quarz.
Anbei der Sourcecode mit dem Makefile.

Bitte um Hilfe!

Danke!
Markus
Angehängte Dateien:
Gast #257021
Lesenswert?

Aha, ich hatte mir die Doku schon mal angeschaut.
Das mit der Maximalverzögerung habe ich dabei überlesen.
Somit muss ich für meinen Zweck einen Timer starten.
Oder gibt es da eine einfachere Möglichkeit?

Danke!

Markus
Gast #257023
Lesenswert?

> Doku lesen!

Besser noch: die Delay-Funktion selber schreiben, dann weißt du auch,
was sie macht.

,,,, (QuadComma) = Hubert Müller*

*) Weil es ist ja wichtig, hier im Forum einen richtigen Namen zu
benutzen LOL
Gast #257024
Lesenswert?

Wenn es nur zum testen ist, denn sonst würde ich auf jeden Fall einen
Tiemr nehmen. Dann kannst du auch eine Schleife um das delay machen.

Also z.B. 100 mal 10ms aufrufen. Wobei das dann natürlich nicht genau
1000ms sondern etwas mehr sind.
Gast #257025
Lesenswert?

Danke Leute für die Lösungsvorschläge!
Es ist nicht nur zum Testen, sondern wird auch im "richtigen" Betrieb
verwendet.

@Rick: Ich werde deinen Sourcecode heute Abend mal ausprobieren.

Markus
Gast #257026
Lesenswert?

Ricks Lösung so abgewandelt, daß keine Division nötig ist:
1
void wait_ms(unsigned int ms) 
2
{ 
3
        #define max_ms          262100000/F_CPU 
4
         
5
        for(; ms > max_ms; ms -= max_ms)
6
        { 
7
                _delay_ms(max_ms);
8
        } 
9
        _delay_ms(ms); 
10
}

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