Autor Thema: Uhrenquarz und Timer1  (Gelesen 8235 mal)

NixieFreak

  • Gast
Uhrenquarz und Timer1
« am: März 30, 2011, 12:26:35 Nachmittag »
Hallo Leute,

ich habe diese Frage schon auf mikrocontroller.net gestellt, aber dort ist erfahrungsgemäß eher die AVR-Fraktion unterwegs, ich denke ihr wisst da mehr.

Ich baue gerade mit dem PIC16F27A eine kleine Uhr mit 10 LEDs, die über zwei CD4094 angesteuert werden. Versorgung über ein 5V Steckernetzteil (hinreichend gut geregelt).

Die Uhr soll nun batteriegepuffert sein, und mir wurde nahegelegt, das mit dem Timer1 und einem 32kHz Uhrenquarz zu versuchen. Also gut.

Ich habe den Quarz an RB6 und RB7 mit 15pF-Kondensatoren gegen GND angeschlossen, keine Widerstände benutzt, und im Code den Timer so initialisiert:

// einschalten
TMR1ON = 1;

// Vorteiler auf 1:8
T1CKPS0 = 0b1;
T1CKPS1 = 0b1;

// arbeite als Timer und NICHT als Counter
TMR1CS = 0;

// verwende externen Takt von RB6, RB7
T1OSCEN = 0b1;

// erzwinge Interrupt
TMR1IE = 0b1;

// global Interrupts aktivieren
GIE = 0b1;

Ansonsten nutze ich im Code noch Software-PWM (das aber unabhängig vom
Timer1 ist, und ein paar Zeilen weiter oben initialisiert wird).

Meine ISR sieht so aus:

void interrupt isr (void) {

  if (TMR1IF) {
    t++;
    if (t >= 4096) {
        t = 0;
        Sekunden++;
    }
    TMR1IF = 0;
  }

}

Aber nix passiert. Die ISR wird nicht aufgerufen. Habe testweise die Variable Sekunden in der Main über einen Taster erhöht, und da funktionierte es. Wenn die Initialisierung OK ist (ist sie?) liegt es wohl daran, dass der Uhrenquarz nicht schwingt. Was könnte ich da tun?

Gruß
Jens

Offline Bernd

  • Hero Member
  • *****
  • Beiträge: 3820
    • Profil anzeigen
Re:Uhrenquarz und Timer1
« Antwort #1 am: März 30, 2011, 16:19:03 Nachmittag »
  • PEIE muß auch gesetzt werden (T1 Interrupt gehört zu den „peripheral interrupts“)
  • TMR1CS = 0 bedeutet, daß der interne Takt verwendet wird, nicht der vom Quarz
  • sicherheitshalber den Timer erst dann einschalten, wenn er konfiguriert ist

Viele Grüße

Bernd

NixieFreak

  • Gast
Re:Uhrenquarz und Timer1
« Antwort #2 am: März 30, 2011, 17:16:02 Nachmittag »
Hallo Bernd,

ach mensch, ich danke dir! Das mit dem PEIE hatte ich total übersehen.

Ich werde es heute abend mal austesten und dann Rückmeldung geben.

Gruß
Jens

NixieFreak

  • Gast
Re:Uhrenquarz und Timer1
« Antwort #3 am: März 30, 2011, 17:46:35 Nachmittag »
Juhuuuu! Es klappt! Tausendmal danke an dich, Bernd!

Ich habe nun endlich ein anwendungsbezogenes Problem. Der PIC soll im Sleep-Mode weiterzählen, aber der Timer1 zählt ja automatisch bis 256*256. Das gibt mir bei 1:1 Prescaling 0.5Hz. Kann ich dem Timer1 sagen, dass er nur bis 128*256 zählen soll?

Gruß
Jens

Offline Bernd

  • Hero Member
  • *****
  • Beiträge: 3820
    • Profil anzeigen
Re:Uhrenquarz und Timer1
« Antwort #4 am: März 30, 2011, 21:31:51 Nachmittag »
Hallo Jens,

Zitat
Kann ich dem Timer1 sagen, dass er nur bis 128*256 zählen soll?

nicht direkt, aber indirekt. Du kannst den Timerwert in der ISR einfach so anpassen, daß der Überlauf schon nach 1s auftritt.

TMR1H |= 0x80;
Für die Verwendung von Timer 1 als RTC außerdem noch wichtig:

  • Timer 1 Module Data Sheet Errata
  • der externe Takt darf nicht mit dem internen Takt synchronisiert werden, da im Sleep-Modus kein interner Takt vorhanden ist (d.h. das Bit T1SYNC im T1CON-Register muß gesetzt werden)


Viele Grüße

Bernd

Offline Stampede

  • Hero Member
  • *****
  • Beiträge: 1026
    • Profil anzeigen
    • PicPlayer.de
Re:Uhrenquarz und Timer1
« Antwort #5 am: März 31, 2011, 01:02:48 Vormittag »
Moin,

kleine Frage am Rande: Welcher Compiler nutzt diese Syntax?

[...]
// erzwinge Interrupt
TMR1IE = 0b1;

// global Interrupts aktivieren
GIE = 0b1;
Das sind ja erst mal nur Bits, keine Registerinfos. Der C18 kann nicht sein :)

Gruss,
Stefan

NixieFreak

  • Gast
Re:Uhrenquarz und Timer1
« Antwort #6 am: März 31, 2011, 14:36:39 Nachmittag »
Bernd,

der T1SYNC-Tip hat's gebracht. Hatte ich zwar auch im DB gelesen, aber irgendwie vergessen ;-) Danke für deine Hilfe!

@Stefan: Ich nutze den HI-TECH Compiler.

Gruß
Jens

 


* Recent Topics