mikrocontroller.net

Forum: Compiler & IDEs F_CPU keine Wirkung


Autor: Frank S. (spanzo)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

Bin Neuling was Atmega AVR-Studio und GCC betrifft.
Habe bisher an C51 Controllern in Assembler programmiert.
Nun habe ich mir aus den lcd-routinen des tutorials und dem code aus 
folgendem Beitrag ein Programm gemacht um die Frequenz messen.

"Beitrag "Input Capture Pin (ICP) auslesen ( Frequenz messen)";

Das Programm funktioniert soweit, bis auf ein Verständnisproblem.
Bei der Berechnung der Frequenz wird im Bsp.

  Erg = F_CPU / Erg;       // f = 1 / t
gerechnet. Ich muss aber mein Ergebnis zusätzlich
noch durch 8 teilen damit sie richtig ist. Hier habe ich nun bemerkt, 
dass es völlig egal ist, welchen Wert ich F_CPU zuweise.
  Erg = F_CPU  Erg  8;    // f = 1 / t  >> richtiges ergebnis



Bitte um Hilfe

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

Bewertung
0 lesenswert
nicht lesenswert
Wo stellst du den F_CPU ein?

* Im AVR Studio im Dialog 'Project Configuration'
* oder im Code direkt?


Wenn du im Project Configuration Dialog einen Eintrag für die 
Taktfrequenz hast, ist der F_CPU Wert im C Code nur noch Makulatur.

Autor: Frank S. (spanzo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sowohl als auch. Ich hab beides versucht, bzw. in der Configuration 
wieder rausgenommen.
Es wird ja wohl mehrmals im Code definiert.
Einmal in meiner .c datei und dann nochmal in der delay.h
macht das vielleicht Probleme?
Was mir auch noch unklar ist, Ich programmiere direkt aus dem 
AVR-Studio, wenn ich in das standard makefile schaue was beim anlegen 
des Projektes generiert wird, steht dort nirgens was von F_CPU.
Auch wenn ich ein neues makefile erzeue nicht.

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

Bewertung
0 lesenswert
nicht lesenswert
Frank S. schrieb:
> sowohl als auch.

Dann gilt das vom Dialog

> Es wird ja wohl mehrmals im Code definiert.
> Einmal in meiner .c datei

Nein wird es nicht.
Bzw. nur dann, wenn vom Dialog keine Vorgabe kam.

#ifndef F_CPU
... wenn es noch keine Definition für F_CPU gibt. ifndef ... if not 
defined

> und dann nochmal in der delay.h

Dort ist dasselbe Spielchen. delay.h macht nur ein 'Notprogram' wenn es 
noch kein #define für F_CPU gab

> AVR-Studio, wenn ich in das standard makefile schaue was beim anlegen
> des Projektes generiert wird, steht dort nirgens was von F_CPU.
> Auch wenn ich ein neues makefile erzeue nicht.


Schau dir den Build-Log an, der während des Build ausgegeben wird. Bei 
den Compileraufrufen müsste der F_CPU auftauchen

Autor: Frank S. (spanzo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wurde nicht im Build-Log angezeigt.



Habe nun aber gesehen, dass "hart" in der der delay.h definert war.
Habe nun Win-avr deinstalliert und neu installiert, um die originale 
Datei wieder zu haben.
Nun kommt aber ein ganz neuer Fehler zutage.

Build started 15.5.2010 at 00:02:26
In file included from ../ATMEGA88_freq.c:30:
d:/winavr-20100110/lib/gcc/../../avr/include/util/delay.h: In function 
'_delay_ms':
d:/winavr-20100110/lib/gcc/../../avr/include/util/delay.h:113: error: 
expected expression before '=' token
d:/winavr-20100110/lib/gcc/../../avr/include/util/delay.h:123: error: 
expected expression before '=' token
d:/winavr-20100110/lib/gcc/../../avr/include/util/delay.h: In function 
'_delay_us':
d:/winavr-20100110/lib/gcc/../../avr/include/util/delay.h:151: error: 
expected expression before '=' token
../ATMEGA88_freq.c: In function 'main':
../ATMEGA88_freq.c:123: error: expected expression before '=' token
make: *** [ATMEGA88_freq.o] Error 1
Build failed with 4 errors and 0 warnings...


dieser Fehler geht weg, wenn ich die Fregeuenz in der Configuration 
eintrage, allerdings ist die Berechnung dann immer noch falsch.

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

Bewertung
0 lesenswert
nicht lesenswert
Lass mich raten: du änderst F_CPU und erwartest, dass der Controller
danach mit der richtigen Frequenz arbeitet?

Das funktioniert nicht.  F_CPU ist nur ein Makro, der den Bibliotheks-
routinen rüberreicht, mit welcher Taktfrequenz deine CPU läuft.  Dass
sie mit dieser Frequenz läuft, darum musst du dich aber schon selbst
kümmern, dass kann der Compiler nicht für dich tun.

Dein Problem klingt so, als müsstest du die CKDIV8-Fuse noch abschalten.
Diese Fuse wiederum ist nur eine Vorbelegung für den clock prescaler,
den kannst du auch zur Laufzeit umschalten:
#include <avr/power.h>

...
   clock_prescale_set(clock_div_1);

Autor: Frank S. (spanzo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, das mit der Fuse hat geklappt. :-)

Allerdings kann ich jetzt nur noch kompilieren, wenn ich die Frequenz im 
Project Configuration Dialog eintrage, da sonst die Fehlemeldungen 
kommen

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frank S. schrieb:
> Allerdings kann ich jetzt nur noch kompilieren, wenn ich die Frequenz im
> Project Configuration Dialog eintrage, da sonst die Fehlemeldungen
> kommen

Die muß überall, wo delay.h inkludiert wird, gesetzt sein, und sie muß 
gesetzt werden, bevor es inkludiert wird.

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.