Autor Thema: Taktquelle für Timer0 (PIC18F45K22)  (Gelesen 15233 mal)

Offline Austrianer

  • Newbie
  • *
  • Beiträge: 30
    • Profil anzeigen
Taktquelle für Timer0 (PIC18F45K22)
« am: Februar 28, 2012, 08:14:41 Vormittag »
Guten Morgen,

wie kann ich den Internal Oscillator (z.B.: LF-31.25 kHz) als Taktquelle für den Timer0 (PIC18F45K22) einstellen?

Welche Bits muss ich dafür im OSCCON-Register (ist dieses Register überhaupt dafür zuständig?) setzen?

Wie bringe ich den Timer0 dazu, diesen Takt auch zu verwenden? T0SE im T0CON-Register zu setzen, wird zu wenig sein oder?

Vielleicht könnt ihr mir die Antwort Schritt für Schritt geben (ich bin noch bei den Anfängern angesiedelt  ;))!?

Vielen DANK!

Offline Stampede

  • Hero Member
  • *****
  • Beiträge: 1026
    • Profil anzeigen
    • PicPlayer.de
Re:Taktquelle für Timer0 (PIC18F45K22)
« Antwort #1 am: Februar 28, 2012, 09:45:22 Vormittag »
Hi,

Zitat
wie kann ich den Internal Oscillator (z.B.: LF-31.25 kHz) als Taktquelle für den Timer0 (PIC18F45K22) einstellen?
Welche Bits muss ich dafür im OSCCON-Register (ist dieses Register überhaupt dafür zuständig?) setzen?
Hängt von deiner Konfig ab. Wenn du den schon als Primary Osc eingestellt hast, garnichts. Andernfalls im OSCCON die SCS Bit (1 & 0) setzen und dann mit den restlichen Bits die Frequenz einstellen.

Zitat
Wie bringe ich den Timer0 dazu, diesen Takt auch zu verwenden? T0SE im T0CON-Register zu setzen, wird zu wenig sein oder?
Der Timer0 nutzt, wenn er nicht gerade auf einen externen Pin triggert, immer den aktuellen Prozessortakt deines PIC. T0SE legt nur die Flanke fest, bei dir muss T0CS auf jeden Fall gleich null sein. Sonst den Timer wie gewünscht im T0CON Register konfigurieren und dann einschalten. Das ist wirklich sehr einfach.

Gruß
Stefan

Offline Austrianer

  • Newbie
  • *
  • Beiträge: 30
    • Profil anzeigen
Re:Taktquelle für Timer0 (PIC18F45K22)
« Antwort #2 am: Februar 28, 2012, 10:54:19 Vormittag »
Wie darf ich 1x verstehen (x = Bit is unknown?)?

Soll ich OSCCON.SCS0 einfach auslassen?

bit 1-0 SCS<1:0>: System Clock Select bit

1x = Internal oscillator block
01 = Secondary (SOSC) oscillator
00 = Primary clock (determined by FOSC<3:0> in CONFIG1H).

Offline Stampede

  • Hero Member
  • *****
  • Beiträge: 1026
    • Profil anzeigen
    • PicPlayer.de
Re:Taktquelle für Timer0 (PIC18F45K22)
« Antwort #3 am: Februar 28, 2012, 11:01:49 Vormittag »
Hi,

in diesem Falle bedeutet das x dass es egal ist ob das Bit 1 oder 0 ist.
Das steht doch aber auch unmissverständlich im DB...

Gruß
Stefan

Offline Austrianer

  • Newbie
  • *
  • Beiträge: 30
    • Profil anzeigen
Re:Taktquelle für Timer0 (PIC18F45K22)
« Antwort #4 am: Februar 28, 2012, 11:29:02 Vormittag »
Muss ich das OSCCON-, OSCCON2- und OSCTUNE-Register einstellen?

Bitte habe Gedult für meine vielleicht blöd klingenden Fragen, aber ich habe noch sehr wenig überblick!?
« Letzte Änderung: Februar 28, 2012, 11:33:14 Vormittag von Austrianer »

Offline Stampede

  • Hero Member
  • *****
  • Beiträge: 1026
    • Profil anzeigen
    • PicPlayer.de
Re:Taktquelle für Timer0 (PIC18F45K22)
« Antwort #5 am: Februar 28, 2012, 11:38:51 Vormittag »
Hallo,

Zitat
Muss ich das OSCCON-, OSCCON2- und OSCTUNE-Register einstellen?
Ja.

Gruß
Stefan

Offline Austrianer

  • Newbie
  • *
  • Beiträge: 30
    • Profil anzeigen
Re:Taktquelle für Timer0 (PIC18F45K22)
« Antwort #6 am: Februar 28, 2012, 13:11:08 Nachmittag »
Ich habe folgendes Demoprogramm gebastelt (Internal Oscillator; LFINTOSC 31,25kHz).

Die LED's am PORTC blinken jetzt im Intervall (ca. 33 Sekunden).


void main(void)
{
 ANSELC=0x00;
 TRISC=0x00;
 LATC=0xFF;
 
 OSCCON.SCS0=1;
 OSCCON.SCS1=1;
 OSCCON.IRCF0=0;
 OSCCON.IRCF1=0;
 OSCCON.IRCF2=0;
 OSCCON.OSTS=0;
 
 OSCTUNE.INTSRC=0;
 
 T0CON.TMR0ON=1;
 T0CON.T08BIT=0;
 T0CON.T0CS=0;
 T0CON.T0SE=0;
 T0CON.PSA=0;
 T0CON.T0PS0=1;
 T0CON.T0PS1=0;
 T0CON.T0PS2=0;
 
 while(1)
 {
  if(INTCON.TMR0IF==1)
  {
   LATC=~LATC;
   INTCON.TMR0IF=0;
  }
 }
}



Offline Stampede

  • Hero Member
  • *****
  • Beiträge: 1026
    • Profil anzeigen
    • PicPlayer.de
Re:Taktquelle für Timer0 (PIC18F45K22)
« Antwort #7 am: Februar 28, 2012, 17:42:55 Nachmittag »
Hi,

ich sehe gerade du hast den ganzen Käse ja schon vor 2 Tagen hier gepostet:
http://www.mikrocontroller.net/topic/250179

Zitat
Die LED's am PORTC blinken jetzt im Intervall (ca. 33 Sekunden).
Was auch richtig ist, du hast den Timer / Controller so programmiert dass genau das passieren soll. Ob das nun gewollt ist oder nicht, das weißt nur du...

Gruß
Stefan

Offline Austrianer

  • Newbie
  • *
  • Beiträge: 30
    • Profil anzeigen
Re:Taktquelle für Timer0 (PIC18F45K22)
« Antwort #8 am: Februar 28, 2012, 22:21:00 Nachmittag »
Ich finde nicht, dass das eine Käse ist.  ;)

Ja, das war gewollt.

Danke!

Offline Stampede

  • Hero Member
  • *****
  • Beiträge: 1026
    • Profil anzeigen
    • PicPlayer.de
Re:Taktquelle für Timer0 (PIC18F45K22)
« Antwort #9 am: Februar 29, 2012, 09:34:49 Vormittag »
Hi,

Zitat
Ja, das war gewollt.
Gut. Dann können ja jetzt weitere Fragen folgen.

Gruß
Stefan

Offline Austrianer

  • Newbie
  • *
  • Beiträge: 30
    • Profil anzeigen
Re:Taktquelle für Timer0 (PIC18F45K22)
« Antwort #10 am: Februar 29, 2012, 13:13:55 Nachmittag »
Kann ich die Zeit des Überlaufs (Timer0/8-Bit-Zähler) steuern, damit das Bit TMR0IF nach einer gewünschten Zeit gesetzt wird (z.B. 50ms, 100ms, ... max 255ms)?

Kann man den PIC-Takt so einstellen (Teiler, Vorteiler, ...), dass dieser 1Takt/1ms beträgt?

Ich habe bei meiner Überlgegung die Toleranzen nicht bedacht!

Dann könnte man, den 8-Bit-Zähler zum Zählen der ms bis zu Überlauf und somit zum setzen des Bit TMR0IF verwenden oder (z.B. wenn 100ms bis zum Überlauf gewünscht --> der 8-Bit-Zähler beendet die Zählung bei 100 --> nach 100 Takten (100ms) läuft der Zähler über)?  

--> Ich glaube, meine Überlegung ist der falsche Ansatz.  :-\
« Letzte Änderung: Februar 29, 2012, 13:46:40 Nachmittag von Austrianer »

Offline Austrianer

  • Newbie
  • *
  • Beiträge: 30
    • Profil anzeigen
Re:Taktquelle für Timer0 (PIC18F45K22)
« Antwort #11 am: Februar 29, 2012, 23:17:24 Nachmittag »
Keiner im Forum, der mir bei meinem Problem helfen kann?  :-\

Offline Stampede

  • Hero Member
  • *****
  • Beiträge: 1026
    • Profil anzeigen
    • PicPlayer.de
Re:Taktquelle für Timer0 (PIC18F45K22)
« Antwort #12 am: März 01, 2012, 11:28:34 Vormittag »
Hallo,

Zitat
Kann ich die Zeit des Überlaufs (Timer0/8-Bit-Zähler) steuern, damit das Bit TMR0IF nach einer gewünschten Zeit gesetzt wird (z.B. 50ms, 100ms, ... max 255ms)?
Du hast dir die Antwort weiter unten fast schon selbst gegeben. Du musst den Timer mit einem Wert vorladen: Im 16 Bit Modus dauert es 32768 Takte (ohne Prescaler), wenn du den Timer mit 20000 vorlädst (TMR0 Register) dann dauert es eben nur 2768 Takte.

Zitat
Kann man den PIC-Takt so einstellen (Teiler, Vorteiler, ...), dass dieser 1Takt/1ms beträgt?
PIC Takt? Der Langsamste Oszillator ist 31.25kHz,

Zitat
Ich habe bei meiner Überlgegung die Toleranzen nicht bedacht!
Der interne Oszillator ist von der Genauigkiet nicht toll, aber noch ok. Der interne RC Oszi ist dagegen richtig bescheiden.


Gruß
Stefan

Offline Edson

  • Sr. Member
  • ****
  • Beiträge: 410
    • Profil anzeigen
Re:Taktquelle für Timer0 (PIC18F45K22)
« Antwort #13 am: März 01, 2012, 12:46:17 Nachmittag »
Hallo Austrianer,

wer hat denn diese Aufgabe formuliert? Ich erkenne da einige Ungereimtheiten.

Erst steht da, es wird eine Eingabe in Mikrosekunden verlangt. Im Prototypen wird dann aber das Suffix "_ms", allgemein als Abkürzung für Millisekunden bekannt, verwendet. Eine Angabe von Millisekunden macht im Kontext auch wesentlich mehr Sinn, davon abgesehen.

Grausam ist, dass der Taster am Interrupt-Eingang betrieben werden soll. Das ist schlechte Praxis, ein prellender Taster kostet dann extrem viel CPU-Zeit, weil dauernd Interrupts ausgelöst werden. Entprellung per Wartezeit innerhalb der ISR ist ebenso schlecht, kostet sogar noch mehr CPU-Zeit, in der das eigentliche Hauptprogramm blockiert ist.

Habs gestern erst in einem anderen Forum geschrieben und zitiere mich mal selbst:
Zitat
Tasten kommen an einen einfachen Portpin, in einer Timer-ISR können dann
Abfrage und Entprellung vorgenommen werden. Der entprellte Signalzustand
wird über das RAM ans Hauptprogramm gegeben. Ganz einfach.

Schlag das mal dort vor, wo du diesen ominösen Zettel bekommen hast. Der "mögliche Treiber" ist nämlich ein Witz vor dem Herrn. Was hat der Ersteller wohl gedacht, was in der Zeile mit dem while(1) passiert? Ich sage, nicht mal eine einfache Blinkfunktion wird so funktionieren.

Gruß,
Edson

Offline Austrianer

  • Newbie
  • *
  • Beiträge: 30
    • Profil anzeigen
Re:Taktquelle für Timer0 (PIC18F45K22)
« Antwort #14 am: März 01, 2012, 12:50:17 Nachmittag »
Das heißt, ich kann die geforderte Umsetzung nicht durchführen!?

 


* Recent Topics