Forum: Mikrocontroller und Digitale Elektronik PIC18: Timer0 Konfiguration


von PIC (Gast)


Lesenswert?

Hallo PICler,
1
//T0CONbits.T08BIT = 0;   // bit 6
2
//T0CONbits.T0CS = 0;     // bit 5
3
//T0CONbits.T0SE = 0;     // bit 4
4
//T0CONbits.PSA = 0;      // bit 3
5
//T0CONbits.T0PS3 = 3;    // bits 2-0
6
//T0CONbits.TMR0ON = 1;   // bit 7
7
T0CON = 0x83;

wenn ich T0CON direkt mit 0x83 lade, läuft die Anwendung wie geplant.
Setze ich die bits einzeln, funkioniert es nicht.

Habe debugger angeworfen und siehe da, beim steppen wird PSA zwar
auf 0 gesetzt, springt aber später wieder auf 1. Sprich, Prescaler
wird nicht dem Timer0 zugewiesen. Was läuft da falsch?
Im Datenblatt habe ich keinen Hinweis auf richtiges Setzen gefunden.
Bin etwas baff. Hoffe ihr könnt mir helfen. Es geht jetzt zwar,
aber ich nutze diese Register.Bit Zugriffe auch an anderen Stellen.
Compiler ist übrigens mcc18.

Grüße

von PIC (Gast)


Lesenswert?

ich hole nochmal den Thread hoch.

Hat niemand Erfahrung mit mcc18?
Eventuell ist das auch eine PIC Eigenheit, die mit dem Compiler
erst einmal wenig zu tun hat? Ich denke PIC user gibt es hier doch viele 
;-)

von Holger W. (holgerw)


Lesenswert?

//T0CONbits.T0PS3 = 3;    // bits 2-0

T0PS3 haut mir der C18 um die Ohren, setze die Bits doch auch mal 
einzeln.

Holger

von Chris B. (dekatz)


Lesenswert?

Oder schreibe T0CONbits.T0PS = 3; - das funkteoniert auch.

von Michael S. (rbs_phoenix)


Lesenswert?

Es gibt nur T0PS0, T0PS1 und T0PS2. T0PS3 gibt es (zumindest beim 
PIC18F4550) nicht. Würde es dieses geben, würdest du dadurch aber auf 
ein BIT zugreifen, jedoch ist 3 -> 11 binär und somit 2 bit groß.

Bei deiner oberen Methode setzt du jedes Bit einzeln. Es ist evtl 
übersichtlicher oder schneller ersichtlich, was eingestellt wird, jedoch 
find ich persönlicher die 2. Variante (also das komplette Byte in eins 
schreiben) besser, da weniger Platz verbraucht wird und man in den 
Kommentaren beschreiben kann, was man eingestellt hat.

Je nach Kompiler kann es auch sein, dass er bei der Einzelbit-Variante 
in Assembler 8 bsf/bcf nimmt und bei dem anderen nur ein movlw und 
movwf, somit nur 2 befehle statt 8 nimmt.

von PIC (Gast)


Lesenswert?

Ich denke ihr habt recht! Werde es mir nacher genauer anschauen.
Wenn PSA direkt über T0PS3 sitzt, erklärt es warum PSA abgeschaltet hat.

von Michael S. (rbs_phoenix)


Lesenswert?

PIC schrieb im Beitrag #2829222:
> Wenn PSA direkt über T0PS3 sitzt, erklärt es warum PSA abgeschaltet hat.

Tut es aber nicht, da es im Datenblatt kein T0PS3 gibt, also kann auch 
nichts darüber sein. Laut holger ist es das gleiche, zumindest beim 
mcc18 compiler, aber drüber ist es sicher nicht.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.