Nano und Mikrosekunden

OP Persönliche Seite #1557010
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.
Gast #1557023
> 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?
Gast #1557024
> 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.
OP Persönliche Seite #1557041
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)
#1557053
@  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
OP Persönliche Seite #1558485
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.