- 3D-Druck Einstieg und Tipps         
Seite 5 von 5 ErsteErste ... 345
Ergebnis 41 bis 47 von 47

Thema: AVR Einstieg leicht gemacht (statt Basic mit C arbeiten)

  1. #41
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.064
    Anzeige

    Powerstation Test
    das f-cpu ding kommt glaub ich ins makefile, wenn ich mich recht erinnere.das muss entsprechend angepasst werden.
    wenn du den schnellen quarz einsteckst, läuft dein langsames programm schnell - das ist bei einfachen programmen nicht weiter schlimm, jedoch sind alle zeitlich wichtigen anwendungen wie z.B. eine übertragung über infrarot, über rs232, oder auch über I2C oder zeitgesteuertes ein- und ausschalten von dingen nicht mehr funktionstüchtig oder eben viel zu schnell.

    den quarz musst du anschliessen, und dann den prozessor entsprechend einstellen. die interne frequenz wird dqann abgestellt, es gilt die des quarzes. wie man das einstellt, steht im tutorial.

    du brauchst auch im moment nihct zwingend einen quarz, der mega32 kann selbst taktraten bis zu 16 mhz erzeugen. dazu musst du im datenblatt nachlesen. ein externer quarz ist jedoch etwas genauer, was vor allem für rs232- und ähnliche datenübertragungen recht wichtig ist. zm experimentieren reicht aber auch die interne 16 mhz frequenz, wenn du ein gefühl für die geschwindigkeit bekommen willst.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  2. #42
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.06.2007
    Ort
    zwischen Hannover und Hildesheim
    Alter
    33
    Beiträge
    135
    In dem AVR-GCC-Tutorial steht unter anderem folgendes Programm:
    Code:
    #include <avr/io.h>
    #include <inttypes.h>
    #ifndef F_CPU
    #define F_CPU 3686400UL     /* Quarz mit 3.6864 Mhz  */
    #endif
    #include <avr/delay.h>      /* definiert _delay_ms() ab avr-libc Version 1.2.0 */
    #include <util/delay.h>     /* in der aktuellen Version in util/ */ 
     
     
    /* Einfache Funktion zum Entprellen eines Tasters */
    inline uint8_t debounce(volatile uint8_t *port, uint8_t pin)
    {
        if ( ! (*port & (1 << pin)) )
        {
            /* Pin wurde auf Masse gezogen, 100ms warten   */
            _delay_ms(50);  // max. 262.1 ms / F_CPU in MHz
            _delay_ms(50); 
            if ( *port & (1 << pin) )
            {
                /* Anwender Zeit zum Loslassen des Tasters geben */
                _delay_ms(50);
                _delay_ms(50); 
                return 1;
            }
        }
        return 0;
    }
     
    int main(void)
    {
        DDRB &= ~( 1 << PB0 );                 /* PIN PB0 auf Eingang (Taster)            */
        PORTB |= ( 1 << PB0 );                 /* Pullup-Widerstand aktivieren            */
        ...
        if (debounce(&PINB, PB0))             /* Falls Taster an PIN PB0 gedrueckt..    */
            PORTD = PIND ^ ( 1 << PD7 );  /* ..LED an Port PD7 an-
                                       bzw. ausschalten */
        ...
    }
    Daraus habe ich das mit dem f_cpu. Kann es sein, dass erst überprüft wird, ob bereits im makefile eine andere Frequenz eingestellt ist (ifndef) und wenn dies nicht der Fall ist programmintern die Frequenz des Quarzes bekannt gegeben wird (define)?

  3. #43
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.064
    an sicch ist es so: du MUSST die frequenz nicht angeben. der prozessor arbeitt so schnell wie er halt kann.

    es kann nur deutich einfacher sein, wenn man etwas anderes damit berechnen will.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  4. #44
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.06.2007
    Ort
    zwischen Hannover und Hildesheim
    Alter
    33
    Beiträge
    135
    Ist die Angabe der Frequenz für _delay_ms(50) wichtig? Die Funktion muss ja irgendwie wissen, wann 50ms rum sind, oder geht das automatisch?

  5. #45
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Sagmal liest Du auch alles was man Dir sagt ?
    Irgendwie macht es keinen Spaß Leuten helfen zu wollen, die das auch nicht lesen

    O.K. Hier nochmal extra für Dich kopiert
    Ne Du Dumm ist die Frage nicht...
    F_CPU sollte man einstellen,wenn man delay.h benutzt, damit die Zeiten stimmen.
    Aber aufpassen, es stellt nichts am µC um, das muß man schon selber per Fuse einstellen.
    Die Zeilen für Avrdude sind eigentlich dazu da um mit make program den µC zu beschreiben.
    Wenn Du Ponyprog nutzt, kannst Du es ignorieren.
    Software is like s e x: its better when its free.
    Linus Torvald

  6. #46
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.06.2007
    Ort
    zwischen Hannover und Hildesheim
    Alter
    33
    Beiträge
    135
    Oh, das tut mir natürlich Leid.

    Ich probiere gerade soviel wie möglich auf einmal zu verstehen nur manche Begriffe kann ich nicht auf anhieb behalten und in anderen Bereichen wieder anwenden. Und ich bin auch nicht auf die Idee gekommen Bezüge zwischen den beiden Threads herzustellen.

    Aber danke, dass du das nochmal kopiert hast

  7. #47
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.064
    dafür ist eswichtig. so musstdu das nichtselbst ausrechnen, sondern der ccopiler maht es.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

Seite 5 von 5 ErsteErste ... 345

Berechtigungen

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

12V Akku bauen