-         

Ergebnis 1 bis 3 von 3

Thema: programmdauer abschätzen

  1. #1
    Erfahrener Benutzer Roboter Genie Avatar von BurningBen
    Registriert seit
    02.09.2008
    Ort
    Darmstadt
    Alter
    26
    Beiträge
    842

    programmdauer abschätzen

    Anzeige

    Hi,
    ich habe hier zum ersten mal was mit Interrupts produziert.

    ich hab den Code auch schon im AVR-Studio simuliert, da funktioniert soweit alles.

    Bei Interrupts ist ja die Geschwindigkeit sehr wichtig, und deshalb wollte ich fragen, ob mir jemand sagen kann, wielange meine interrupt routine wohl etwa braucht. Oder ob es eine möglichkeit gibt, die Zeit auch zu simulieren.

    Ablaufen soll das Programm auf nem ATtiny2313 mit 16MHz

    Code:
    #include <avr/io.h>
    #include <avr/interrupt.h>
    volatile uint8_t phase; 
    
    ISR(INT0_vect) 
    {
    	if (PIND & (1<<PIND3)) {
    		phase++;
    	} else {
    		phase--;
    	}
    }
    
    int main (void) {
    	DDRD = 0x00; //Alle D's als eingänge
    	DDRB = (1<<PB0) | (1<<PB1) | (1<<PB2) | (1<<PB3);
    	phase = 1;
    
    	MCUCR |= (1<<ISC01) | (0<<ISC00);	//INT0 löst bei fallender Flanke aus.
    										//für steigende Flanke: 11 statt 10
    	
    	GIMSK |= (1<<INT0);					//Enable INT0
    	sei();
    
    	while (1) {
    		switch (phase) {
    			case 0: phase = 4; PORTB = (1<<PB3); break;
    			case 1: PORTB = (1<<PB0); break;
    			case 2: PORTB = (1<<PB1); break;
    			case 3: PORTB = (1<<PB2); break;
    			case 4: PORTB = (1<<PB3); break;
    			case 5: phase = 1; PORTB = (1<<PB0); break;
    		}
    	}
    
    	return 0;
    }
    Herzlichen Dank,
    Benjamin

    PS: Falls noch ein Fehler im Code ist, bitte sagen.

  2. #2
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Man kann das Programm mit AVRstudio auch simulieren. Bei läuft auch eine "Uhr" mit. Man kann also genau sehen wieviele Zyklen der Code Braucht. Das Beispiel ist noch sehr einfach, da würde es auch reichen sich dsa xxx.lss file Anzusehen und aus der Zeit je Befehl die länge auszurechenen/bestimmen.
    Als groben Überschalg würde ich mal mit etwa 30 Zyklen oder rund 2 µs für die ISR rechnen. Das meiste sollte das retten der Register brauchen. ängt aber auch von der Optimierung ab.

    Im Programm müßte man eventuell noch vorsehen das phase sich so schnell ändert, das man doch mal versehentlich auf 255 oder 6 kommt.

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von BurningBen
    Registriert seit
    02.09.2008
    Ort
    Darmstadt
    Alter
    26
    Beiträge
    842
    ok, vielen dank.
    Dann schau ich mir den simulator im studio noch etwas genauer an.

    Das mit den anderen Werten werde ich dann noch anpassen.

Berechtigungen

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