Använda PICens tajmer för att bestämma displayens uppdate
Använda PICens tajmer för att bestämma displayens uppdate
Har haft en loop och bara dunkat ut mAh/V/A på displayen. Nackdelen är givetvis att uppdateringsfrekvensen blir beroende av hur ofta processorn interruptas. Har en 16F690 och 4MHz.
Om jag i stället ligger och loopar på en flagga som sätts av en tajmerinterrupt så kan jag inte åstadkomma glesare intervall med TMR2 än 16*16*255 =65250us, dvs 65ms. Med TMR1 är maximala 8*65535=0,5s
Vill jag ha ännu glesare får jag låta interrupten räkna ned en räknare, eller hur?
Om jag i stället ligger och loopar på en flagga som sätts av en tajmerinterrupt så kan jag inte åstadkomma glesare intervall med TMR2 än 16*16*255 =65250us, dvs 65ms. Med TMR1 är maximala 8*65535=0,5s
Vill jag ha ännu glesare får jag låta interrupten räkna ned en räknare, eller hur?
För det första, är det en LCD med kontroller som skall uppdateras, eller är det en muxad LED-display där Ditt program hanterar scanningen? Antar det är en LCD, annars vore en tid på 20ms per "varv" ungefär max vad det tål.
Sätt en flagga när uppgifterna ändrats, alternativt utför uppdateringssubrutinen. Allt beroende på hur det hlea är arrangerat.
Det är en mycket udda lösning att skicka om data till en LCD på det sättet med bara en timer. Finns antagligen bättre sätt.
Sätt en flagga när uppgifterna ändrats, alternativt utför uppdateringssubrutinen. Allt beroende på hur det hlea är arrangerat.
Det är en mycket udda lösning att skicka om data till en LCD på det sättet med bara en timer. Finns antagligen bättre sätt.
Det är en LCD. Får väl ta till en räknare, men då jag testade köra med en tajmerint så fungerade det då jag körde kopplat fast i Pickit och med en 555 som matade pulser, men blankvägrade då jag pluggade i den i breadboardet.... Körde ett varv ovh hängde sig sedan. Antagligen ngt jag glömt initiera, men vad??
Koden:
isr:
Initieringen:
Koden:
Kod: Markera allt
ourloop
; remaining code goes here
btfss prtflag,1 ; Do we need to print?
goto ourloop ; no, loop forever
; Yes, print
bcf prtflag,1 ; and clear print flag
Kod: Markera allt
;
; This is the handler for other interrupts
other_int
banksel PIR1
btfsc PIR1,TMR1IF ; If Timer 1 caused the interrupt, handle it.
bsf prtflag,1
banksel PIR1
BCF PIR1,TMR1IF ; Clear flag and continue.
Kod: Markera allt
CLRF TMR1L ; Clear Timer1 register
CLRF TMR1H
BSF STATUS, RP0 ; Bank1
bsf INTCON,PEIE ; Enable peripheral interrupts
CLRF PIE1 ; Mask all peripheral interrupts except
bsf PIE1,TMR1IE ; the timer 1 interrupts.
BCF STATUS, RP0 ; Bank0
CLRF PIR1 ; Clear peripheral interrupts Flags
movlw B'00110000' ; Set Postscale = 16, Prescale = 16
movwf T1CON
BSF STATUS, RP0 ; Bank1
BSF T1CON,TMR1ON ; Timer1 starts to increment
; ***********************************************************************************
; END OF CODE to initialize Timer 2
; ***********************************************************************************
bsf OPTION_REG, INTEDG ; interrupt on positive
banksel IOCA
bsf IOCA, IOCA0 ; Interrupt on change port A register, bit 0
bsf IOCA, IOCA4 ; Interrupt on change port A register, bit 4
banksel INTCON
bcf INTCON, INTF ; clear interrupt flag
bsf INTCON, INTE ; mask for external interrupts
bsf INTCON, GIE ; enable interrupts
bsf INTCON, RABIE ; enable interrupt on change
Som föregående talare skrev, någon konfigurationsbit. Kan även vara t.ex. LVP som är vald. Det blir någon kapacitiv koppling som gör att den slutar funka när den flytande pinnen påverkas.
Gå igenom alla configbitar en och en, sätt dem explicit i det läge Du vill ha dem. Läs datablad om Du inte försåtr någon av dem och utgå aldrig från att grundvärdet kommer att fungera. Det gördet inte! Gäller bl.a. LVP.
Gå igenom alla configbitar en och en, sätt dem explicit i det läge Du vill ha dem. Läs datablad om Du inte försåtr någon av dem och utgå aldrig från att grundvärdet kommer att fungera. Det gördet inte! Gäller bl.a. LVP.
> så har inte 16F690 LVP?
Korrekt.
> Hur är det annars, då TMR1 rullar över, måste man nolla TMR1L/TMR1H manuellt?
Nej. Det är just det som "rullar över" innebär...
> _MCLRE_OFF
Om du inte alldeles nödvändigt behöver den där extra I-pinnen,
så kan det vara enklare/säkrare att köra med _MCLRE_ON (och ett
externt pullup motstånd). I alla fall under felsökningsprocessen...
Korrekt.
> Hur är det annars, då TMR1 rullar över, måste man nolla TMR1L/TMR1H manuellt?
Nej. Det är just det som "rullar över" innebär...
> _MCLRE_OFF
Om du inte alldeles nödvändigt behöver den där extra I-pinnen,
så kan det vara enklare/säkrare att köra med _MCLRE_ON (och ett
externt pullup motstånd). I alla fall under felsökningsprocessen...
I varje fall för en konventionell räknareNej. Det är just det som "rullar över" innebär...

Jag har ett "low pin count demo board" och såvitt jag kan se på schemat är MCLR pullupat via 10k och det finns dessutom en brytare där... hm...Om du inte alldeles nödvändigt behöver den där extra I-pinnen,
så kan det vara enklare/säkrare att köra med _MCLRE_ON (och ett
externt pullup motstånd). I alla fall under felsökningsprocessen...
Exemplen som använder denna brytare funkar ej så man kör PICkit från MPLAB, men väl separat. Kanske vi har skillnaden där? Skall testa _MCLRE_ON.
Hur är det med avkopplingen av matningsspänningen? Sådana där konstiga saker där det funkar på ett ställe, men inte ett annat, kan bero på bl.a. usel matningsspänning.
Är där pull-up/down på alla pinnar när den sitter i utvecklingskortet, medan detta saknas på labbplattan? Montera i så fall motsvarande och se även efter i programkod och konfiguration så ALLA oanvända pinnar inte kan påverka något.
Är där pull-up/down på alla pinnar när den sitter i utvecklingskortet, medan detta saknas på labbplattan? Montera i så fall motsvarande och se även efter i programkod och konfiguration så ALLA oanvända pinnar inte kan påverka något.
Den är duktigt avkopplad.Hur är det med avkopplingen av matningsspänningen? Sådana där konstiga saker där det funkar på ett ställe, men inte ett annat, kan bero på bl.a. usel matningsspänning.
Jag flyttar inte PICen, utan hela kortet.[/quote]Är där pull-up/down på alla pinnar när den sitter i utvecklingskortet, medan detta saknas på labbplattan? Montera i så fall motsvarande och se även efter i programkod och konfiguration så ALLA oanvända pinnar inte kan påverka något.
Den var det! Då jag ändrade den så fungerar det._MCLRE_ON
Postar litet bilder i projekttråden:
http://elektronikforumet.com/forum/view ... hp?t=28031
Tror jag kastar mig på soffan en stund och läser på om MCLR och liknande...