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); }
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.
Hi! Die funktion erwartet doch einen double oder? Ich habs mal versucht hat nix geholfen ....
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>
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?
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!
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?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.