mikrocontroller.net

Forum: Projekte & Code Zeittakt


Autor: Thomas Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Leute,
ich mache gerade eine C-Programmierung und möchte eine Zeitbasis
von einer Sekunde und wollte fragen wie ihr das macht.
Ich habe einen 4Mhz-Quarz und müßte nach Adam Riese das Ganze in 2
Schleifen a 2000-Zählungen hinbekommen.
In der Simulation macht meine Zeit allerdings Zicken.

Thomas

Autor: emil (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
16 bit timer mit 256 prescaler nehmen, das macht dann 4000000/256=15625;
timer auf interrupt on compare match einstellen und mit 15625 aufladen,
fertig ist der einterrupt jede 1 sec.

Autor: Thomas Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hossa,
erstmal vielen Dank für die schnelle Antwort.
Ich muß zu meiner Schande gestehen,daß ich zwar schon öfter in
C-Programmiert habe aber noch nie so tief ins Detail des AVR gegangen
bin.
Hört sich aber gut an.Die nächsten Tage sind gerettet :-))

Thomas

Autor: emil (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,

dies wäre nur 1 von tausend möglichkeiten, dafür aber leicht zu
begreifen und exakt; hier ein code-beispiel für atmega8 mit 4mhz in
codevision:



#include <mega8.h>

// Timer 1 output compare A interrupt service routine
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{

TCNT1H=0x00;
TCNT1L=0x00;
// Place your code here

}

// Declare your global variables here

void main(void)
{
// Declare your local variables here



// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 15,625 kHz
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0x00;
TCCR1B=0x04;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x3D;
OCR1AL=0x09;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x10;


// Global enable interrupts
#asm("sei")

while (1)
      {
      // Place your code here

      };
}

Autor: rico (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi emil,

fehlt da nicht noch ein Halt am ende der whileschleife???
sonst würde doch ständig der code in der whileschleife abgearbeitet...
oder noch ne whileschleife in der du eine Variable abfragst die im
timerinterrupt gesetzt/löscht wird

(P.S.: würde mich auch mal interresieren wie die Haltbefehle
funktionieren ;o))

bye Rico

Autor: emil (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,

als erstes: das so angeführte beispiel ist natürlich relativ sinnlos;
es würde zwar funktionieren und jede sekunde ein interrupt erzeugen,
aber mehr nichts

und zweitens: es gibt eine paar sehr gute anleitungungen hier unter
"artikel" und "avr-tutorial", die sich auf c-programmierung für
atmels beziehen, die sind sehr empfehlenswert und ähnliche fragen
werden dort ausführlich behandelt

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Drittens: das hier ist die Codesammlung !
Soll heissen: hier sollen Codefragmente oder ganze Programme
veröffentlicht werden.

Alle anderen Foren sind zum Fragen da ;)

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.