Mplabx A/D - simulator vs verklighet.

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
TheUnreal
Inlägg: 115
Blev medlem: 4 september 2005, 16:04:57
Ort: Sundsvall
Kontakt:

Mplabx A/D - simulator vs verklighet.

Inlägg av TheUnreal »

Jag har en tidigare fungerande skapelse baserad på PIC16F870.
Den mäter fem 0-5 volt DC signaler på inbyggd AD-omvandlare, och skickar iväg dessa på UART.
Dessa har snurrat på sedan 2007 så jag tycker mig kunna säga att både hårdvara och mjukvara är rätt stabil :)

Nu tänkte jag mig att uppdatera denna så den gör 20 mätningar över 20 mS och spara det högsta mätvärdet för att kunna komma nära toppvärdet på en 50 Hz AC signal.

Simulatorn har varit bra till att jaga buggar ur koden och så vitt jag kan skapa stimulus-filer så verkar allt fungera.
Men verkligheten kommer ikapp och lägger krokben för mig, med en LM35 temperaturgivare på kanal 2 och en spänningsdelare på kanal 5 simulerad signal får jag resultat enligt bild (skärmdump från program för debugging)
meas1.PNG
Om jag ökar värdet på kanal 5 kommer det att öka över det ungefärliga värdet som släpar från kanal 2 men inte sjunka under. Flyttar jag tempsensorn till ingång 3 får jag 0 på ingång 1 och 2, men samma beteende efter.
Oanvända ingångar har pull down 1Kohm

I Mplabx simulatorn lyckas jag inte få fram beteendet hur jag än försöker komma på varianter på stimulus.
Den säger att detta skickas.
Uart ut simulator.PNG
Vilket stämmer bra med stimulus.

Jag hade en teori om att det var för kort tid mellan inställning av kanal på A/D och start av mätning för att ladda mätkondensatorn, men den är 20 uS och databladet säger minimum 19,72 uS i rumstemperatur.

Har någon någon bra idé om vad jag bör titta på nu?

Just nu väljer jag att inte lägga upp koden då jag har massor av kommentarer som ska bort, och kanske ett par tre som ska dit :)
Och så hoppades jag lite att problemets lösning skulle kunna ligga i formulerandet av problemet, men än har jag inte sett den...
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4689
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: Mplabx A/D - simulator vs verklighet.

Inlägg av Swech »

Byter du kanal efter varje mätning?
Isåfall har du testat att kasta bort första mätningen och mäta en gång till istället innan du byter kanal

Swech
TheUnreal
Inlägg: 115
Blev medlem: 4 september 2005, 16:04:57
Ort: Sundsvall
Kontakt:

Re: Mplabx A/D - simulator vs verklighet.

Inlägg av TheUnreal »

Ja, jag växlar kanal mellan varje mätning.
Och nej åt det hållet har jag inte kommit i funderingarna :humm:

Och det går inte många rader kod för att testa heller :)

Finns det något att läsa om detta som jag missat, eller är det bara erfarenheten som saknas hos mig?

Edit : Missade svara på första frågan.
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43148
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Mplabx A/D - simulator vs verklighet.

Inlägg av sodjan »

Om hela koden är lite stor som exempel så kanske det går att göra en minimal "reproducer" som visar fenomenet. Chansen är inte obetydlig att du även hittar orsaken på samma gång.
TheUnreal
Inlägg: 115
Blev medlem: 4 september 2005, 16:04:57
Ort: Sundsvall
Kontakt:

Re: Mplabx A/D - simulator vs verklighet.

Inlägg av TheUnreal »

Jo, *host host*, så här va:

Det hjälpte inte att mäta direkt två gånger efter varandra.
Den stora skillnaden var att mätvärden på efterföljande portar blev strikt större än det riktiga mätvärdet.

Så jag blev ju en smula irriterad över att känna att det måste bli en till genomgång steg för steg av assemblerkoden...
Och eftersom det inte är så kul när man redan gjort det flera gånger utan resultat så tittade jag i databladet igen.

Punkt 4 säger att man måste vänta 2TAD (i mitt fall 16uS) efter varje mätning...
Manual.PNG
In med 16 uS vänta innan kanal byts och därefter 20 uS för mätkondensator verkar vara grejen.
Jag är dock lite förvånad över att jag bara lyckats höja och inte sänka värdet på kanal 5.

Tydligen var det utanför min förmåga att ta in så många punkter vid tidigare lästillfällen.
Jag skyller på barnen som fått mig att inse att mina assembler dagar är över, nya projekt blir C så det går lite fortare att både skriva och debugga ;)

Tackar för engagemanget och skäms lite...
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43148
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Mplabx A/D - simulator vs verklighet.

Inlägg av sodjan »

He, helt OK. Allt som är en kombination av analog och digital teknik kan vara lite struligt... :-)
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4689
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: Mplabx A/D - simulator vs verklighet.

Inlägg av Swech »

Men om du skall ha 20 mätningar på 20mS så blir ju det 1mS mellan mätningarna
Varför ligger du och kör runt 15uS i mäthastighet? Har du bråttom? :D

Swech
TheUnreal
Inlägg: 115
Blev medlem: 4 september 2005, 16:04:57
Ort: Sundsvall
Kontakt:

Re: Mplabx A/D - simulator vs verklighet.

Inlägg av TheUnreal »

Kanske inte bråttom, men samma anledning som att jag suttit och petat med assembler när det finns C.

Om jag mätt en kanal i taget så har jag fått vänta en del, precis som ni noterat, så jag räknade och kom fram till att jag kunde mäta de andra fyra kanalerna på den tiden.
Och egentligen spelar ju det ingen roll så länge jag bara tar ut mätdata på sekundnivå, och den tidigare skapelsen levererade bara data var 30:de sekund.

Men om jag någonsin får tid så kan den här bli del av ett system som innehåller några solceller, några batterier (med laddning och övervakning) DC/DC till typ 350 volt, tre H-bryggor med styrning samt tre filter. Vem vet vad det kan bli ;)
Och då kanske jag vill ha lite snabbare respons.

I grund och botten tänker jag hävda kontrollbehov och utmaning ;)
ToPNoTCH
Inlägg: 4847
Blev medlem: 21 december 2009, 17:59:48

Re: Mplabx A/D - simulator vs verklighet.

Inlägg av ToPNoTCH »

Rätt inställning.

Man har ju inte betalt en mcu för att den skall vila.

Här gäller det att varje klockcykel nyttjas :badgrin:
TheUnreal
Inlägg: 115
Blev medlem: 4 september 2005, 16:04:57
Ort: Sundsvall
Kontakt:

Re: Mplabx A/D - simulator vs verklighet.

Inlägg av TheUnreal »

Jag vill gärna att koden ska bli vacker oxå, för mig ligger skönheten inte bara i utseendet utan även funktionen.

Men här har vi ett exempel på där jag har problem med skönheten, funktionen och överoptimering :)

Kod: Markera allt

    NOP
    NOP
    NOP
    
    ; testa för att se om A/D ska startas nu, ej på sista varvet.
    BTFSS Status_loop,2
    BSF ADCON0, 2
    
    ;Om denna mätning är högre än tidigare lagrat, spara detta värde
    ;Nu blir det lite mindre vakert med indirekt adressering...
    ;först testar vi hög byte
    INCF FSR,1
    MOVF LAST_MEAS_H,0
    SUBWF INDF,W
    ;är dom lika, testa den mindre
    BTFSC STATUS,Z
    GOTO TestLow
Jag skulle kunna flytta upp INCF, MOVF och SUBWF till NOP, men då förstör man ju flödet i koden.
Å andra sidan är NOP inte speciellt vackert.

Nu kommer det ju att ändras i den där regionen efter att jag löste problemet ovan med 16 nop.
Kan ju blir lite snyggare tillslut iaf :)

Som ni kanske förstår så är resan minst lika viktig som målet när jag pillar på fritiden.
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43148
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Mplabx A/D - simulator vs verklighet.

Inlägg av sodjan »

Lägg de 16 NOPs i ett makro så blir det bara en rad i din "snygga" kod...
TheUnreal
Inlägg: 115
Blev medlem: 4 september 2005, 16:04:57
Ort: Sundsvall
Kontakt:

Re: Mplabx A/D - simulator vs verklighet.

Inlägg av TheUnreal »

Nja jag har lite kvar innan jag vill kalla den snygg :humm:

Och visst kan man kasta på en rosett, men det ingår ju lite i utmaningen till mig själv att försöka jobba bort behovet :)
Skriv svar