Ausführung in C 16mal zu schnell, in Bascom richtig

Gast #1679056
Lesenswert?

Moin!

Ich habe zur Zeit folgendes Problem:

Mein AtMega8 läuft, sofern ich ihn in C programmiere, 16x mal zu 
schnell.
Mit Bascom blinkt die LED immer schön im Sekundentakt (was sie auch 
soll).

Zuerst dachte ich daran, dass C Probleme mit _delay_ms mit größeren 
Werten hat. Also habe ich das umgeändert in

void delay_second()
{
  int x;
  for (x=0;x<=50;x++)
  {
  _delay_ms(20);
  }
}

Immernoch dasselbe Problem.
Der Takt ist in der makefile richtig eingestellt. (16000000)
Testweise habe ich den Takt in dem C code auch definiert, mit dem selben 
ergebnis.
Für mich klingt das im moment so, als würde C mein "F_OSC = 16000000" 
ignorieren.

Langsam werde ich verrückt. In Bascom funktioniert alles wunderbar, in C 
rennt mir der Controller hoffnungslos davon.

Hat irgendwer eine Idee was des Übels Wurzel sein könnte?
Die Suche hat mir bisher noch nicht geholfen...

MfG AnoBit
#1679068
Lesenswert?

Es muss 16000000UL heißen (oder auch nur L). Das Makefile überschreibt 
die Einstellungen im C-Code, deswegen funktioniert es nicht (vermutlich 
kein L-Suffix im Makefile).

Nachtrag 2: es muss natürlich auch F_CPU heißen, sonst ist das der 
delay.h egal. Und im C-Code muss die Definition VOR dem Inkludieren der 
delay.h geschehen.

und bezüglich Genauigkeit:
1
void delay_second()
2
{
3
  int x;
4
  for (x=0;x<=50;x++)
5
  {
6
  _delay_ms(20);
7
  }
8
}

diese Schleife läuft 51-mal durch und erzeugt damit einen Delay von 1020 
ms.

Gruß
David

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