AVR - Uhrzeit aus 4MHz ableiten?

Gast #27771
Lesenswert?

Benutze Timer1(16Bit): Vorteiler auf 256 stellen(nur der vorteiler 
ergibt gerade Sekunden!!!) Dann den Compare Match auf 15625 setzen. Dann 
bei compare Match Zähler löschen und Interrupt auslösen ==> jede sekunde 
wird ein Interrupt ausgelöst.
So gehts in groben Zügen. Für weiter hilfe solltest du deinen Code 
posten!

Gruß, Florian
Gast #27774
Lesenswert?

Hallo!
Ich habe mal ein kleines Programm erstellt und dieses im AVR-Studio 
getestet.
Ich habe den 16-Bit Timer des 2313 auf folgende Weise initialisiert.
Taktteiler 8
Compare ein.
Ausgang wechseln
Compare-Register auf 3
Zählregister auf 0

Also man kann erkennen, wenn man 8mal auf Step into klickt, dass der 
Timer um eins vorwärts zählt.
Also von 0 auf 1.
Danach klickt man wieder 8mal weiter.
Der Timer springt auf 2.
Danach wieder 8mal.
Der Timer springt auf 3.
Danach wieder 8mal.
Der Timer springt auf 0 und der Ausgang wird beim nächsten Klick 
gewechselt.

Dies bedeutet, dass der Timer erst nach 4Zyklen *8(Teiler) wieder auf 0 
landet und nicht bei 3.

@Florian
Aus diesem Grund musst du anscheinend das Register auf 15624 
initialisieren, damit du 15625 Schritte erhältst.

Korrigiert mich bitte, wenn ich mich irre.

Martin

PS:
Das Programm

Chip type           : AT90S2313
Clock frequency     : 10,000000 MHz
Memory model        : Tiny
External SRAM size  : 0
Data Stack size     : 32
*********************************************/

#include <90s2313.h>

// Declare your global variables here

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

// Input/Output Ports initialization
// Port B initialization
// Func0=In Func1=In Func2=In Func3=Out Func4=In Func5=In Func6=In 
Func7=In
// State0=T State1=T State2=T State3=0 State4=T State5=T State6=T 
State7=T
PORTB=0x00;
DDRB=0x08;

// Port D initialization
// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In
// State0=T State1=T State2=T State3=T State4=T State5=T State6=T
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 1250,000 kHz
// Mode: CTC top=OCR1A
// OC1 output: Toggle
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0x40;
TCCR1B=0x0A;
TCNT1H=0x00;
TCNT1L=0x00;
OCR1H=0x00;
OCR1L=0x03;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
GIMSK=0x00;
MCUCR=0x00;

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

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
// Analog Comparator Output: Off
ACSR=0x80;

while (1)
      {
      // Place your code here
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
            #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
            #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
            #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
            #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
            #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
            #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");
      #asm("NOP");


      };
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren