Använda PICens tajmer för att bestämma displayens uppdate

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9127
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Använda PICens tajmer för att bestämma displayens uppdate

Inlägg av AndersG »

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?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Om du behöver *längre* intervall så kan du har en liten räknare
i ISR'en och uppdatera efter ett visst antal interrupt.

Det här är inget "problem" utan helt normalt och vanligt.
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7487
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Inlägg av Marta »

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.
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9127
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Inlägg av AndersG »

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:

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
isr:

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.
Initieringen:

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
bearing
Inlägg: 11677
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Inlägg av bearing »

Det kan va något med bankerna. Vi ser inte vilken bank som är aktiv i 'ourloop' och heller inte vilken bank registret 'prtflag' ligger i.
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9127
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Inlägg av AndersG »

Men det skumma är: Varför fungerar den då den sitter i PICKit, men inte annars? Men du kan ha rätt, skall kolla mera noga, det blev sent i går.
Användarvisningsbild
ahlsten
Inlägg: 659
Blev medlem: 12 november 2005, 00:24:14
Ort: Uppsala

Inlägg av ahlsten »

PICKit kanske levererar en klockfrekvens alt. har en kristall och när det gäller "annars" så finns det ingen? Eller så går den kanske på intern RC-oscillator när den inte sitter i PICKit, på en annan frekvens...
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7487
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Inlägg av Marta »

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.
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9127
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Inlägg av AndersG »

Kan mycket väl vara det, nu har jag:
__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)

men enligt INC-filen så har inte 16F690 LVP?

Hur är det annars, då TMR1 rullar över, måste man nolla TMR1L/TMR1H manuellt?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> 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...
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9127
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Inlägg av AndersG »

Nej. Det är just det som "rullar över" innebär...
I varje fall för en konventionell räknare ;) Var litet osäker på hur det var i en PIC. Tack för den verifieringen!
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...
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...

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.
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7487
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Inlägg av Marta »

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.
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9127
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Inlägg av AndersG »

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.
Den är duktigt avkopplad.
Ä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.
Jag flyttar inte PICen, utan hela kortet.[/quote]
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Bilder ?
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9127
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Inlägg av AndersG »

_MCLRE_ON
Den var det! Då jag ändrade den så fungerar det.

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...
Skriv svar