Forum: Mikrocontroller und Digitale Elektronik Nano und Mikrosekunden


von Denis X. (lunatix) Benutzerseite


Lesenswert?

Hi!

Ich bin gerade etwas überfordert mit meinem 16bit Timer ohne PWM:

Ich wollte eigentlich nur Mikro und/oder Nanosekunden anzeigen/messen
können. Den Timer habe ich vor längerem mal durch ein Tutorial
aufgebaut, und habe ihn schon des öfteren mal eingesetzt, hier das
Tutorial:

http://www.rn-wissen.de/index.php/Hallo_Welt_f%C3%...)

Ich hab das ganze natürlich etwas umgebaut, und kann prima Millisekunden
vom Systemstart an anzeigen. Jetzt dachte ich mir, wenn Millisekunden
über
1
#define IRQS_PER_SECOND   2000 /* 500 µs */
2
#define IRQS_PER_MS IRQS_PER_SECOUND/1000 /* 2IRQs pro ms*/

berechnen kann, müsste man nur die IRQS pro Sekunde erhöhen (damit beim
teilen keine Kommazahl rauskommt) und das ganze "/1000/1000" rechnen:
1
#define IRQS_PER_SECOND   1000000 /* 1 µs */
2
#define IRQS_PER_MS IRQS_PER_SECOUND/1000 /* 1000 IRQs pro milli sec*/
3
#define IRQS_PER_MS IRQS_PER_SECOUND/1000 /* 1 IRQ pro mikro sec*/

Leider sind die Milliskunden jetzt extrem Langsam - was vorher eine
Sekunde war, sind jetzt sozusagen 10 (kein genauer Wert).

Nun, jetzt kann ich mir leider nicht erklähren, warum das ganze
Langsamer wird - kann es sein das durch Hochzählen der Variable
interrupt_num0 das Programm verlangsamt wird?
1
SIGNAL (SIG_OUTPUT_COMPARE1A){
2
3
    static uint32_t interrupt_num0;
4
    static uint32_t interrupt_num1;
5
6
7
    if (++interrupt_num0 == IRQ_PER_MILLISEC){
8
        interrupt_num0 = 0;
9
        msecs++;
10
    }
11
12
    if (++interrupt_num1 == IRQ_PER_MICROSEC){
13
        interrupt_num1 = 0;
14
        microsecs++;
15
    }
16
}

Ich bin grad etwas Ratlos...

Edit: Ich habe einen ATMega16-16 auf 8Mhz auf meinem Steckbrett.

von Rolf Magnus (Gast)


Lesenswert?

> Leider sind die Milliskunden jetzt extrem Langsam - was vorher eine
> Sekunde war, sind jetzt sozusagen 10 (kein genauer Wert).

Hast du denn auch die Timerfrequenz umgestellt oder nur die Basis der 
Berechnung? Und kann der Prozessor, den du verwendest (welcher 
eigentlich?) überhaupt mit so hoher Interrupt-Last umgehen?

von Rolf Magnus (Gast)


Lesenswert?

> Edit: Ich habe einen ATMega16-16 auf 8Mhz auf meinem Steckbrett.

8 Mhz? Da würden pro Interrupt ja gerade mal 8 Taktzyklen übrigbleiben. 
Damit ist der Prozessor hoffnungslos überlastet.

von Denis X. (lunatix) Benutzerseite


Lesenswert?

Stimmt... vorher blieben 4000 Übrig... das erklährt einiges. Mein Plan 
war, ein BAS Signal für den TV zu erzeugen - und das ohne SPI. Aber dann 
werd ich das wohl anders lösen müssen... oder auch nicht - mir fällt 
grad auf, das ich anstatt Taktzyklen zu zählen auch einfach Taktzyklen 
schlafen kann. Was dann 8 Zyklen währen, um 1 Mikrosekunde zu warten xD

Da war ich wohl etwas fehlgeleitet - sorry!

(BAS Signal: 
http://upload.wikimedia.org/wikipedia/commons/f/fb/BAS_Zeilensignal_unmoduliert.PNG)

von Falk B. (falk)


Lesenswert?

@  Denis Germ (lunatix) Benutzerseite

>war, ein BAS Signal für den TV zu erzeugen - und das ohne SPI.

Und warum? Ist dir der Mt. Everest zu niedrig? Versuch denn mal mit 
Bleischuhen zu besteigen ;-)

>schlafen kann. Was dann 8 Zyklen währen, um 1 Mikrosekunde zu warten xD

Und DU willst ein BAS-Signal per Software erzeugen? Schon mal was von 
NOP gehört?

Mach es lieber so.

Beitrag "AVR ASCII Video Terminal  - 40 x 25  - BAS Signal"
Beitrag "ATmega8 erzeugt Video in C!"
Beitrag "Video Erzeugung mit LPC213x in C"

MFG
Falk

von Denis X. (lunatix) Benutzerseite


Lesenswert?

Ja, wollte ;)

Ich programmiere nun seit über 7 Jahren (versch. Sprachen) und habe in 
diesen Jahren immer den Grundsatz gehabt - damit ich sagen kann "Hab ich 
selbst gemacht/rausgefunden" muss ich mir auch alles selbst 
zusammensuchen und bauen.

Hat, als ich noch Spiele/Anwendugnen programmierte super geklappt, die 
mikrocontroller sind allerdings doch noch ein wenig komplizierter...und 
leider ist man irgendwann einfach etwas demotiviert und merkt nicht, das 
man da doch irgendwie auf dem Holzweg ist - bzw. will mans nicht 
wahrhaben, denn dann wäre ja alles bisher gemachte umsonst gewesen...

Naja, ich denke ich werde nun einfach erstmal eines der Beispiele 
austesten... und mir nen anderen Programmer kaufen, denn das kommt 
erschwehrend hinzu - über AVRDude mit USBasp geschrieben, es gibt nen 
Fehler und plopp funktioniert nichts mehr. Aber das gehört nicht 
hierher ;)

Grüße, Denis

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.