Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Diy duvaljka, jbc lemilica, led svetlo, mikroskop
(01-13-2023, 01:47 PM)savan Wrote: Edit:
jeste u pravi si skroz, izgleda da se TMR0IF ne resetuje sam od sebe i da mora to da se uradi iz softvera, sad tek vidim ovaj deo

Uvek brišeš svaki flag koji se digne zbog prekida. To je normalan redosled akcija.
Ovde je reč o tome da ga moraš obrisati i pre nego što omogućiš prekid. Mnogi ne vode računa o tome ali na taj način se može desiti da ti se izvrši prekidna rutina i onda kada ne treba.
Piše u datasheet-u da je on po inicijalizaciji na vrednosti logičke nule i treba da je tako. No, ko garantuje!
Ja vrlo često na startu inicijalizujem sve registre onako kako mi zahteva aplikacija. Ne podrazumevam ništa!
Reply
Nastavis li sa lemilicom spalices mosfet ponovo, a postoji velika sansa i lemilicu da spalis. Zakaci sijalicu neku sa zarnim vlaknom , neku 24v ako nadjes, eventualno mogu da posluze lepo i 2 auto sijalice od 5w vezane na red. Time ne pravis nikakav stres za mosfet i mozes opusteno da probavas, a vizuelno imas ispred sebe sijalice i mozes da vidis desavanja kada krenu vlakna da se zare i sijaju. Eventualno 2 parceta led trake 12v povezane na red bi isto mogle da posluze.
Za te stvari sa malim frekvencijama prekida jako lepo bi se videlo i sa zvucnom karticom na pc.
U svakom slucaju sve ovo sad je u domenu nagadjanja sta i kako jer bez osciloskopa zakacenog pre i posle VOM kola nemas pojma sta se zaista desava i gde je problem.
Linux is like a wigwam NO Windows NO Gates and an Apache inside
Reply
Nesto nije u redu sa ovim interuptom, uglavio sam "bb" variablu koja se inkrementuje na svaki 12499-ti "tt", i bb sam smestio u temperature set, ovo bi trebalo da menja bb varijablu na nekih lupam 14 sekundi, medjutim meni na ekranu se to menja svake sekunde, kako god da stavim i sta god da stavim isto svake sekunde, sta nije u redu sa ovim? https://pastebin.com/h6KvGEce Okinuo==false se pojavljuje tek na tih 12499 timer tikova gde inkrementuje bb za 1, i nebi trebalo u main loop da bilo sta inicijalizuje IOC, uopste mi nije jasno sta se desava i u cemu je problem, nikad nisam imao toliko muke sa picom, jesam jednom kada sam pravio i2c slave, ali ovo me sad izludjuje. Dali je moguce da IOC ne moze da se prekine isto tako i tajmer0, izgleda mi kao da kada se jednom pokrene da vise ne moze da se zaustavi. Ali opet i da i ne moze tajmer i ioc da se zaustave ta varijabla bb odakle se tako brzo inkrementuje, na sekund, odakle nije mi jasno, ovo je stvarno nesto blesavo ili sam ja poblesavio pa ne vidim tu neku gresku koja mi se stalno provlaci. Nemoguce da varijablu tt inkrementuje na 12499 za 1 sekund, tu onda nesto sa tajmerom nije kako treba, ili mi je logika u main loop pogresna.
Reply
Kad nesto ne ide ostavi za sutra, stvarno je to tako Smile

Evo gde je greska:

if (tt=12499)

Samo sam hteo da vidim dali tajmer i ioc rade svoj posao jer jos uvek ne mogu da dobijem da greje, ocigledno da tajmer radi prebrzo pa VOM ne moze da napuni tako brzo
Reply
Eh, da si imao osciloskop rešio bi to 10x do sad, jedan ulaz + jedan izlaz i neko vreme koje nagadjaš, priključiš osciloskop na dva kanala i nema šta da se nagadja, vidiš tačno šta se desilo, da li su prvo dobri nivoi ulaza i izlaza i koje je vreme ispalo na kraju kada ti njemu navodno poslao 1.2ms od ZCD tacke i šta se stvarno desilo u realnom kolu.

Dalje, za takve experimente ti treba nekako da menjaš to vreme makar dok ne nadješ adekvatnu radnu tačku tj vrednost koliko sme po jednoj poluperiodi da se uključi potrošač, jedan trimer/pot koji ide na A/D ulaz i koji direktno upravlja sa brojačem TMR0, upisuje count vrednost od 0-1024 (ili manji opseg) a startovanje tj sinhronizacija se dešava na ZCD PIN interapt (na obe ovice).

Tako se dobije promenljivo vreme upravljanja faznim zasekom i preko trimera praktično podešavaš izlaznu snagu.

Tu vrednost očitaj i zapamti jer ti je to limit koji nebi trebao da prelaziš i onda to vreme možeš po potrebi da menjaš od 0 pa do tog maximuma (npr max 30% snage).
Kada to rešiš i to ti proradi onda možeš da kažeš da si rešio i limitirao izlazni stepen i ostaje ti samo da iz main-loop radiš SW održavanje/kontrolu temperature.

Treba da nadješ takodje maksimalnu temperaturu kada pustiš kontinualno 30% snage, da znaš koliko može uopšte da se zagreje ta ručica pri toj podešenoj snazi i sa tim se onda dalje radi regulacija temeprature NA NIŽE od te maksimalne vrednosti.

PS: Experimente radi isključivo sa nekim pomoćnim opterećenjem, otpornici reda >100Ohm, sijalice, LED-nešto, JBC grejač na kraju!
Reply
Znam bas sam o tome razmisljao sta ako stavim drugi trafo sa manjom voltazom onda nece valjati ovaj zasek i treba se povecati vreme, pa sam nesto razmisljao da se tu doda jedan kanal adc da izmeri napon na ulazu pa da automatski podesi i zasek potreban... ali nema veze nadam se da cu danas uspeti da vidim sta nije kako treba, iz prve ruke vidim da mi zero kros ne reaguje pa zato i ne aktivira ioc, tako to kod mene ide uvek ima nesto da me maltretira, nekad sve proradi iz prve a nekad danima se zezam oko toga, sve napamet bez osciloskopa Sad
Reply
Ovde je problem, diode sam pregledao i nepropusne su u jednom smeru, u drugom smeru propusne i imaju isti otpor tu negde pola ohm, ali imam 5V manje napona posle greca umesto da tu imam 5V vise na tih ulaznih ~35V, H11 sam zamenio jer sam pomislio da je u kratkom spoju ali nije, zamenio i otpornik i umesto 1k stavio 10k, sta bi moglo biti problem ovde i toliki pad napona posle R1, diode? Otpornik izmerio ima tacno 10k

[Image: attachment.php?aid=39297]


Attached Files Thumbnail(s)

Reply
Unimerom, ma kakav da je, 100Hz pulsirajuci napon se ne moze izmjeriti. Stavi tu mjerenja radi bilo kakav elektrolit reda 22uF pa mjeri. Ponovo dolazimo do osciloskopa, za trivijalnu stvar.-
pOz
Reply
Diode se ne ispituju na otpornost nego na propusnost tj. pad napona.
Posle greca odakle je ideja da tu treba da bude 5V vise? Odakle da se stvori taj visak napona kada nemas elektrolit koji bi akumulirao vrsnu vrednost poluperiode?
Koliko ocekujes da treba da imas na emiter diodi u optokapleru, zasto mislis da je 1V malo?
Pogledaj pdf za dati optocupler pa ces videti da je radni napon emitera(diode) tipicno 1.0 do 1.2V zavisno od struje !
Linux is like a wigwam NO Windows NO Gates and an Apache inside
Reply
Eh kad bi ja znao te stvari nebi pitao, znaci ok je ako mi stoji 1V posle otpornika a pre optokuplera, znaci da je dioda napojena? Zamenio sam grec diode ali i dalje mi ne funkcionise zero kros, sada sam direktno u main loop stavio detektor

Code:
            if (IO_RA4_GetValue() == HIGH)
            {
                tt+=1;
                if (tt == 300)
                    bb+=1;
                okinuo = false;
            }

        if (okinuo == false)
        {
            okinuo = true;

            // interrupt on change for group IOCAF - flag
            IOCAFbits.IOCAF4 = 0; // Pin : RA4

            // interrupt on change for group IOCAN - negative
            IOCANbits.IOCAN4 = 0; // Pin : RA4

            // interrupt on change for group IOCAP - positive
            IOCAPbits.IOCAP4 = 1; // Pin : RA4

            INTCONbits.IOCIE = 1; // Enable IOCI interrupt
            draw_temperature(33, 0, bb);           
        }

Po ovome bi tebalo nakon 3 sekunde da inkrementuje na displeju za 1 ali nista se ne desava, kako ovo drugacije da izdebugujem imali neko kakvu ideju? Zero detektor je na ra4, proverio sam 5 puta, otpornike proverio svi ok, van svake pameti


Attached Files Thumbnail(s)

Reply
Kada sklonim HV napon, na zero pinu imam 5V, kada spojim HV na zero pinu je 0.8V, ali opet to je unimerom izmereno, ali dovoljno da se dodje do zakljucka da optokupler funkcionise, na 10ms se aktivira high tj na zero cross, to je taman tih kratkih high 0.8V koliko merim? Jel neko pogledao u pic, dali vidite nesto sto ja nikako da uklavirim? IO_RA4_GetValue() ne vidi high uopste

WPUA = 0b00001111; RA4 je ovde bez pullup
TRISA = 0b00011111; RA4 je ovde input
ANSELA = 0;
LATA = 0;
Reply
Direktno postavim ra4 high, i direktno u main loop da cita vrednost ra4, ne mrda, da nije pic stradao?
Reply
Zamenjen pic, ustanovio sam da zero detekcija funkcionise, ali postoji neki konflikt izmedju interupta i main loopa i ovog "okinuo" varijabla i nista mi nije jasno. Jos jedan veci problem je taj sto je potrebna skoro sekunda da displej promeni vrednost pa tako i kada dodam neki debug kounter u interuptu nista ne valja ovako kako sam odradio sa prekidom interupta i ponovnog aktiviranja iz main loopa jer ga aktivira tek nakon sto potrosi vreme na displej pa se jasno vidi spora inkrementacija toliko koliko je spor displej. Ovde treba ili izbaciti ocitavanje temperature na displeju i ostaviti samo temperaturu_set ili drugacije sve odraditi, ovako to nista ne valja niti mi je jasno kako bi se to moglo drugacije uraditi. Probacu jos jedan dan drugacije samo sa tajmerom i bez ioc, tajmer iskoristiti samo za prekid grejanja a sve ostalo iz main loop. Nije mi jasno dali interupt radi nezavisno od main loop da mi ne napravi problem opet to vreme na displeju ili vreme za ocitavanje temperature sa dac, nakon inkrementacije iz interupta bb i tt bi trebalo da skace ne po jedan nego po hiljadu-dve ali ustanovio sam da skace po jedan sto je znak da interupt ne radi nezavisno od main loop, katastrofa mi je sada i pic i ceo projekat da mi dodje da se ne bavim vise elektronikom kad mi ocigledno ne ide.
Reply
Probam jos ovako https://pastebin.com/tV1BWTTf ako ne bude radilo onda stvarno nemam ideju kako drugacije. Sad je sve iz main loop stim sto sam jedino tajmer interupt iskoristio kao neki delaj da mogu da precizno okinem mosfet off
Reply
Kompletno upravljanje praktično treba da se dešava u ISR rutini na ZCD dogadjaj, tada na tom mestu popuniš vrednosti tajmera i eventualno radiš regulaciju i to sve treba što brže da se odradi sa 5-10 naredbi.

Displej mnogo usporava priču i neophodno je da razdvojiš kontekst procesiranja, dakle sve bitno i brzo se dešava u ISR na ZCD dogadjaj, sve ostalo se vrti asinhrono u sporoj main-loop, iz nje samo postavljaš vrednosti za regulaciju i crtaš po displeju kad i koliko možeš.

Stvar je mnogo prosta, jedan pin ulaz sa interaptom i jedan pin izlaz sa tajmerom dalje od toga ne može da se uprosti u SW, šta se dešava u HW to ne znam, mogu samo neke LED diodice da ti pomognu da nešto pratiš kako to radi, snimi sa slow-motion kamerom, ne znam šta da ti drugačije preporučim da proveriš to ponašanje kola.

Može i preko stereo zvučne kartice 192ksps za toliko da se isprati ponašanje takvog kola, zvučna kartica kao DSO ako nemaš druga rešenja ...
Reply
Miki usanovio sam da isr i main loop ne rade razdvojeno, kada main loop uspori na displeju ISR kao da se zaustavi za to vreme, ne znam jel to tako radi na pic ili ja negde gresim. Stavio sam inkrementaciju neke varijable u slobodni timer interupt bez da ga zaustavljam, onda sam u main loop ocitavao na displeju tu varijablu, vidim da se varijabla inkrementuje samo za 1 umesto za 833 koliko bi trebalo da ispise na displeju jer tako kako sam tajmer podesio 833 timer tikova je 1s ali nije tako meni se inkrementuje samo za 1 i jedinicu ispise na displeju pa onda za sekund na sledem pisanju u displej ispise dva, pa tri... nije 833 pa dva puta toliko, pa tri puta toliko ... znaci da ISR izgleda pauzira dok displej ne ispise, ne znam sta tu nije kako treba nije mi jasno. Probam ovako iz post 314 i to je to. Ako krene da greje moracu da sklonim citanje temperature na displeju da ne usporava main loop, jako spor displej, nije za ovo.
Reply
Hmm, moguće onda da I2C i njegovi interapti imaju isti prioritet sa interaptom od ZCD ulaza, tj kod tog PIC ako se ne varam i ne postoji opcija za podešavanje prioriteta interapta.

Pogledaj moj code, imao sam dve interapt rutine, posebno za TMR0 koji mi je pravio 10us bazu za SW brojač(e) i posebno za ZCD stim što nisam imao I2C tako da mi je main loop bio inače veoma brz da sam čak imao i više vremena nego što mi treba pa sam dodao i neke LPF filtere eto čisto da uposlim kontroler do kraja.

https://github.com/mikikg/picss/blob/mas...t.X/main.c
Reply
Verovatno da je to u pitanju, nije mi jasno uopste. Ovako kako je u post 314 trebalo bi da proradi, vise mi nije ni bitno da mi ocitava temperaturu na displeju samo mi je bitno da proradi i da imam taj tajming off na 1.2ms da opet ne izgori mosfet Smile a mislim da mu je onda tako dovoljno da greje 1.2ms na svakih 10ms ne racuinajuci koliko treba ads1115 oko 3ms da izbaci temperaturnu varijablu i koliko picu treba da napravi kalkulaciju neka je i 20 pa i 50ms kasnjenje dogrejavanja nije strasno koliko mi je strasno da displeju treba skoro sekund da osvezi taman da se grejac ohladi za to vreme, temperaturno ocitavanje na displeju cu da izbacim i da imam samo temperaturu-set koja ispisuje na displeju tek onda kada se pritisne jedno od dugmadi, za to vreme grejac ne radi
Reply
Radi! Ne znam sta je problem sa VOM nadam se da nije u pitanju greska u data shet ali ovako kako sam merio unimrom napon izmedju blue i green sa podesenjem na 50ms delaja izmedju on stanja i off stanja dobio sam nekih dvadesetak volti, sve mi se cini da nije onako kako stoji u data shet nego vomu treba vreme u milisekundama da bi dao 8-9 volti na izlazu a ne kako stoji u mikrosekundama. Ukinuo sam tajmer i dodao klasican delay_ms izmedju okidanja i konacno grejanje funkcionise. Morao sam i FSR na ads1115 da zamenim sa 4.096 jer sa FSR 2.048 nije moglo da dosegne preko 161 stepen celzijusa. Postoji jos jedna izmena na shemi, na R4 nije vise ni 1M niti 10k sada je 330 ohm jer bez grejaca ads1115 treba da ocita rail voltage ali cak ni sa 10k ta vrednost nije bila stabilna i ocitavanje je variralo, nakon dodavanja 330 oh umesto 1M ili 10k sada tu ocitavam zakucano 571 celzijusa bez grejaca. Grejanje nije bilo tako brzo sa ovom softverskom kombinacijom pa mu je trebalo petnajstak sekundi da dosegne 200 C, ali dodao sam jedan kounter tako da mi ocita trenutnu temperaturu nakon tog desetog kounta, dobio sam zagrevanje od nula do 200 C za nepotpunih 3s sa skokom za nekih 10-20 C vise nego sto treba, drugacije ni ne moze, ili da se smanji skok a izgubi na brzini zagrevanja ili da ostane ovako kako jeste sa izuzetno brzim zagrevanjem, tako da ovako ostaje. Nisam izmerio unimerom dali je temperatura tacna, to cu kada odradim jedno 3d print kuciste koje cu na JLCPCB najverovatnije da narucim. Prezadovoljan kako dobro radi, za sada ne primecujem da se bilo sta greje i dokle ce raditi videcemo! Smile

Oovo su sve izmene
Software -> https://pastebin.com/LAb1QUdB
[Image: attachment.php?aid=39323]


Attached Files Thumbnail(s)

Reply
https://www.youtube.com/watch?v=DNDUvN5Uod0
Reply


Forum Jump:


Users browsing this thread: 5 Guest(s)