- Labornetzteil AliExpress         
Seite 4 von 6 ErsteErste ... 23456 LetzteLetzte
Ergebnis 31 bis 40 von 56

Thema: Fuse-Bits (Mega 32)

  1. #31
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Anzeige

    Powerstation Test
    Du stellst den Timer auf z.B. 10msec, zählst bis 10 mit und löst dann deine Aktion aus.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  2. #32
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    04.03.2010
    Beiträge
    205
    sorry,
    aber ich habe keine ahnung wie das Programm dafür aussehen muss.
    Ich schreibe in C auf einen Mega32. Kannst du bitte das Grundgerüst, was du eben erklärt hast als Code hier reinstellen.
    Danke!
    Nichts existiert durch sich allein!
    Bild hier  

  3. #33
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Code:
    #include <avr/io.h>
    #include <avr/interrupt.h>
    
    volatile unsigned char time;
    
    ISR(TIMER1_COMPA_vect){		/* ISR Timer1 Output Compare Match */
    time++;						/* Variable wird um 1 erhöht */
    }
    
    
    
    int main(void){
    
    DDRD=0xff;					/* Gesamtes PortD ist Ausgang */
    OCR1A=625;					/* Compare Match Wert, ergibt mit Prescaler einen 10msec Takt */
    TIMSK=(1<<OCIE1A);			/* Compare Match freigeben */
    TCCR1B= (1<<WGM12)|(1<<CS12);	/* Compare Match, Prescaler /256 */
    
    sei();
    
    for(;;){
    if (time>=100){				/* Takt mal 100 ergibt 1sec */
    	PORTD^=(1<<PD5);		/* PortD5 wird getoggled */
    	time=0;					/* time auf 0 stellen */
    	}
    }
    }
    Das ergibt ein blinken einer Led an PD5 im Sekundentakt.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  4. #34
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    04.03.2010
    Beiträge
    205
    Danke für deine Antwor!
    Ich habe das Prinzip verstanden, aber ich verstehe nicht was Compare Match bedeutet und was es bewirkt. Der Prescaler ist doch der Teilungsfaktor?! Ich habe nur nach nicht verstanden wie ich den festlege. Könntest du das bitte mal an dem Beispiel für Prescaler 16 erklären?
    Das wäre wirklich super.
    Nichts existiert durch sich allein!
    Bild hier  

  5. #35
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Einen Prescaler 16 gibt es nicht. Der Prescler wird im Register TCCR1B ausgewählt. Schau dazu ins Datenblatt Seite 108.
    Compare Match bedeutet das der Timer nicht bis ans Ende, also 65535 zählt, sondern nur bis zu dem im Register OCR1A angegebenen Wert. Dann löst er den Interrupt aus und beginnt er wieder von 0.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  6. #36
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    04.03.2010
    Beiträge
    205
    Also kann ich den Prescaler nur auf 1, 8, 64, 256, oder 1024 festlegen?
    Gibt es auch noch eine andere Schreibweise als (1<<WGM12)|(1<<CS12); Das sieht so kompliziert aus. Wie würde TCCR1B bei einem Prescaler von 64 aussehen? Oder gibts irgendwo eine Tabelle in der man das nachlese kann? Im Datenblatt habe ich nichts gefunden.
    Nichts existiert durch sich allein!
    Bild hier  

  7. #37
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.654
    Zitat Zitat von Mc Delta
    ... gibts irgendwo eine Tabelle ... Im Datenblatt habe ich nichts gefunden ...
    Welches Datenblatt hast Du denn??? Im 8155A–AVR–06/08, das ist in meinen Unterlagen das Neueste zum m32, steht z.B. auf Seite 114 Table 16-5. Waveform Generation Mode Bit Description und gleich drunter sind die Bits für das TCCR1B genau und ausführlich beschrieben. Gleich danach, auf S 116 sind in Table 16-6. Clock Select Bit Description die Prescaler exakt aufgelistet . . . .
    Ciao sagt der JoeamBerg

  8. #38
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    04.03.2010
    Beiträge
    205
    Ich hatte tatsächlich ein anderes Datenblatt. (Mega 32L) Jetzt habe ich mir das von Mega 32 A runtergeladen und die von dir Beschriebene Tabelle gefunden.
    Danke!
    Nichts existiert durch sich allein!
    Bild hier  

  9. #39
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    04.03.2010
    Beiträge
    205
    CS12 CS11 CS10 Description
    0____0____0____No clock source (Timer/Counter stopped).
    0____0____1____clkI/O/1 (No prescaling)
    0____1____0____clkI/O/8 (From prescaler)
    0____1____1____clkI/O/64 (From prescaler)
    1____0____0____clkI/O/256 (From prescaler)
    1____0____1____clkI/O/1024 (From prescaler)
    1____1____0____External clock source on T1 pin. Clock on falling edge.
    1____1____1____External clock source on T1 pin. Clock on rising edge.
    Nichts existiert durch sich allein!
    Bild hier  

  10. #40
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    04.03.2010
    Beiträge
    205
    Hallo nochmal,
    Ich habe den Code von Hubert weitgehend übernommen und in den M32 geladen, doch es leuchtet nicht eine einzige LED. was kann ich machen? Findet vielleicht einer von euch irgendeinen Fehler?
    Code:
    #ifndef MCU             
    #define MCU  atmega32
    #endif
    
    #ifndef F_CPU           
    #define F_CPU 16000000UL 
    #endif
    #include <avr/io.h> 
    #include <avr/interrupt.h> 
    
    volatile unsigned char time; 
    
    ISR(TIMER1_COMPA_vect){      /* ISR Timer1 Output Compare Match */ 
    time++;                  /* Variable wird um 1 erhöht */ 
    } 
    
    
    
    int main(void){ 
    
    DDRC=0b11111111;               /* Gesamtes PortD ist Ausgang */ 
    OCR1A=625;               /* Compare Match Wert, ergibt mit Prescaler einen 10msec Takt */ 
    TIMSK=(1<<OCIE1A);         /* Compare Match freigeben */ 
    TCCR1B= (1<<WGM12)|(1<<CS12);   /* Compare Match, Prescaler /256 */ 
    sei(); 
    
    while(1)
    { 
    if (time>=100)
       {            /* Takt mal 100 ergibt 1sec */ 
        PORTC=0b11111111;      /* PortD5 wird getoggled */ 
        time=0;               /* time auf 0 stellen */ 
       } 
    } 
    }
    PS: Es wurden auch keine Errors angezigt.
    Nichts existiert durch sich allein!
    Bild hier  

Seite 4 von 6 ErsteErste ... 23456 LetzteLetzte

Berechtigungen

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

12V Akku bauen