Sida 1 av 1

PIC temperaturindikator

Postat: 6 februari 2025, 11:32:00
av Marta
Jag har försökt läsa av temperaturindikatorn som finns i nyare PIC, men får ett egendomligt resultat. Något fladdrande och tycks opåverkat av kretsens temperatur.

Det är en 16F18877, som har temperaturdioderna mot Vdd. Jag saknar erfarenhet av både temperaturindikator och den stökiga ADC i denna krets, så kan ha gjort vilket misstag som helst...

Får ett värde från ADC som fladdrar kring 926, det känns fel. Motsvarar ungefär 0.48V under Vdd och där skall vara 4 diodsträckor. Rutinen som visar siffrorna används även på annan plats och fungerar där.

Kan Ni som kan se något uppenbart fel? De femtioelva ADC-register som inte rörs skall enligt datablad ha värden enligt POR när modulen startas efter att ha varit avstängd. Efter listningens slut läses adresl/adresh och därefter ställs modulerna av igen.

Kod: Markera allt

        
        lod bs,#pmd0/128
        rmb pmd0,6              enable fvr (t-ind)
        rmb pmd2,5              enable adc

        lod bs,#fvrcon/128
        smb fvrcon,5            t-ind on
        smb fvrcon,4            t-ind high range
        nop
        nop

        lod bs,#adcon0/128
        lod a,#%_1000_0100      startup a/d, right shifted results
        lod adcon0,a
        lod a,#%000111          set a/d clock, intosc is 8MHz
        lod adclk,a
        lod a,#$3d              select t-ind
        lod adpch,a
        lod a,#-1
        lod adpre,a             max precharge time
        lod adacq,a             max sample time

.wait   nop                     a little wait
        nop
        dsz areg
        jmp .wait

        smb adcon0,0            begin conv
.adwait nop                     wait for it
        sbr adcon0,0
        jmp .adwait

Re: PIC temperaturindikator

Postat: 6 februari 2025, 12:09:42
av Icecap
Erfarenhet har lärd mig att ALDRIG lita på att register - efter reset - står i ett givet läge!

Om ett register abs. inget har med funktionen man använder, kan man nog strunta i det - men annars ser man till att de blir initierat på något sätt!

Re: PIC temperaturindikator

Postat: 6 februari 2025, 18:03:37
av ELTompa
Vet inte om det hjälper dig men jag använde tempsensorn i min rörförstärkare i en lite äldre pic. här är det jag skrev om den
viewtopic.php?p=1547833#p1547833

Re: PIC temperaturindikator

Postat: 8 februari 2025, 09:38:21
av Marta
Tack för länken. Den bekräftar vad för avläsning jag kan förvänta från ADC. Min avläsning kring 936 är alldeles för hög. Något är med stor säkerhet felkonfigurerat.

Har dubbelkollat allt som har med temperaturindikator eller referensspänning att göra. Tyvärr resultatlöst. Samma sak med att försöka hitta ett kodexempel där det används ett chip med denna stökiga av finesser storknande ADC.

Har någon av Er sett ett sådant exempel med 16F18877 eller annan med liknande ADC?

Re: PIC temperaturindikator

Postat: 8 februari 2025, 09:41:58
av TomasL

Re: PIC temperaturindikator

Postat: 12 februari 2025, 07:31:52
av Kaggen
Har inget svar på din fråga tyvärr, men jag vart nyfiken på vad det är för typ av instruktioner i din kod som du listat? Rmb, smb, lod är inget jag känner igen från "vanliga" PIC16s instructionset.

Re: PIC temperaturindikator

Postat: 12 februari 2025, 08:23:25
av Glenn
med risk att outa mina usla programmeringskunskaper.. smb och rmb låter som setmemorybit och resetmemorybit ?

Re: PIC temperaturindikator

Postat: 12 februari 2025, 08:39:33
av Klas-Kenny
Är inte det 6502-instruktioner?

Kör Marta någon udda PIC-assembler som använder 6502-mnemonics istället för de "vanliga"? :)


Tillägg: Sökte i forumet och mycket riktigt är det en hemsnickrad assembler för personlig preferens. :D
viewtopic.php?p=1837996#p1837996

Re: PIC temperaturindikator

Postat: 12 februari 2025, 14:34:32
av Marta
Har hittat felet nu och fått det att fungera som förväntat. Mätvärdet blir 545 nere på mitt svinkalla vintergolv.

Orsaken var att jag Trodde, Tänkte och Tyckte att allt som ökade tiden en avläsning tog måste vara bra, så satte adpre och adacq till -1 (0xff). Det var adpre som ställde till det.

Rätt är att temperaturindikatorn skall vara ansluten till ADC under minst 200µs, därefter läsa av. Sedan samma väntan mellan varje avläsning.


Som Ni redan insett är det en annan assembler.
Opcodes bygger mycket riktigt på 6502. Instruktionerna här är LOaD, SetMemoryBit, ResetMemoryBit, DecrementSkipZero, SkipBitReset.

Re: PIC temperaturindikator

Postat: 12 februari 2025, 18:22:00
av baron3d
Det där är inte 6502 instruktioner.
LOAD heter LDA.
SetMemoryBit finns inte bland 6502 instruktioner.

Re: PIC temperaturindikator

Postat: 12 februari 2025, 19:21:01
av Marta
Och PIC är inte en 6502...

Re: PIC temperaturindikator

Postat: 12 februari 2025, 19:24:39
av TomasL
PÅ PIC-språk heter det väl "mov"

Re: PIC temperaturindikator

Postat: 12 februari 2025, 19:52:23
av rvl
Marta är väl inte direkt nån fan av "PIC-språk", om hon en gång bemödat sig med att skriva sin egen assembler så som hon själv vill ha den.
Det kan vi lyfta hatten åt tycker jag.

Re: PIC temperaturindikator

Postat: 12 februari 2025, 19:56:32
av TomasL
Jomenvisst, men det blir lite krångligt, om man skall försöka hjälpa till, då ingenting stämmer.