ustawienie timera w PIC18F1320



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "Jacek M." <tymkonto_at_nospam_poczta.onet.pl>
Subject: ustawienie timera w PIC18F1320
Date: Tue, 27 Dec 2005 10:35:12 +0100


Witam.
Mam problem z ustawieniem timera0 w tym mikrokontrolerze. Chcialem by
generowal on przerwania co ok. 400us a obserwowane na oscyloskopie ok. 10ms.
Mikrokontroler pracuje z oscylatorem wewnetrznym "INT RC-CLKOUT on RA6, Port
on RA7". Tak jest ten tryb sygnalizowany w MPLAB. Przy ustawieniu drugiego
trybu wewnetrznego generuje on podobnie. Pisze program na niego w jezyku C
dla studenckiej wersji kompilatora C18. Ustawienia rejestrow
konfiguracyjnych oscylatora:
OSCCONbits.IRCF0=0;
OSCCONbits.IRCF1=1;
OSCCONbits.IRCF2=1;
Ustawienia rejestrow Timer0:
T0CONbits.T0PS0=0;
T0CONbits.T0PS1=0;
T0CONbits.T0PS2=0;
T0CONbits.PSA=1;
T0CONbits.T016BIT=0;
T0CONbits.T0SE=0;
T0CONbits.T0CS=0;
T0CONbits.TMR0ON=1;
I rejestr przerwan:
INTCONbits.T0IF = 0;
INTCONbits.T0IE = 1;
INTCONbits.GIE = 1;

Na poczatku przerwania od T0
TMR0L -= 0x85; // reload
INTCONbits.T0IF = 0;

I na koniec przerwania uruchamiam je na nowo:
INTCONbits.GIE = 1;

Mimo moich staran niestety przerwania timera sa regularnie co 10ms.
Prosze o pomoc.

Jacek M.




Poprzedni Następny
Wiadomość
Spis treści
From: "Jacek M." <tymkonto_at_nospam_poczta.onet.pl>
Subject: Re: ustawienie timera w PIC18F1320
Date: Tue, 27 Dec 2005 14:15:54 +0100


Witam.
Mam problem z ustawieniem timera0 w tym mikrokontrolerze. Chcialem by
generowal on przerwania co ok. 400us a obserwowane na oscyloskopie ok.
10ms. Mikrokontroler pracuje z oscylatorem wewnetrznym "INT RC-CLKOUT on
RA6, Port on RA7". Tak jest ten tryb sygnalizowany w MPLAB. Przy
ustawieniu drugiego trybu wewnetrznego generuje on podobnie. Pisze program
na niego w jezyku C dla studenckiej wersji kompilatora C18. Ustawienia
rejestrow konfiguracyjnych oscylatora:
OSCCONbits.IRCF0=0;
OSCCONbits.IRCF1=1;
OSCCONbits.IRCF2=1;
Ustawienia rejestrow Timer0:
T0CONbits.T0PS0=0;
T0CONbits.T0PS1=0;
T0CONbits.T0PS2=0;
T0CONbits.PSA=1;
T0CONbits.T016BIT=0;
T0CONbits.T0SE=0;
T0CONbits.T0CS=0;
T0CONbits.TMR0ON=1;
I rejestr przerwan:
INTCONbits.T0IF = 0;
INTCONbits.T0IE = 1;
INTCONbits.GIE = 1;

Na poczatku przerwania od T0
TMR0L -= 0x85; // reload
INTCONbits.T0IF = 0;

I na koniec przerwania uruchamiam je na nowo:
INTCONbits.GIE = 1;

Mimo moich staran niestety przerwania timera sa regularnie co 10ms.
Prosze o pomoc.

Jacek M.

Bardzo prosze o pomoc bo gapie sie w ta dokumentacje mikrokontrolera i nie
moge znalezc gdzie popelniam blad.

Jacek M.



Poprzedni Następny
Wiadomość
Spis treści
From: "Jacek M." <tymkonto_at_nospam_poczta.onet.pl>
Subject: Re: ustawienie timera w PIC18F1320
Date: Tue, 27 Dec 2005 15:54:10 +0100


Witam.
Mam problem z ustawieniem timera0 w tym mikrokontrolerze. Chcialem by
generowal on przerwania co ok. 400us a obserwowane na oscyloskopie ok.
10ms. Mikrokontroler pracuje z oscylatorem wewnetrznym "INT RC-CLKOUT on
RA6, Port on RA7". Tak jest ten tryb sygnalizowany w MPLAB. Przy
ustawieniu drugiego trybu wewnetrznego generuje on podobnie. Pisze
program na niego w jezyku C dla studenckiej wersji kompilatora C18.
Ustawienia rejestrow konfiguracyjnych oscylatora:
OSCCONbits.IRCF0=0;
OSCCONbits.IRCF1=1;
OSCCONbits.IRCF2=1;
Ustawienia rejestrow Timer0:
T0CONbits.T0PS0=0;
T0CONbits.T0PS1=0;
T0CONbits.T0PS2=0;
T0CONbits.PSA=1;
T0CONbits.T016BIT=0;
T0CONbits.T0SE=0;
T0CONbits.T0CS=0;
T0CONbits.TMR0ON=1;
I rejestr przerwan:
INTCONbits.T0IF = 0;
INTCONbits.T0IE = 1;
INTCONbits.GIE = 1;

Na poczatku przerwania od T0
TMR0L -= 0x85; // reload
INTCONbits.T0IF = 0;

I na koniec przerwania uruchamiam je na nowo:
INTCONbits.GIE = 1;

Mimo moich staran niestety przerwania timera sa regularnie co 10ms.
Prosze o pomoc.

Jacek M.

Bardzo prosze o pomoc bo gapie sie w ta dokumentacje mikrokontrolera i nie
moge znalezc gdzie popelniam blad.

Jacek M.
Zauwazylem ciekawa rzecz. Uzywam do uruchamiania swoich programow debbugera
ICD2. W trakcie zatrzymywania programu a nastepnie ponownego jego
uruchamiania zmienia mi sie czestotliwosc przebiegu na pinie wystawianego
przez to przerwanie. W trakcie zaistnienia przerwania wystawiam na pin 1 a
przy nastepnym przerwaniu 0. Co prawda mam do dyspozycji prosty oscyloskop i
nie moge do konca byc go pewnym ale teraz juz nie wiem z jakiego powodu tak
jest. Czasem nawet TIMER0 pracuje z zadana czestotliwoscia.
Czy spotkal sie ktos z takim zjawiskiem?

Jacek M.



Poprzedni Następny
Wiadomość
Spis treści
From: "Mariusz.K.\(R2D2\)" <r2d2nospam_at_nospam_enet.pl>
Subject: Re: ustawienie timera w PIC18F1320
Date: Wed, 28 Dec 2005 22:43:55 +0100



Użytkownik "Jacek M." <tymkonto_at_nospam_poczta.onet.pl> napisał w wiadomości
news:dor1sc$lfv$1_at_nospam_news.onet.pl...
Witam.
Mam problem z ustawieniem timera0 w tym mikrokontrolerze. Chcialem by
generowal on przerwania co ok. 400us a obserwowane na oscyloskopie ok.
10ms. Mikrokontroler pracuje z oscylatorem wewnetrznym "INT RC-CLKOUT on
RA6, Port on RA7". Tak jest ten tryb sygnalizowany w MPLAB. Przy
ustawieniu drugiego trybu wewnetrznego generuje on podobnie. Pisze program
na niego w jezyku C dla studenckiej wersji kompilatora C18. Ustawienia
rejestrow konfiguracyjnych oscylatora:
OSCCONbits.IRCF0=0;
OSCCONbits.IRCF1=1;
OSCCONbits.IRCF2=1;
Ustawienia rejestrow Timer0:
T0CONbits.T0PS0=0;
T0CONbits.T0PS1=0;
T0CONbits.T0PS2=0;
T0CONbits.PSA=1;
T0CONbits.T016BIT=0;
T0CONbits.T0SE=0;
T0CONbits.T0CS=0;
T0CONbits.TMR0ON=1;
I rejestr przerwan:
INTCONbits.T0IF = 0;
INTCONbits.T0IE = 1;
INTCONbits.GIE = 1;

Na poczatku przerwania od T0
TMR0L -= 0x85; // reload
INTCONbits.T0IF = 0;

I na koniec przerwania uruchamiam je na nowo:
INTCONbits.GIE = 1;

Mimo moich staran niestety przerwania timera sa regularnie co 10ms.
Prosze o pomoc.


Witam

ustawienia dla 400us powinny byc nastepujace :

konfiguracyjnych oscylatora:
OSCCONbits.IRCF0=0;
OSCCONbits.IRCF1=1;
OSCCONbits.IRCF2=1;
Ustawienia rejestrow Timer0:
T0CONbits.T0PS0=0;
T0CONbits.T0PS1=0;
T0CONbits.T0PS2=0;
T0CONbits.PSA=0; (!!!)
T0CONbits.T08BIT=1; (!!!)
T0CONbits.T0SE=0;
T0CONbits.T0CS=0;
T0CONbits.TMR0ON=1;
I rejestr przerwan:
INTCONbits.T0IF = 0;
INTCONbits.T0IE = 1;
INTCONbits.GIE = 1;

Na KONCU !!! przerwania od T0
TMR0L -= 0xC8; // reload
INTCONbits.T0IF = 0;

I na koniec przerwania uruchamiam je na nowo:
INTCONbits.GIE = 1;



powinno teraz chodzic.. pewne watpliwosci w sformuowaniu przez Pana problemu
pojawily mi sie przy okazji bitu T0CONbits.T016BIT, Faktycznie bit ten
nazywa sie T0CONbits.T08BIT. MAm jednak nadzieje iz przez pomylke wpisal Pan
taka wlasnie jego nazwe, gdyz jego konfiguracja wskazywala na to iz uzywa
Pan trybu 16 bit (a faktycznie przy 4 MHz dl wygenerowania 400 us wystarczy
8bitowy tryb z prescalerem 1:2). Jesli dalej chcialby Pan dociekac dlaczego
uklad zachowal sie tak a nie inaczej prosilbym o dostarczenie mi pliku lst
generowanego przez mcc18 w trakcie kompilacji (byc moze bedzie Pan musial
wlaczyc w MP-LAb opcje wymuszajaca jego generowanie).


Pozdrawiam i zycze sukcesow



Poprzedni Następny
Wiadomość
Spis treści
From: "Jacek M." <tymkonto_at_nospam_poczta.onet.pl>
Subject: Re: ustawienie timera w PIC18F1320
Date: Thu, 29 Dec 2005 18:48:57 +0100


powinno teraz chodzic.. pewne watpliwosci w sformuowaniu przez Pana
problemu pojawily mi sie przy okazji bitu T0CONbits.T016BIT, Faktycznie
bit ten nazywa sie T0CONbits.T08BIT. MAm jednak nadzieje iz przez pomylke
wpisal Pan taka wlasnie jego nazwe, gdyz jego konfiguracja wskazywala na
to iz uzywa Pan trybu 16 bit (a faktycznie przy 4 MHz dl wygenerowania 400
us wystarczy 8bitowy tryb z prescalerem 1:2). Jesli dalej chcialby Pan
dociekac dlaczego uklad zachowal sie tak a nie inaczej prosilbym o
dostarczenie mi pliku lst generowanego przez mcc18 w trakcie kompilacji
(byc moze bedzie Pan musial wlaczyc w MP-LAb opcje wymuszajaca jego
generowanie).

Dzieki za pomoc. Okazalo sie, ze problemem bylo to, ze wpisywalem nastawe w
trakcie przerwania jedynie do mlodszego bajtu timera0. Co prawda wpisywana
wartosc zmiennej uint wynosila 533 ale i tak uaktualnianiu ulegal tylko
mlodszy bajt licznika timera. Teraz mam inny problem. Chce by timer0
odmierzal 133us przy zegarze wewnetrznym ustawionym na 4MHz. Oznacza to, ze
timer powinien byc 16-to bitowy i w trakcie przerwania program powinienem
wpisywac odpowiednie dopelnienia do 0xFF do TMR0L i TMR0H. Oto program
obslugi tego przerwania:

#define PERIOD 533
const uchar PERIOD_L = 0xff - (PERIOD%0xFF), PERIOD_H = 0xff -
(PERIOD/0xFF);

TMR0H = PERIOD_H; // reload H
TMR0L += PERIOD_L; // reload L
Wedlug mnie timer powinien odmierzac 133us a niestety wedlug mojego
oscyloskopu odmierza ok. 300us. Poniewaz oscyloskop jest pozyczony (C1-73)
nie jestem pewien tych pomiarow. Zawartosc rejestrow SFR odczytana z ICD2:
TOCON = 0x88
OSCCON = 0x6C
Prosze Was o ocene poprawnosci obranej przeze mnie metody i wpisywanych
wartosci.

Jacek M.




Poprzedni Następny
Wiadomość
Spis treści
From: "Jacek M." <tymkonto_at_nospam_poczta.onet.pl>
Subject: Re: ustawienie timera w PIC18F1320
Date: Thu, 29 Dec 2005 23:06:21 +0100


Czy nikt tutaj nie programowal tego mikrokontrolera?

Jacek M.



Poprzedni Następny
Wiadomość
Spis treści
From: "Jacek M." <tymkonto_at_nospam_poczta.onet.pl>
Subject: Re: ustawienie timera w PIC18F1320
Date: Fri, 30 Dec 2005 00:17:22 +0100


Czy nikt tutaj nie programowal tego mikrokontrolera?

Jacek M.

Poradzilem sobie. Problemy z doborem parametrow pracy dla TIMER0 zostaly
usuniete.
Jacek M.