Kirjoittaja Aihe: arduino pwm  (Luettu 2728 kertaa)

Poissa Scroll

  • Lämpöpumppuaktiivinen
  • *****
  • Viestejä: 2097
Vs: arduino pwm
« Vastaus #45 : 08.06.18 - klo:16:18 »
En tunne Arduinoa, mutta pikagooglaus väittää mm. näin:

Juu, osassa kirjastoja on käytetty C++:aa totta, mutta tuo ehdottamasi koodirakenne ei suoritu sellaisenaan Processing ympäristössä.

Tottahan Arskan kääntäjä C++:n konekieleksi vääntää koska viimekädessä prosessori ei tiedä mitä se koodi on alunperin ollut.

Koodissasi on kuitenkin pakko olla tiettyjä Processing-ohjelmointialustan elementtejä, muuten se ei suoritu. Nyt siitä puuttuu ne, mm. main() funktio. Vai oliko tuo vain osa siitä koodista?

Miten ajattelit toteuttaa tämän ehdotuksesi: "Voit myös halutessasi muuttaa calcIrms laskennan ns. rinnakkaiseksi."
alan amatihenkilö

Poissa repomies

  • Lämpöpumppuaktiivinen
  • *****
  • Viestejä: 6798
Vs: arduino pwm
« Vastaus #46 : 08.06.18 - klo:17:10 »
Juu, osassa kirjastoja on käytetty C++:aa totta, mutta tuo ehdottamasi koodirakenne ei suoritu sellaisenaan Processing ympäristössä.
Tottahan Arskan kääntäjä C++:n konekieleksi vääntää koska viimekädessä prosessori ei tiedä mitä se koodi on alunperin ollut.
Miten ajattelit toteuttaa tämän ehdotuksesi: "Voit myös halutessasi muuttaa calcIrms laskennan ns. rinnakkaiseksi."

tj86430 ei väittänyt mitään aiheesta "ns. rinnakkaiseksi." vaan sen teki nimimerkki mk. Ja tuosta noin aika äkkiä kyllä näkee että ajatuksena on muuttaa emon librarya siten että se käpistelee kerralla useampaa pinniä, sen sijaan että tehtäisiin useampi emon-instanssi ja kutsutaan erikseen jokaista instanssia odotellen. TÄLLÄ on ehkä jo merkittävä vaikutus suoritusaikoihin, toisin kuin if-siistinnällä. Sittenkin voi olla että eniten tulisi nopeutta lisää parantamalla analog readien nopeutta nostamalla ADC kelloa. Mutta lisättäköön ettei minun mielestäni jollan kannata vieläkään lähteä optimoimaan nopeutta ellei ole havaittua suorituskykyongelmaa.
« Viimeksi muokattu: 08.06.18 - klo:21:24 kirjoittanut Samppa »
AIT PWZSV9 MLP, Fujitsu AWY17 ILP, OKT 165/198m2 Pirkkala (sekä 3x Chunlan mökeillä)

Poissa mk

  • Konkari
  • ****
  • Viestejä: 590
Vs: arduino pwm
« Vastaus #47 : 09.06.18 - klo:15:56 »
Pari virhettä löytyi.
Esim. taulukkomuuttujan alustus vaatii aaltosulut.

Lisäsin funktion calcIarv8.
(Average Rectified Values)
Sisäinen looppi ei sisällä liukulukuja.
Sisäisen summan tyyppi on long joten pari miljoonaa näytettä mahtuu.
Vastaavan tyylinen Irms kestää sekin yli 10000 näytettä.
Float/long suoritusnopeuksien eroista en osaa sanoa, jossain oli jotenkin testattu, ettei suuria eroja olisi.

Funktio ei palauta arvoa.
Tuotokset löytyy Iarv8[] muuttujasta.
Alustus kuten aiemmin.

Arvo on keskiarvo * muuntosuhde * tarkkuus

Esim.
Setuppiin
...
emon.current8Reset();
emon.current8(1, 5, 68);
emon.current8(2, 6, 68);
emon.current8(3, 9, 68);

Looppiin
...
emon.calcIarv8(1480);
...
Serial.print(emon.Iarv8[1]);
Serial.print(" ");
Serial.print(emon.Iarv8[2]);
Serial.print(" ");
Serial.print(emon.Iarv8[3]);
Serial.print(" ");

Poissa repomies

  • Lämpöpumppuaktiivinen
  • *****
  • Viestejä: 6798
Vs: arduino pwm
« Vastaus #48 : 10.06.18 - klo:21:02 »
Mk, vaikka sinänsä voikin olla fiksua lukaista kaikki virtatiedot kerralla, jollan ei välttämättä kannata lähteä kuitenkaan pelkästä optimoinnin ilosta laittamaan enempi vähempi kehitysasteella olevaa koodia ns. tuotantoon, kun kuulemma sen 100ms viiveen lisäys looppiin ei toimintaa muuta mihinkään. Nopeus ei nyt ole se tärkein juttu vaan laskennan virheettömyys tuossa virtojen muuttamisessa pwm-ohjauksiksi. Nykyisessä kuosissaan se emon-kirjasto on kuitenkin aika laajalti koeponnistettu ja siten todennäköisesti melko vähäbuginen. Sanoisin että jos se ei ole rikki, ei kannata koskea. KISS-periaatteella vaan eteenpäin.

Sinänsä tuo kontribuutiosi vaikuttaa ihan ok suunnalta. Ehkä voisit tehdä siitä patchin ja viskata sen emon-kirjaston kehittäjille arvioitavaksi.
AIT PWZSV9 MLP, Fujitsu AWY17 ILP, OKT 165/198m2 Pirkkala (sekä 3x Chunlan mökeillä)

Poissa mk

  • Konkari
  • ****
  • Viestejä: 590
Vs: arduino pwm
« Vastaus #49 : 13.06.18 - klo:12:38 »
Toki näin.

Edellinen yritys oli vielä aivan täysin testaamatta.
Tämä nykyinen on sentään käännetty onnistuneesti.
(Uno R3 löytyy myös, kun löytyy)

Tekelehän on ihan vaan mielenkiinnosta, jos sitä siis on.

calcIarv8 vaihtui muotoon calcI88, joka tuottaa molemmat arvot ilman liukulukuja.
Säädettävä filtteri tuli myös matkaan, jonka arvo on kaikille mittauksille sama.
Palautuvat arvot on n/1024 murtolukuja, kokonaisosa siten n>>10 ja murto-osa n&1023.

Käyttö:
current8Reset(max ADC muutosnopeus per 2 mittausta) // pinnit nollautuu samalla
current8(pinnin indeksi, pinni, kalibrointi)
calcIrms8(Number_of_Samples) // arvot Irms8[]
calcI88(Number_of_Samples) // arvot Irms88[] ja Iarv88[]