Simulatorfehler mit Delay??

Gast #366132
Lesenswert?

Hallo!

Ich hab ein Problem mit der delay funktion.
Ich möchte bei einer Frequenz von 10Mhz ein 16ms delay erzeugen.
So wie ich die Doku verstehe geht die delay funktion bei 10 MHz bis
26.2 ms. Bin also noch im gültigen berreich. Ich hab auch keine
Probleme beim compilieren. Ich benutze die version die man mit util/
includet. Wenn ich jetzt den Simulator anwerfe, dann wird immer nur der
erste Aufruf von delay ausgeführt. Jeder weitere wird übersprungen.
Fehler im Simulator? Fehler im bei mir? Kennt das jemand? Das ist mein
ertkontakt mit der delay Funktion. Hab die doku gelesen und viel im
Forum aber nix erklärendes gefunden. Ich hab unten mal ein Codefragment
angehängt das mein Problem ein bisschen zeigt. Bin für jeden Tipp
dankbar.

Gruß Michael


void init_LCD_Lib(){

  DDRC = 0xFF;  //alle Pins an Port C sind Output
  PORTC = 0x00; //Ausgang mit Nullen füllen

  _delay_ms(16.0); //<== wird ausgeführt

  bool eightBitInterface = false;
  bool twoLineDisplay = true;
  bool tenDots = true;

  _delay_ms(16.0); //<== wird übersprungen warum?!?!

  LCD_SetFunction(eightBitInterface, twoLineDisplay, tenDots);

}
Gast #366133
Lesenswert?

Ich glaube dein Problem liegt darin, dass du eine Fließkommazahl an die
Funktion übergibst. Zwar sollte es eigentlich keine Probleme geben (da
einfach nur die Nachkommastellen abgeschnitten werden), dennoch würde
ich mal nen integer-Wert probieren.
Gast #366135
Lesenswert?

Kann das an einer Compiler optimierung liegen?
Der Simulator will einfach die Zeile nicht ausführen...
Auf welcher  Compilereinstellung muß ich das ganze denn stehen haben?
Muß ich evtl noch was anderes machen außer den folgednen EIntrag in der
h dadei?

#include <avr/io.h>
#ifndef F_CPU
#define F_CPU 10000000UL     /* Quarz mit 10.0 Mhz  */
#endif
#include<util/delay.h>
Gast #524711
Lesenswert?

Hab gerade genau das gleiche Problem.

void shiftout(char DATA,char CLOCK, int dsp_char_out,int delay_clock, 
int delay_send)
{
  int n;

  for (n=0; n<7; n++)  {           // Sende 8 BIT
  PORTB |= (1 << CLOCK);         // CLOCK = 1
 _delay_ms(1);     // Zeit die der CLOCK ausgang auf
  PORTB &= ~(1 << CLOCK);        // Ausgabe des Schiebetakt, CLOCK = 0
  if (dsp_char_out & (0x80 >> n))  // Daten an Display ausgeben, 
MSBfirst
    {
      PORTB |= (1 << DATA);
    }

    else
    {
      PORTB &= ~(1 << DATA);
   }
  _delay_ms(1);     // Zeit die das Signal am PORT anliegt
 }

der Simulator führt die erste _delay_ms Funktion aus und überspringt 
dann aber die zweite.Wobei die Beiden ja genau die gleiche Delay Zeit 
haben.
Kann mir hierbei jemand helfen? Kann ich die delay-Funktion nur einmal 
verwenden, was ja eigentlich nicht sein kann?
Gast #525030
Lesenswert?

So hab jetzt auch die Einstellung im WinAVR gefunden und vorgenommen. 
Leider funktioniert der zweite Aufruf der delay Funktion immer noch 
nicht.
Wenn ich allerdings beim zweiten Aufruf _delay_us(1) schreibe, dann 
funktioniert es auf einmal... Kann mir irgendjemand sagen, wo da der 
Fehler liegt, bzw. wie ich es mit zweimal _delay_ms() zum laufen 
bekomme?

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