mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Nano und Mikrosekunden


Autor: Denis X. (lunatix) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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
#define IRQS_PER_SECOND   2000 /* 500 µs */
#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:
#define IRQS_PER_SECOND   1000000 /* 1 µs */
#define IRQS_PER_MS IRQS_PER_SECOUND/1000 /* 1000 IRQs pro milli sec*/
#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?
SIGNAL (SIG_OUTPUT_COMPARE1A){

    static uint32_t interrupt_num0;
    static uint32_t interrupt_num1;


    if (++interrupt_num0 == IRQ_PER_MILLISEC){
        interrupt_num0 = 0;
        msecs++;
    }

    if (++interrupt_num1 == IRQ_PER_MICROSEC){
        interrupt_num1 = 0;
        microsecs++;
    }
}

Ich bin grad etwas Ratlos...

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

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Denis X. (lunatix) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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...)

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Denis X. (lunatix) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.