mikrocontroller.net

Forum: Compiler & IDEs Simulatorfehler mit Delay??


Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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);

}

Autor: MasterFX (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!
Die funktion erwartet doch einen double oder?
Ich habs mal versucht hat nix geholfen ....

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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>

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Optimierer 2007 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei AVR Studio und WinAVR die Optimierung auf -Os einstellen

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Hilfe. Leider hab ich die Einstellung im AVR Studio 
gefunden und auch so vorgenommen. Könnte mir bitte noch jemand sagen, wo 
ich die Einstellung im WinAVR vornehmen kann.
Danke!

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.