Buggfix Plus
Aktuellt datum och tid: 17.15 2019-05-26

Alla tidsangivelser är UTC + 1 timme




Svara på tråd  [ 12 inlägg ] 
Författare Meddelande
InläggPostat: 21.53 2019-02-21 

Blev medlem: 15.04 2005-09-04
Inlägg: 83
Ort: Sundsvall
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)
Bilaga:
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.
Bilaga:
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...


Logga in för att visa de filer som bifogats till detta inlägg.


Upp
 Profil  
 
InläggPostat: 12.18 2019-02-22 
EF Sponsor
Användarvisningsbild

Blev medlem: 21.43 2006-11-06
Inlägg: 4210
Ort: Munkedal, Sverige (Sweden)
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


Upp
 Profil  
 
InläggPostat: 13.12 2019-02-22 

Blev medlem: 15.04 2005-09-04
Inlägg: 83
Ort: Sundsvall
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.


Upp
 Profil  
 
InläggPostat: 16.37 2019-02-22 
EF Sponsor
Användarvisningsbild

Blev medlem: 15.29 2005-05-10
Inlägg: 37446
Ort: Söderköping
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.


Upp
 Profil  
 
InläggPostat: 17.21 2019-02-22 

Blev medlem: 15.04 2005-09-04
Inlägg: 83
Ort: Sundsvall
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...
Bilaga:
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...


Logga in för att visa de filer som bifogats till detta inlägg.


Upp
 Profil  
 
InläggPostat: 17.51 2019-02-22 
EF Sponsor
Användarvisningsbild

Blev medlem: 15.29 2005-05-10
Inlägg: 37446
Ort: Söderköping
He, helt OK. Allt som är en kombination av analog och digital teknik kan vara lite struligt... :-)


Upp
 Profil  
 
InläggPostat: 18.39 2019-02-22 
EF Sponsor
Användarvisningsbild

Blev medlem: 21.43 2006-11-06
Inlägg: 4210
Ort: Munkedal, Sverige (Sweden)
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


Upp
 Profil  
 
InläggPostat: 19.10 2019-02-22 

Blev medlem: 15.04 2005-09-04
Inlägg: 83
Ort: Sundsvall
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 ;)


Upp
 Profil  
 
InläggPostat: 20.08 2019-02-22 

Blev medlem: 17.59 2009-12-21
Inlägg: 3280
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:


Upp
 Profil  
 
InläggPostat: 11.45 2019-02-23 

Blev medlem: 15.04 2005-09-04
Inlägg: 83
Ort: Sundsvall
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: [Expandera/Minimera] [Hämta] (Untitled.txt)
    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.


Upp
 Profil  
 
InläggPostat: 12.09 2019-02-23 
EF Sponsor
Användarvisningsbild

Blev medlem: 15.29 2005-05-10
Inlägg: 37446
Ort: Söderköping
Lägg de 16 NOPs i ett makro så blir det bara en rad i din "snygga" kod...


Upp
 Profil  
 
InläggPostat: 15.35 2019-02-23 

Blev medlem: 15.04 2005-09-04
Inlägg: 83
Ort: Sundsvall
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 :)


Upp
 Profil  
 
Visa inlägg nyare än:  Sortera efter  
Svara på tråd  [ 12 inlägg ] 

Alla tidsangivelser är UTC + 1 timme


Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 4 gäster


Du kan inte skapa nya trådar i denna kategori
Du kan inte svara på trådar i denna kategori
Du kan inte redigera dina inlägg i denna kategori
Du kan inte ta bort dina inlägg i denna kategori
Du kan inte bifoga filer i denna kategori

Sök efter:
Hoppa till:  
   
Drivs av phpBB® Forum Software © phpBB Group
Swedish translation by Peetra & phpBB Sweden © 2006-2010