interrupt ger upp.nu behövs nya ide och förslag tror jag
Ursäkta glömnde bort en ska
Var ställer man in lång tid det ska gå innan timer ska generera ett interrupt.
Ställer man in det i INTCON registret eller måste man bygga det själv.Det bästa för min funktion är om man kan bara påverka en register för att få den timerinställningen du vill ha.
Ställer man in det i INTCON registret eller måste man bygga det själv.Det bästa för min funktion är om man kan bara påverka en register för att få den timerinställningen du vill ha.
Hur de olika timers fungerar (de fungerar lite olika) framgår av respektive
beskrivning av TMR0 - TMR3 i databladet.
Det är lite konstigt, du har massor av gånger fått "tips" om att läsa på
lite i databladet, men det är väldigt sällan som du rellaterar till något där
som har varit oklart eller så. Det är svårt att veta vad du har läst
eller inte, och vad som har "fastnat" eller inte. Finns ju ingen anledning
att upprepa här vad du redan har snappat från databladet.
I princip ställer man timern på lämpligt värde som sedan räknas upp och
när timern "slår över" från x'FF' (eller x'FFFF) till x'00 (eller x'0000') så
får man ett interrupt (om alla rellevanta flaggor är satta korrekt, se beskrivning
i databladet).
Sedan finns det pre-/post-scalers som också påverkar tiden, detta skiljer
lite mellan de olika timers, så det är bäst att kolla med databladet...
Så den totala tiden beror på en kombination av pre-scalers, startvärdet m.m.
Och för att svara på din fråga, jag gick "4-årig teknisk" (alltså den gamla 4-åriga gymn.linjen) i Norrköping 75-79.
Sedan har jag jobbat 25 år med "riktiga" datorer under 20 år på
Ericsson i Norrköping, men bl.a p.g.a eget intresse återvänt till de mindre
under senaste 1-2 åren... De senaste 5 åren (sedan Ericsson försvann
helt från Norrköping) har jag "kört eget"...
beskrivning av TMR0 - TMR3 i databladet.
Det är lite konstigt, du har massor av gånger fått "tips" om att läsa på
lite i databladet, men det är väldigt sällan som du rellaterar till något där
som har varit oklart eller så. Det är svårt att veta vad du har läst
eller inte, och vad som har "fastnat" eller inte. Finns ju ingen anledning
att upprepa här vad du redan har snappat från databladet.
I princip ställer man timern på lämpligt värde som sedan räknas upp och
när timern "slår över" från x'FF' (eller x'FFFF) till x'00 (eller x'0000') så
får man ett interrupt (om alla rellevanta flaggor är satta korrekt, se beskrivning
i databladet).
Sedan finns det pre-/post-scalers som också påverkar tiden, detta skiljer
lite mellan de olika timers, så det är bäst att kolla med databladet...
Så den totala tiden beror på en kombination av pre-scalers, startvärdet m.m.
Och för att svara på din fråga, jag gick "4-årig teknisk" (alltså den gamla 4-åriga gymn.linjen) i Norrköping 75-79.
Sedan har jag jobbat 25 år med "riktiga" datorer under 20 år på
Ericsson i Norrköping, men bl.a p.g.a eget intresse återvänt till de mindre
under senaste 1-2 åren... De senaste 5 åren (sedan Ericsson försvann
helt från Norrköping) har jag "kört eget"...
problem timer 0
list P=18F452
#include <P18F452.INC>
CONFIG OSC=HS ; Sätt in det som stämmer överens med din miljö !!
; CONFIG isrOSCS=OFF, PWRT=ON, BOR=OFF, WDT=OFF, LVP=OFF, DEBUG=OFF
CONFIG CP1=OFF, CP2=OFF, CP3=OFF, CPB=OFF, CPD=OFF
CONFIG WRT1=OFF, WRT2=OFF, WRT3=OFF, WRTB=OFF, WRTC=OFF, WRTD=OFF
CONFIG EBTR1=OFF, EBTR2=OFF, EBTR3=OFF, EBTRB=OFF
;******************************************************************************
;Variable definitions
; These variables are only needed if low priority interrupts are used.
; More variables may be needed to store other special function registers used
; in the interrupt routines.
;
;UDATA
;
;WREG_TEMP RES 1 ;variable in RAM for context saving
;STATUS_TEMP RES 1 ;variable in RAM for context saving
;BSR_TEMP RES 1 ;variable in RAM for context saving
;
; OVANSTÅENDE BEHÖVS INTE...
;
;
;******************Reset_start*************************************************
;Reset and interrupt vectors
code h'0000'
goto Main
ISR_hog code h'8'
goto isr_start_hog
ISR_log code h'18'
goto isr_start_log
;**************************************************************************
;***************interrupt_låg****************************************************
isr_log_code code
isr_start_log
bcf INTCON3,INT1IF ;Clear INT1 external interrupt flag.
nop
nop
nop
retfie
;**************interrupt_hög**************************************************************
isr_hog_code code
isr_start_hog
nop
nop
nop
nop
nop
bcf INTCON,TMR0IF
retfie
;***************interrupt_konfig***********************************************
;här ställer jag in konfigruerar jag pic:en EX ställer in Out/in defineras och register ställs in.
;init_code code
init
;****************************Konfig portB*********************************************
Movlw B'11111111'
movwf TRISB ;Sätter PortB till ingångar bit 0-7
;****************************Generella Interrupts inställningar*************
bsf RCON,IPEN ;Disable priority levels on interrupts
bsf INTCON,PEIE ;Enables all unmasked peripheral interrupts
bsf INTCON,GIE ;Enable global interrupts.
;**************************Interrupt overflow*************************
bcf T0CON,T0CS
bsf T0CON,T08BIT
bsf T0CON,TMR0ON
bcf T0CON,PSA
bcf T0CON,T0PS2
bcf T0CON,T0PS1
bsf T0CON,T0PS0
bsf INTCON2,TMR0IP
bsf INTCON,TMR0IE
;********************************************************************
return
;*********************Main********************************************
; Start of main program
Main
call init
Loop:
goto Loop
;******************************************************************************
;End of program
END
Jag har försökt att få programmet ovan att fungera. Men det gör det inte. Problemet är att den inte hoppar till subrutinen isr_start_hog. Min fråga är varför gör den inte det. Sedan har jag läst om timer0 registret i databladet.Men hittar inga möjlighter att få 50 ms fördröjning innan den hoppar till interrupt subrutinen. Gur ställer jag in detta. Man kan påverka prescale talen.men det kan du väll inte få exakt 50 ms med eller?
Det startvärde man ska ställa in vart timern ska börja räkna finns inte heller- För när i alla fall programmet har räknat upp till ff så slår den om. då ska flaggan TMR0IF i INTCON registret bli ett.Men problemet är att den inte blir det. Jag tycker att min init är korrekt gjord om jag vill ha 8-bitars räkning. med prescale 1.4.
Frågor
Varför blir det ingen interrupt? Något som jag har ställt in fel i min init:
Hur gör jag för att få exakt 50 ms. Man andvänder väll prescale för grov kallebrering av tiden.sedan när det kommer till finskjusteringen hur gör jag då??
#include <P18F452.INC>
CONFIG OSC=HS ; Sätt in det som stämmer överens med din miljö !!
; CONFIG isrOSCS=OFF, PWRT=ON, BOR=OFF, WDT=OFF, LVP=OFF, DEBUG=OFF
CONFIG CP1=OFF, CP2=OFF, CP3=OFF, CPB=OFF, CPD=OFF
CONFIG WRT1=OFF, WRT2=OFF, WRT3=OFF, WRTB=OFF, WRTC=OFF, WRTD=OFF
CONFIG EBTR1=OFF, EBTR2=OFF, EBTR3=OFF, EBTRB=OFF
;******************************************************************************
;Variable definitions
; These variables are only needed if low priority interrupts are used.
; More variables may be needed to store other special function registers used
; in the interrupt routines.
;
;UDATA
;
;WREG_TEMP RES 1 ;variable in RAM for context saving
;STATUS_TEMP RES 1 ;variable in RAM for context saving
;BSR_TEMP RES 1 ;variable in RAM for context saving
;
; OVANSTÅENDE BEHÖVS INTE...
;
;
;******************Reset_start*************************************************
;Reset and interrupt vectors
code h'0000'
goto Main
ISR_hog code h'8'
goto isr_start_hog
ISR_log code h'18'
goto isr_start_log
;**************************************************************************
;***************interrupt_låg****************************************************
isr_log_code code
isr_start_log
bcf INTCON3,INT1IF ;Clear INT1 external interrupt flag.
nop
nop
nop
retfie
;**************interrupt_hög**************************************************************
isr_hog_code code
isr_start_hog
nop
nop
nop
nop
nop
bcf INTCON,TMR0IF
retfie
;***************interrupt_konfig***********************************************
;här ställer jag in konfigruerar jag pic:en EX ställer in Out/in defineras och register ställs in.
;init_code code
init
;****************************Konfig portB*********************************************
Movlw B'11111111'
movwf TRISB ;Sätter PortB till ingångar bit 0-7
;****************************Generella Interrupts inställningar*************
bsf RCON,IPEN ;Disable priority levels on interrupts
bsf INTCON,PEIE ;Enables all unmasked peripheral interrupts
bsf INTCON,GIE ;Enable global interrupts.
;**************************Interrupt overflow*************************
bcf T0CON,T0CS
bsf T0CON,T08BIT
bsf T0CON,TMR0ON
bcf T0CON,PSA
bcf T0CON,T0PS2
bcf T0CON,T0PS1
bsf T0CON,T0PS0
bsf INTCON2,TMR0IP
bsf INTCON,TMR0IE
;********************************************************************
return
;*********************Main********************************************
; Start of main program
Main
call init
Loop:
goto Loop
;******************************************************************************
;End of program
END
Jag har försökt att få programmet ovan att fungera. Men det gör det inte. Problemet är att den inte hoppar till subrutinen isr_start_hog. Min fråga är varför gör den inte det. Sedan har jag läst om timer0 registret i databladet.Men hittar inga möjlighter att få 50 ms fördröjning innan den hoppar till interrupt subrutinen. Gur ställer jag in detta. Man kan påverka prescale talen.men det kan du väll inte få exakt 50 ms med eller?
Det startvärde man ska ställa in vart timern ska börja räkna finns inte heller- För när i alla fall programmet har räknat upp till ff så slår den om. då ska flaggan TMR0IF i INTCON registret bli ett.Men problemet är att den inte blir det. Jag tycker att min init är korrekt gjord om jag vill ha 8-bitars räkning. med prescale 1.4.
Frågor
Varför blir det ingen interrupt? Något som jag har ställt in fel i min init:
Hur gör jag för att få exakt 50 ms. Man andvänder väll prescale för grov kallebrering av tiden.sedan när det kommer till finskjusteringen hur gör jag då??
Jag hittar inget fel i din init förutom att " bsf RCON,IPEN ;Disable priority levels on interrupts " är lite feldokumenterad.
Så jag har ingen aning om varför du inte får något interrupt.
Om du vill ha 50ms med 10Mhz kristall + PLL så blir det 500000 instruktionscycler.
Så många cycler kan inte en 8bitars timer+ 8bitars prescaler räkna (max 65536).
Om du väljer prescaler 1:8 och låter räknaren(16bitars) räkna 62500 steg så får du 500000 instruktionscycler.
Du sätter alltså värdet 3036(65536-62500) i Tmr0 för räknaren räknar upp.
Så jag har ingen aning om varför du inte får något interrupt.
Om du vill ha 50ms med 10Mhz kristall + PLL så blir det 500000 instruktionscycler.
Så många cycler kan inte en 8bitars timer+ 8bitars prescaler räkna (max 65536).
Om du väljer prescaler 1:8 och låter räknaren(16bitars) räkna 62500 steg så får du 500000 instruktionscycler.
Du sätter alltså värdet 3036(65536-62500) i Tmr0 för räknaren räknar upp.
Först, är vi inte överens omatt du inte behöver köra med två interrupt prioriteter ? Så kör med "BCF RCON,IPEN", alltså sätt IPEN = "0".
Sen är det helt rätt att du måste köra den i 16 bitar.
Alltså : " bcf T0CON,T08BIT" istället för " bsf...".
Sen är det ju så att timern börjar om på h'0000' efter h'FFFF', så du
får "ladda om" timern med startvärdet igen. Men, beroende på *hur*
exakt 50 ms behöver vara, så är det ju så att det tar ett litet tag från
det interruptet har inträffat, till punkten i din ISR där timer1
laddas om. Antingen får man justera "ladd-värdet" med hänsyn till
hur lång tid det går mellan interruptet och omladdningen, eller så kan
man beräkna ett nytt startvärde utifrån hur långt timer1 har hunnit.
I princip adderar man till ditt riktiga startvärde till timer1 istället för
att bara lagra dom där. på så sätt kommer man närmare h'FFFF' och
komenserar för att timern redan har gått en liten bit. Man får se upp lite eftersom det är två bytes å så,
jag minns inte exakt hur...
Det är enkelt i MPSIM att labba lite och trimma in rutinen och värderna
så att man kommer så nära 50 (eller 20) ms som möjligt.
Men, är det fortfarande servo applikationen ? Är det inte 20 ms du vill ha ?
Och dessa 20 ms är inte kritiska om det är ett servo, så ett litet fel spelar ingen roll.
> Problemet är att den inte hoppar till subrutinen isr_start_hog.
Hur vet du det ? Har du kört det i MPSIM ?
Sen är det helt rätt att du måste köra den i 16 bitar.
Alltså : " bcf T0CON,T08BIT" istället för " bsf...".
Sen är det ju så att timern börjar om på h'0000' efter h'FFFF', så du
får "ladda om" timern med startvärdet igen. Men, beroende på *hur*
exakt 50 ms behöver vara, så är det ju så att det tar ett litet tag från
det interruptet har inträffat, till punkten i din ISR där timer1
laddas om. Antingen får man justera "ladd-värdet" med hänsyn till
hur lång tid det går mellan interruptet och omladdningen, eller så kan
man beräkna ett nytt startvärde utifrån hur långt timer1 har hunnit.
I princip adderar man till ditt riktiga startvärde till timer1 istället för
att bara lagra dom där. på så sätt kommer man närmare h'FFFF' och
komenserar för att timern redan har gått en liten bit. Man får se upp lite eftersom det är två bytes å så,
jag minns inte exakt hur...
Det är enkelt i MPSIM att labba lite och trimma in rutinen och värderna
så att man kommer så nära 50 (eller 20) ms som möjligt.
Men, är det fortfarande servo applikationen ? Är det inte 20 ms du vill ha ?
Och dessa 20 ms är inte kritiska om det är ett servo, så ett litet fel spelar ingen roll.
> Problemet är att den inte hoppar till subrutinen isr_start_hog.
Hur vet du det ? Har du kört det i MPSIM ?
ok sodjan
Hur beräknar cheibbe hur många instruktioner som pic.en gör på 50 ms F=1/T eller hur går an till väga.
Sedan är det bara att skriva
movlw H'FFF'
movwf Tmr0L
kommer alltid Pic:en att starta på FFF och sluta på FFFF.
Isådana fall så räker det att finna start värdet och ha med det i huvudprogrammet.
Sedan är det bara att skriva
movlw H'FFF'
movwf Tmr0L
kommer alltid Pic:en att starta på FFF och sluta på FFFF.
Isådana fall så räker det att finna start värdet och ha med det i huvudprogrammet.
50 ms/1000 = 0.05 sekunder
0.05 * 10000000(antal instruktionscycler per sekund) = 500000
Med den pic du använder så ska den höga byten lagras i TMR0H först (värdet lagras inte i själva räknaren utan bara i registret TMR0H)
Sen lagrar du låga byten i TMR0L (då uppdateras låg och hög samtidigt)
Alla picar fungerar inte på samma sätt.
Du måste ha startvärdet i din interrupt-rutin.
0.05 * 10000000(antal instruktionscycler per sekund) = 500000
Med den pic du använder så ska den höga byten lagras i TMR0H först (värdet lagras inte i själva räknaren utan bara i registret TMR0H)
Sen lagrar du låga byten i TMR0L (då uppdateras låg och hög samtidigt)
Alla picar fungerar inte på samma sätt.
Du måste ha startvärdet i din interrupt-rutin.
> "Hur beräknar cheibbe hur många instruktioner som pic...".
Instruktions *CYKLER* ! (d.v.s Tcy = Tosc / 4)
*INTE* "intruktioner" !
Vissa instruktioner tar 1 Tcy, en del (bl.a alla goto, call, skip o.s.v) tar 2 Tcy.
Men det finns dokumenterat tydligt i snabbsammanställningen över
instruktionerna, den som ligger innan detaljbeskrivningarna över
instruktionerna i databladet.
Alltså, om Tosc = 40Mhz, så är Tcy = 10 Mhz. Eller igentligen "1 / 40Mhz"
och "1 / 10 Mhz", eftersom Tcy ch Tosc ju är *tider*, inte *frekvenser*, men
du förstår säkert vad jag menar...
> Sedan är det bara att skriva
> movlw H'FFF'
> movwf Tmr0L
> kommer alltid Pic:en att starta på FFF och sluta på FFFF.
Nej !
Läs igen vad jag skrev. TMR1 räknar FFFF -> 0000. Du måste (precis
som Chribbe skrev, och jag skrev innan) *själv* ladda om TMR1 med
startvärdet i ISR'en. Gör det så tidigt som möjligt i ISR'en för att få det
minsta felet (d.v.s avvikelsen från 50 ms).
Notera att om det är en *klocka* som du tänker fixa, så är det lite
annat att ta hänsyn till. Då vill man ju att det ska gå så exakt
som kristallen tillåter. Enklast är med en "klock-kristall" på ca 32 Khz
på TMR-OSC ingångarna, så får man en bra tidbas. Eller genom att
man väljer en huvud-kristall med något annat värde än 10 Mhz,
t.ex 8,388608 Mhz eller 9,83040 Mhz. Varför t.ex dessa kristallvärden
är lämpliga får bli hemläxa...
(Tips: Prova att dela med några
jämna potenser av 2...)
Instruktions *CYKLER* ! (d.v.s Tcy = Tosc / 4)
*INTE* "intruktioner" !
Vissa instruktioner tar 1 Tcy, en del (bl.a alla goto, call, skip o.s.v) tar 2 Tcy.
Men det finns dokumenterat tydligt i snabbsammanställningen över
instruktionerna, den som ligger innan detaljbeskrivningarna över
instruktionerna i databladet.
Alltså, om Tosc = 40Mhz, så är Tcy = 10 Mhz. Eller igentligen "1 / 40Mhz"
och "1 / 10 Mhz", eftersom Tcy ch Tosc ju är *tider*, inte *frekvenser*, men
du förstår säkert vad jag menar...
> Sedan är det bara att skriva
> movlw H'FFF'
> movwf Tmr0L
> kommer alltid Pic:en att starta på FFF och sluta på FFFF.
Nej !
Läs igen vad jag skrev. TMR1 räknar FFFF -> 0000. Du måste (precis
som Chribbe skrev, och jag skrev innan) *själv* ladda om TMR1 med
startvärdet i ISR'en. Gör det så tidigt som möjligt i ISR'en för att få det
minsta felet (d.v.s avvikelsen från 50 ms).
Notera att om det är en *klocka* som du tänker fixa, så är det lite
annat att ta hänsyn till. Då vill man ju att det ska gå så exakt
som kristallen tillåter. Enklast är med en "klock-kristall" på ca 32 Khz
på TMR-OSC ingångarna, så får man en bra tidbas. Eller genom att
man väljer en huvud-kristall med något annat värde än 10 Mhz,
t.ex 8,388608 Mhz eller 9,83040 Mhz. Varför t.ex dessa kristallvärden
är lämpliga får bli hemläxa...

jämna potenser av 2...)
OK
Jag läger till dessa rader i min init sub
clrf TMR0L
clrf TMR0H
movwf h'0F'
movwf TMR0H
movlw h'FA'
Denna subrutin kommer bara köras då pic:en nollställs(Reset). Kommer allltid pic:en att börja på startvärde 0FFA, alltså räkna mellan 0FFA- FFFF. Heller måste jag ställa in detta varje gång pic.en kommer till FFFF. Det ska man väll inte behöva att göra eller?.
Sedan en fråga till När jag kollar på registren TRM0L och TRM0H så blir TRM0H registret FF, inte 0F som jag förväntar mig.Sedan blir inte TRM0L inte FA utan 00 varför då?
clrf TMR0L
clrf TMR0H
movwf h'0F'
movwf TMR0H
movlw h'FA'
Denna subrutin kommer bara köras då pic:en nollställs(Reset). Kommer allltid pic:en att börja på startvärde 0FFA, alltså räkna mellan 0FFA- FFFF. Heller måste jag ställa in detta varje gång pic.en kommer till FFFF. Det ska man väll inte behöva att göra eller?.
Sedan en fråga till När jag kollar på registren TRM0L och TRM0H så blir TRM0H registret FF, inte 0F som jag förväntar mig.Sedan blir inte TRM0L inte FA utan 00 varför då?
Markus:
> clrf TMR0L
> clrf TMR0H
> movwf h'0F'
> movwf TMR0H
> movlw h'FA'
movwf TMR0L <--- Du glömde denna!!!!
Varför kör du clrf TMR0L och clrf TMR0H? Du sätter ju dem iallafall alldeles efteråt.
> Denna subrutin kommer bara köras då pic:en nollställs(Reset). Kommer
> allltid pic:en att börja på startvärde 0FFA
Nix, du måste ställa in startvärdet på nytt vid varje interrupt!
> Det ska man väll inte behöva att göra eller?.
Jojomensan!
En timer räknar generellt från 0x0000 till 0xFFFF med ett steg varje instruktionscykel (Om prescalern är 1:1). När den kommer till 0xFFFF börjar den om från 0x0000 (kallas ibland wraparound = snurra runt). Det är vid denna "wraparound" interruptet sker. Om du sedan inte vill att timern skall börja om från 0x0000 får du själv sätta vilket värde den skall börja på. Vi har snart sagt det 0xFFFF gånger till dig i denna tråd.
> Sedan en fråga till När jag kollar på registren TRM0L och TRM0H så blir TRM0H registret FF,
> inte 0F som jag förväntar mig.Sedan blir inte TRM0L inte FA utan 00 varför då?
"När jag kollar på registren". När är när? En timer räknar så länge den är igång. Vid prescaler 1:1 hinner timern räkna från 0x0000 till 0xFFFF på 6553,5 us. Frågan är som sagt; när kollar du timern? 0,1 us efter du satt den till 0x0FFA? Eller stegar du i simulator/debugger?
Kollar du efter timerinterruptet borde TMR0H och TMR0L vara 0, eftersom, som vi påpekat ett antal gånger, timern startar om från 0 efter wraparound.
Mats
> clrf TMR0L
> clrf TMR0H
> movwf h'0F'
> movwf TMR0H
> movlw h'FA'
movwf TMR0L <--- Du glömde denna!!!!
Varför kör du clrf TMR0L och clrf TMR0H? Du sätter ju dem iallafall alldeles efteråt.
> Denna subrutin kommer bara köras då pic:en nollställs(Reset). Kommer
> allltid pic:en att börja på startvärde 0FFA
Nix, du måste ställa in startvärdet på nytt vid varje interrupt!
> Det ska man väll inte behöva att göra eller?.
Jojomensan!
En timer räknar generellt från 0x0000 till 0xFFFF med ett steg varje instruktionscykel (Om prescalern är 1:1). När den kommer till 0xFFFF börjar den om från 0x0000 (kallas ibland wraparound = snurra runt). Det är vid denna "wraparound" interruptet sker. Om du sedan inte vill att timern skall börja om från 0x0000 får du själv sätta vilket värde den skall börja på. Vi har snart sagt det 0xFFFF gånger till dig i denna tråd.

> Sedan en fråga till När jag kollar på registren TRM0L och TRM0H så blir TRM0H registret FF,
> inte 0F som jag förväntar mig.Sedan blir inte TRM0L inte FA utan 00 varför då?
"När jag kollar på registren". När är när? En timer räknar så länge den är igång. Vid prescaler 1:1 hinner timern räkna från 0x0000 till 0xFFFF på 6553,5 us. Frågan är som sagt; när kollar du timern? 0,1 us efter du satt den till 0x0FFA? Eller stegar du i simulator/debugger?
Kollar du efter timerinterruptet borde TMR0H och TMR0L vara 0, eftersom, som vi påpekat ett antal gånger, timern startar om från 0 efter wraparound.
Mats
ok.jag tar det igen
Alltså efter jag har skrivit dessa rader plus den jag glömde så direkt efter dessa är klar när jag stegar mig genom koden borde dom vara det värde jag ger dom eller??. För det är precis vasd dom inte blir. trm0h blir FF inte 0F sedan blir TRM0L 00 inte 0F som den borde bli tycker jag eller???. ska det bli så här eller.
ok, nu fungerar det.bra.
Nu har jag ett nytt problem. Vet ni om det går att ta tid mellan två breakpoint i MPLAB. Alltså hur länge det dröjer från att pic:en börjar på en viss rad tills den kommer till en annan rad. Var gör jag det och hur går jag till väga med detta?.Förskt att leta i user guide i Manualen till MPLAB men hittar inget bra.
Andra frågan kan man i simulatorn kolla värdet på en utgång med värdet på y-axeln och tiden på x -axeln.Var hittar man det. Hittar ingen grafisk visining någonstans
Andra frågan kan man i simulatorn kolla värdet på en utgång med värdet på y-axeln och tiden på x -axeln.Var hittar man det. Hittar ingen grafisk visining någonstans
Stopwatch kan du använda för att ta tid mellan breakpoints.
Att visa in/utgångar som ett simulerat oscilloscope skulle vara användbart ibland men jag tror att du aldrig kommer få se det i mplab.
En sak som jag stör mig på är att den inte uppdaterar register-innehåll när man kör programmet (eller har jag missat något).
Att visa in/utgångar som ett simulerat oscilloscope skulle vara användbart ibland men jag tror att du aldrig kommer få se det i mplab.
En sak som jag stör mig på är att den inte uppdaterar register-innehåll när man kör programmet (eller har jag missat något).