PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : programmdauer abschätzen



BurningBen
10.02.2009, 21:22
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


#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.

Besserwessi
10.02.2009, 21:50
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.

BurningBen
11.02.2009, 10:39
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.