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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.