Tæller med PIC16F84

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Danish to

Threaded View
Jeg tæller indkommende pulser på RB0/INT og
den interrupter og dette laver en simpel increment
af en variabel, som i hovedloopet blot vises på
et 4X7-segment LED display - det kører tilsyne-
ladende fnt nok op til omkring 30kHz, hvor dis-
playet går "bazerk" og viser nogle
1) 2-3 segmenter kraftigt lysende i et ciffer eller
2) et helt ciffer kraftig lysende eller
3) displayet slukker helt
Når frekvense af pulserne sænkes igen kommer
den IKKE tilbage i en normal funktion, men fryser
eller slukker displayet helt.

Jeg mener at kunne forstå hvor der begynder at gå
galt ved stigende frekvens, idet jeg går ud fra, at det
gentagne interrupt (trigget af de hurtige pulser) optager
så meget tid, at displayfunktionen i hovedloopet
ikke får tid til at opdatere displayet, men jeg synes
det er underligt, at den af og til viser nogle få SEGMENTER
i et ciffer - hvorfor ikke hele cifferet som i andre
situationer - jeg sætter jo hele PORTB på én gang,
og ikke de enkelte segmenter ?

Hvorfor går displayet til sidst helt ud og tilsyneladende
kommer i et uendeligt loop, som kun kan afbrydes med
MCLR ?

Nu kommer den i praksis aldrig over 10kHz, men
vil typisk skulle operere helt nede fra 0 Hz, så jeg
tester den manuelt med en FLIPFLOP som jeg
bare setter/resetter - det kører fint så hurtigt jeg
nu kan gøre det.
Sætter jeg så en firkantgenerator på kører det også
fint fra ca. 10 kHz og ned til ca. 200 Hz.
(Så kan generatoren ikke gå længere ned) - her kører
tælleren fint i et vilkårligt stykke tid, hvorefter displayet
slukkes helt !
Kun MCLR kan få den til at tælle igen, og der er
ikke noget klart "mønster" i hvor land tid den kører
inden displayet slukker.

Har nogen ideer til, hvad jag kan gøre, for at
finde fejlen ?

(Jeg ville prøve at simulere situationen i MPLAB,
men har problemer med at lave en SCL-fil !
 - se evt anden tråd)

Mvh KS



Re: Tæller med PIC16F84
Quoted text here. Click to load it

Husker du at disable interupts i starten ar ISR'en ? Og cleare evt. flag
inden du enabler interupt igen? Hvilken frekvens kører du PIC'en ved?

Tror dog ikke det kan være et problem af ovenstående type da din ISR skal
være ret lang for at blive hængende ved 30KHz pulser....

--
Morten



Re: Tæller med PIC16F84
Quoted text here. Click to load it
Det mener jeg, men jeg check'er liiige igen !

Jeg kører ved 4MHz, og mit interrupt varer
kun 60-70 uS.

Du har ingen ide til, hvad der kan være galt
med MPLAB ?

Mvh KS




Re: Tæller med PIC16F84
Quoted text here. Click to load it
Her er min intr-kode:

 Org 4
 call DisableIntr
 call StoreWorld  ; for at vende tilbage
                           ; til sammen BANK, W og STATUS
 call ServicerInt
 call SetupInt
 call RestoreWorld
 retfie

og disablingen foregår med:

DisableIntr
 bsf STATUS,RP0   ; select Bank1
 bcf INTCON,GIE
 bcf STATUS,RP0   ; select Bank0
 return

og jeg sætter intr op igen med:

SetupInt
 bsf STATUS,RP0      ; select Bank1
 clrf INTCON             ; clear alle int
 movlw B'10010000'  ; enable RB0-intr
                                  ; OG interrupts generelt
 movwf INTCON
 bcf STATUS,RP0     ; select Bank0
 return

DET er vel rigtigt nok - eller ?

Mvh KS



Re: Tæller med PIC16F84
Quoted text here. Click to load it

Nu er det ret længe siden jeg har arbejdet med netop 16F84, så jeg kan ikke
huske hvilke registre der er i de forskellige banker. Men hvis du før
interupt kommer fra bank 1 vil du efter ISR have bank0, så hvis det er
nødvendigt skal du nok lave en test på current_bank og sætte den tilbage til
den efter bcf INTCON,GIE i DisableIntr. Ellers kan det da i mine øjne ikke
se anderledes ud!

Hvad er det for et signal du tæller pulser på ?

--
Morten



Re: Tæller med PIC16F84
Quoted text here. Click to load it
ikke
til
DET har du ret i StoreWorld skal FØR
DisableIntr - meeeeen det forklarer vel
ikke at displayet slukker når man kommer
ned på 150-200 Hz - og det iøvrigt virker
ved manuelt at trigge pulser op til 3-4 Hz.

Men helt klart skal de 2 kald byttes om.

Mvh KS



Re: Tæller med PIC16F84

Quoted text here. Click to load it
ikke
Jeg glemte at sige, at jeg tæller på nogle
rimeligt pæne firkanter fra et gammelt
"generator projekt" (20-30 år !) men
de ser nu pæne ud og iøvrigt er der Smith
Trigger på indgang RB0/INT.

Jeg har nu prøvet at bytte de 2 kald om,
og det hjælper ikke synderligt .....

hvordan F..... finder man ud af hvilket
uendeligt loop den fræser rundt i, når
displayet slukker ?
Clocken kører fint, og hvorfor er det
lige et interval lige under 150-200 Hz
det går galt på .....

Mvh KS



Re: Tæller med PIC16F84
Quoted text here. Click to load it

Hvis koden ikke er alt for lang så er du da velkommen til at maile den til
mig....måske et par friske øjne vil hjælpe lidt på det. Er meget
interesseret i at se hvordan du driver dit display. Hvis du mailer noget så
husk at fjerne det nødvendige spam blokkere i min adresse!

Den bedste fejlfindings metode have været hvis du kunne få fat i en ICE der
kan køres under MPLAP.

--
Morten



Re: Tæller med PIC16F84
Quoted text here. Click to load it

Hvis dit int. vare 70uS så kan du ikke tælle hurtigere end 1/70u = 14,28KHz.



--
Hilsen
   Peter N Petersen
We've slightly trimmed the long signature. Click to see the full one.

Site Timeline