- 3D-Druck Einstieg und Tipps         
Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 27

Thema: zeitverzögerung

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.11.2006
    Ort
    Hamburg
    Alter
    39
    Beiträge
    199

    zeitverzögerung

    Anzeige

    Powerstation Test
    Moin!!!
    Ich hab grade versucht eine Zeitverzögerung zu programmieren.
    Es soll wenn man einen Taster drückt nach 1s eine LED leuchten.
    Im MFile steht F_CPU = 8000000. Ich hab aber noch keinen Quarz. D.h. ich will mit dem internen Oszillator arbeiten.
    Mein Quellcode sieht so aus:
    Code:
    #include <avr/io.h>
    #include <stdint.h>
    #define F_CPU [8000000]UL
    #include <avr/delay.h>      
     
    int main (void)
    {          
       DDRA  |= (1<<DDA0);
       DDRD  &= ~(1<<DDD0);
       PORTA &= ~(1<<PA0);
       
       while(1) 
       {
       if ((PIND & (1<<PD0)) != 0)
         {
         _delay_ms(1000)		
    	 PORTA |= (1<<PA0);
         }
    	 
    	 else
    	 PORTA &= ~(1<<PA0);
    
       }
    return 0;                                     
    }
    Hoffe mir kann jemand helfen.
    MfG Jan

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Hoffe mir kann jemand helfen
    Ich kann Dir helfen \/

    Diese Seite speicherst Du dir in Deine Bookmarks und schaust auch mal rein

    Was für Dich interessant ist, kannst Du hier nachlesen.

    viel Erfolg

    Gruß Sebastian

    P.S.
    Dein Kompiler hat sicherlich eine Warnung/Fehler gemeldet...
    Wenn man liest, was da so steht, kommt man sicher auch von alleine darauf, was fault ist.
    Software is like s e x: its better when its free.
    Linus Torvald

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.11.2006
    Ort
    Hamburg
    Alter
    39
    Beiträge
    199
    Naja, erlich gesagt hab ich mich noch nie an so eine Englische Seite getraut, aber einmal is ja immer das erste mal
    Ich versuch mal was zu erreichen, sonst kann ich ja immernoch fragen.
    Danke erstmal.

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Haja, Englisch ist auch nicht unbedingt meine Lieblingssprache, leider geht es nicht ohne wenn man mit Elektronik was macht.
    Schau mal, so schwer ist es auch nicht, sonst frag nochmal...

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.11.2006
    Ort
    Hamburg
    Alter
    39
    Beiträge
    199
    Das is voll zum Kotzen. Hab mich grade voll abgequält mal diesen Text zu übersetzen:
    <util/delay.h>: Convenience functions for busy-wait delay loops
    Note:
    As an alternative method, it is possible to pass the F_CPU macro down to the compiler from the Makefile. Obviously, in that case, no #define statement should be used.
    The functions in this header file are wrappers around the basic busy-wait functions from <util/delay_basic.h>. They are meant as convenience functions where actual time values can be specified rather than a number of cycles to wait for….

    Notiz:
    So wie in einer Alternativen Methode ist es möglich den F_CPU befehl vom Makefile zum Compiler zu übertragen. Es ist offensichtlich das in diesem Fall keine #define-Anweisung benutzt werden sollte.
    Die Funktionen in diesem Header-file sind Zusätze rund um die Grundsätzlichen busy-wait-funktionen aus <util/delay_basic.h>. Sie sind als Vereinfachungsfunktionen gedacht in denen gegenwärtige Zeitwerte eher festgelegt werden können als eine Anzahl von Schleifen auf die man warten muss....

    Bin kein bisschen schlauer. Weiß immernochnicht wie ich damit umgehen soll. Hab auch keine Ahnung ob jetzt die interne Taktung läuft oder was sonst falsch ist. Ich könnt echt heulen!!!

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    kotzen ?
    Ok, noch 2 Tips:
    1.Im 2. Link lies mal was zwischen < und > steht und vergleiche es mit Deinem Programm
    2.
    Function Documentation
    void _delay_ms ( double __ms )


    Perform a delay of __ms milliseconds, using _delay_loop_2().

    The macro F_CPU is supposed to be defined to a constant defining the CPU clock frequency (in Hertz).

    The maximal possible delay is 262.14 ms / F_CPU in MHz.
    _delay_ms war hier gefragt, oder ?

    Hab auch keine Ahnung ob jetzt die interne Taktung läuft oder was sonst falsch ist. Ich könnt echt heulen!!!
    Da kann Dir keiner helfen, du mußt schon selber wissen wie Du den µC gefused hast...
    Software is like s e x: its better when its free.
    Linus Torvald

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.11.2006
    Ort
    Hamburg
    Alter
    39
    Beiträge
    199
    Davon hab ich auch keine Ahnung, wie man den fused.
    Das dumme ist, das es über winavr und so auch nicht ein Buch gibt oder so.
    Mal sehen ob ich noch was hinbekomme. sonst wird man sicher morgen wieder von mir hören.
    Bis dann

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.11.2006
    Ort
    Hamburg
    Alter
    39
    Beiträge
    199
    Moin!!!
    Ich hab das jetzt mal weiter durchgetestet.
    Hab einen weiteren Pin genommen und den auf druck des gleichen Tasters ohne verzögerung auch setzen lassen.
    Der Code ist so:

    Code:
    #include <avr/io.h>
    #include <stdint.h>
    #define F_CPU 8000000UL 
    #include <util/delay.h>     
     
    int main (void)
    {          
       DDRA  |= (1<<DDA0) | (1<<DDA1);
       DDRD  &= ~(1<<DDD0);
       PORTA &= ~(1<<PA0) | (1<<PA1);
       
       while(1) 
       {
       if ((PIND & (1<<PD0)) != 0)
         {
    	 PORTA |= (1<<PA1);
    	 _delay_ms(100);
    	 PORTA |= (1<<PA0);
         }
    	 
    	 else
    	 PORTA &= ~(1<<PA0); 
    	 PORTA &= ~(1<<PA1);
    
       }
    return 0;                                     
    }
    Das hab ich gemacht um zu sehen ob das verzögert.
    Es funktioniert. Nur leider ist die verzögerungszeit immer die selbe.
    wenn ich "_delay_ms(100)" eingebe ist die verzögerung genau so lange als wenn ich "_delay_ms(10000)" eingebe. Es kommt aber keine Fehlermeldung oder so.

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.11.2006
    Ort
    Hamburg
    Alter
    39
    Beiträge
    199
    Ich hab mir grade eben mal das Datenblatt vom ATMega32 angesehen.
    Hab da was von Oscillator kallibrierung gelesen.
    Da steht was vom register OSCCAL. Wenn man das Null setzt ist der Takt auf 1MHz gesetzt.
    Also hab ich im Quellcode #define F_CPU 1000000UL eingegeben und vor While(1) OSCCAL = 0x00; eingegeben.
    Die zeiten sind dann bei verschiedenen ms-eingaben tatsächlich unterschiedlich. Das geht aber auch wenn ich OSCCAL = 00; eingebe.
    Kann mir das mal jemand erklähren?
    Hoffe es antwortet mal wieder jamand
    Bis dann.

    PS. Wenn ich statt 1000ms 10000 eingebe ist da wieder keine Veränderung.

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Ja,das sieht schon nicht schlecht aus...

    Ich weiß ich bin ein Ar***, ich könnte Dir die Lösung direkt sagen, aber Du kommst schon selber drauf.
    Auf jedem Fall kannst Du nicht lesen [-X
    Ich hab Dir einen Auszug aus der Doku geschrieben, geh nochmal nach oben und lies den letzten Satz !
    .......
    Und wie löst man das Problem ?
    Ein Tip, man könnte eine Schleife nehmen in der .....

    Bis dann Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests