Fórum témák

» Több friss téma
Fórum » Arduino
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Lapozás: OK   523 / 854
(#) Kera_Will hozzászólása Ápr 23, 2019 /
 
Ez a 100000 EEPROM írási/törlési ciklus külön minden egyes bájtra / bitre / elemi tároló cellára külön külön vonatkozik vagy a teljes területre.
Esetleg lehetne "fregmentálással" szétszórni az adatokat hogy ne csak egy kis tár terület kopjon. Habár lehet ez az EEPROM védő algoritmus teljesen lefoglalná a uC amúgy is szűkös program FLASH területét .
Mondjuk az első pár bájtot beáldozni amolyan "üzemóra számláló" irási/törlési ciklus tárolónak és
annak függvényében mindig más más EEPROM terület részre allokálni a mentendő bájtokat.
Igaz ez némi "FAT szerű" táblázatot eredményez az EEPROM területén és az kopna el leghamarabb.
A hozzászólás módosítva: Ápr 23, 2019
(#) mateatek válasza JoeA hozzászólására (») Ápr 23, 2019 /
 
Esetlegesen használhatsz 24C02, 24C04, stb EEPROM-ot. 1000000 írás ciklust bírnak, tehát tízszerese a 328-ban lévőnek. I2C buszon keresztül használhatod. Filléres dolog, de rengeteg mindenből tudsz kitermelni, ha éppen nem vagy bolt közelben. Monitoron keresztül az SDRAM modulig sok kidobott cuccban van.
(#) JoeA válasza mateatek hozzászólására (») Ápr 23, 2019 /
 
Ez a projekt abból épült amit itthon találtam! Semmit nem akarok hozzá venni, tenni (ez megdőlt az SSR-nél, mert ami itthon volt, az 20V-ot akart, de az nem volt a Nano kimenetén )!
Ráadásul így könnyen után építhető. Találtam sok projektet, de mindegyikkel az volt a bajom, hogy vagy nokia kijelző kellett, vagy magának építette az SSR-t (bár ez utóbbi még foglalkoztat, benne rejlik a teljesítmény szabályozás lehetősége, de mivel igazából most kezdek az arduinoval, egyszerűbb a nullátmenetes SSR-t készen megvenni, lesz ami lesz alapon), vagy nyákot kellett hozzá készíteni, mert csak a procit használta az arduino-ból, I2C átalakítót rakott a kijelzőre (ezt mondjuk gyorsan lehetett orvosolni) és így tovább. Szóval ez ilyen 5 percesen után építhető most, tényleg minimális alkatrészből. Azért a 100e írás sokáig elég kell legyen, pár száz után már ránézésre lehet tudni az első hegesztés után, hogy mit állítson az ember szerintem. Gondolom, amíg egy szalag el nem fogy, kb. ugyan azzal a beállítással végig lehet dolgozni. Töröm az agyam, hogy el lehessen tárolni többet, és akkor még kevesebbszer kell írni az eepromot (esetleg egy peremkerekes kapcsolóval lehet programot váltani, mert az van itthon és akkor el sem kell tárolni semmit, hogy mi volt a legutóbbi beállítás )
Ehhez most kell egy Arduino panel (nálam Nano), egy pontmátrixos kijelző (nálam 2x16 karakteres), egy SSR (kb 3000Ft költség, az enyém 9€+1,65€ posta volt, kínából ez olcsóbb), egy KY-040 enkóder, pár ellenállás, egy termisztor, egy elkó, ha nem menne az enkóder, kábel, egy mikrokapcsoló és a mikrosütő trafója.
A hozzászólás módosítva: Ápr 23, 2019
(#) Bakman válasza Kera_Will hozzászólására (») Ápr 23, 2019 /
 
Idézet:
„Ez a 100000 EEPROM írási/törlési ciklus külön minden egyes bájtra / bitre / elemi tároló cellára külön külön vonatkozik vagy a teljes területre.”
Minden egyes bájtra. Egy bit írásakor is törli az adott bájtot majd a módosítottat írja vissza.

Megoldás lehet az EERAM használata. Pl.: 47C16. Igaz, ezek perpillanat elég kis méretben kaphatóak (2 kByte és 512 Byte).
(#) kapu48 válasza JoeA hozzászólására (») Ápr 23, 2019 / 1
 
Szerintem a nem létező problémát bonyolítjátok itt az egekig túl!
Ha csak akkor ment EEPROMba, mikor szükséges.
Kijöhet olyan 50 írás havonta max, ha minden hétvégén használja?
100000/50/12= 166év?!
(#) mateatek válasza kapu48 hozzászólására (») Ápr 23, 2019 / 1
 
Ez újabb problémát vet fel, mert csak 100 évig garantálja az adatok tárolását az adatlap.
(#) kapu48 válasza mateatek hozzászólására (») Ápr 23, 2019 /
 
Hogyan kapták ezt a 100 évet?
Még nem is gyártanak 100 éve AVRt!
(#) pipi válasza JoeA hozzászólására (») Ápr 23, 2019 /
 
Hali!
Pont nem nullátmenetes SSR-t szoktak használni.
A szinuszhulámok (20ms) számát állítják be időnek, teljesítményt meg a szinuszhullám fázishasításával állítják be, vagyis a szinuszpúpból mekkora időt vezet a triak/ssr.
Mindenképp a nullátmenethez kell szinkronizálni.
Ha lemondasz a teljesítményszabályozásról, akkor esetleg mehet a zerocross-os SSR, de akkor is szinkronizálnod kell a nullátmenethez a gyújtást
(#) JoeA válasza pipi hozzászólására (») Ápr 23, 2019 /
 
Hát ez az Az eredeti projekt, amiből indultam nem néz semmit, 50ms a lépésköz és nullátmenetes az SSR. Az enyémben 10ms a lépés és még abból a projektből származó weld rutint használom kicsit kibővítve, de mindenféle fázis figyelés nélkül. A végén mégsem úszom meg a saját SSR építést Egyenlőre kipróbálom, hogy így mit alkot, aztán próbálkozom először a szinkronnal, aztán másik SSR-el vagy sajáttal teljesítményt szabályozni ha kell.
(#) pipi válasza JoeA hozzászólására (») Ápr 23, 2019 /
 
A nullátmenetes ssr-t a nullátmenetnél lehet begyújtani. Ha jóval nullátmenet után próbálsz impulzussal gyújtani, semmi nem történik... Vagy olyan hosszú gyújtóimpulzus kell (10ms körül) ami garantáltan átfedi a nullátmenetet - szóval bizonytalan. Ha 9ms-t választasz akkor lehet hogy nem gyújt, ha meg 11-et akkor lehet kétszer gyújt, Ha pont 10-et akkor az is érdekes eset.
Szóval mindenképp szinkronizálni kell a nullátmenethez, ha megnézel több projektet akkor egy optokapun keresztül jelez a proc lábára...
Szerintem nem véletlen a 20ms (+ és - szinuszpúp) lépésköz, hogy a hálózatból mindkét periódust terhelje...
(#) JoeA válasza pipi hozzászólására (») Ápr 23, 2019 /
 
Láttam pár ilyet, de a legtöbb nem foglalkozik vele és nem is 10ms a lépésköz. Ez itt nagyon korrektül van összerakva, 10ms a lépése, majd ebből indulok. Jól jönne egy szkóp ami itt nincs
(#) pipi válasza JoeA hozzászólására (») Ápr 23, 2019 /
 
D2-n ott van az optós nullátmenet figyelés...
A szoftvert nem rágtam át, de itt figyel: //Ráköltözünk a ZCD interrupt-ra
attachInterrupt(digitalPinToInterrupt(PIN_ZCD), zeroCrossDetect, FALLING);
A hozzászólás módosítva: Ápr 23, 2019
(#) proba válasza JoeA hozzászólására (») Ápr 23, 2019 /
 
Azt gondolom, ha a beállítható bekapcsolási idő nem legalább ötszöröse a hálózati periódusidőnek, mindenképpen kell szinkronizálni. Nem mindegy hogy egy hullám, vagy kettő, (ez már ott is 10% hiba). Fázishasításhoz meg teljesen alkalmatlan szinkronizálás nélkül. A szabályzás, meg a hálózati frekvencia keveréke nagyon szép hullámzó kimenetet eredményez.
(#) JoeA válasza proba hozzászólására (») Ápr 23, 2019 /
 
igen, ez felvetődött bennem is, ezért kérdeztem. Fázishasítást még nem tervezek, majd egyszer talán. A githbon a keresőben "arduino spot welder" találati listából, talán minden huszadik foglalkozik a ZCD-vel és talán ha 1-et találtam amelyikben van és SSR-t használ. Teljesítmény szabályozást meg igazán nem is láttam ha jobban meggondolom.
(#) JoeA hozzászólása Ápr 23, 2019 /
 
Talátam egy ilyet (a ZCD a 2-es lábra megy nano-n):

  1. void sinusMax()
  2. int zeroCrossPin = 2;
  3.  
  4. {
  5.   while(digitalRead(zeroCrossPin));
  6.   while(!digitalRead(zeroCrossPin));
  7.   delayMicroseconds(sinusMax_us);
  8. }
  9.  void Weld(int ms)
  10. { sinusMax();
  11.   if(ms) weld(1);
  12.   delay(ms);
  13.   weld(0);
  14. }


A 2-es nanón int bemenet. Megoldja a megszakításkezelést automatikusan az arduino? Esetleg kell valami extra neki, mégiscsak egy dedikált folyamat.
(#) pipi válasza JoeA hozzászólására (») Ápr 23, 2019 /
 
Ebben nincs interrupt kezelés, egyszerűen megvárja a következő nullátmenetet a 2 while-vel, majd vár sinusMax_us időt, és ms ideig adja a gyújtóimpulzust.
Amit előzőleg linkeltél, és beidéztem ott van az interrupt deklaráció.
(#) JoeA válasza pipi hozzászólására (») Ápr 24, 2019 /
 
Köszönöm! Megnyugodtam Amiben volt, sehol nincs interrupt, csak a 2-es lábra kötötte és azt hittem, hogy a megszakítás miatt. Ezt nem értettem. Ezzel a megoldással mehetne bármelyik lábon a zerocrossdetect? Megvárja a sinus maximumát, ad egy gyújtóimpulzust a megadott időtartamig, az SSR meg a következő nullátmenetnél bekapcsol (az enyém nullátmenetnél kapcsol) és úgy marad amíg van a bemenetén jel, ami szintén a maximum környékén szűnik meg.
(#) kapu48 válasza JoeA hozzászólására (») Ápr 24, 2019 /
 
Engem nagyon zavar, hogy ilyen elemi dolgokat nem ismersz, mint:
Előbb deklaráljuk a változót:
  1. int zeroCrossPin = 2;  // Nem bele a fügvénybe!
  2. void sinusMax()
  3. {
  4.   while(digitalRead(zeroCrossPin));
  5.   while(!digitalRead(zeroCrossPin));
  6.   delayMicroseconds(sinusMax_us);
  7. }
  8.  
  9. //Ez a weld(1); mit csinál?

Esetleg még így lenne jó:
  1. void sinusMax()
  2. {
  3.   int zeroCrossPin = 2;  // bele a fügvénybe!
  4.   while(digitalRead(zeroCrossPin));
  5.   while(!digitalRead(zeroCrossPin));
  6.   delayMicroseconds(sinusMax_us);
  7. }
A hozzászólás módosítva: Ápr 24, 2019
(#) JoeA válasza kapu48 hozzászólására (») Ápr 24, 2019 /
 
Igazad van, elismerem. Nem így volt a kódrészletben pont ott ahonnan másoltam és nem akartam kihagyni (bár jobb lett volna), hogy a 2esen figyel és odaírtam (bizonyára valahol benne volt, de nem itt). Külön fájlban deklarálok, ezt meg csak úgy találtam a githubon és az érdekelt volna, hogy mindenképpen megszakítás kezeléssel kell-e kezelnem a nullátmenetet vagy mehet más pinről is. Legközelebb odafigyelek rá, bocsánat!
Az meg, hogy a weld(1) mit csinál fogalmam sincs, nem az én kódom, csak a nullátmenetet keresgéltem épp.
Tehát a kérdés, hogy kell-e mindenáron megszakítással kezelni a nullátmenet érzékelését?
(#) tbarath válasza kapu48 hozzászólására (») Ápr 24, 2019 /
 
Szerintem kár 2 byte-ot elszótni erre az 1 byte-nyi adatra, ami ráadásul konstans...
(#) tbarath válasza JoeA hozzászólására (») Ápr 24, 2019 /
 
Nem szükséges interrupt, de talán egyszerűbb úgy.
(#) kapu48 válasza tbarath hozzászólására (») Ápr 24, 2019 /
 
Igazad van!

De arduino berkekben ez sajnos bevett szokás!
Könnyebb mindenűt egyféle típust használni, mint megtanulni mi köztük a különbség.
És melyiket mikor kel vagy célszerű használni?
(#) JoeA válasza tbarath hozzászólására (») Ápr 24, 2019 /
 
Félve kérdezek, de mi az oka? Ha az alábbi kódrészletet jól értem, mindenképp akkor lép tovább, ha a beállított késleltetés eltelt a nullátmenet után. Ebből esetleg egy megszakítás tudná elvenni a vezérlést ha jó amit eddig olvastam az arduinoról (ami egyáltalán nem biztos kb. 2 hete kezdtem olvasgatni és 1 hete próbálok valamit írni is rá.) Ha nem szakítja meg semmi, akkor ez is lehet elég pontos detektálás?
(#) kapu48 válasza JoeA hozzászólására (») Ápr 24, 2019 /
 
Mivel neked nem kellene minden null-átmenetre megszakítás, hanem csak akkor, ha nyomod az indító gombot.
Ezért szerintem felesleges bele bonyolódni!
Jó ide az alkalmazott lekérdezéses eljárásod.
(#) JoeA válasza kapu48 hozzászólására (») Ápr 24, 2019 /
 
Ezt eleve a gombnyomás után gondoltam lekérdezni abban az ágban ahol a kimenetet (SSR) kapcsolja.
(#) kapu48 válasza JoeA hozzászólására (») Ápr 24, 2019 /
 
Érten én!
Ezért felesleges az interupt 50Hz minden nul-átmeneténél.
Mert nem is akarsz mindig kapcsolni SSRt.
(#) Peter65 válasza JoeA hozzászólására (») Ápr 24, 2019 /
 
Pedig az lenne a korrektebb, ha a trafót fázishasítással kapcsolnád be, mondjuk 4 félperiódus alatt felfuttatva. Persze, tudom, általában nem foglalkoznak vele.
(#) JoeA válasza Peter65 hozzászólására (») Ápr 24, 2019 /
 
Az lenne a lágyindítás, de akkor nem lenne 10ms-os impulzus! Hmm...
(#) benjami válasza JoeA hozzászólására (») Ápr 24, 2019 / 1
 
Beállítások EEPROM-ba mentését én úgy csináltam, hogy akkor mentettem, ha már legalább 5 másodperce nem történt semmilyen felhasználói beavatkozás, tehát gyakorlatilag befejeződött a beállítás. Ráadásul csak azokat a bájtokat írtam, amiknek a tartalma megváltozott (semeddig nem tart olyan saját EEPROM író függvényt írni, ami először összehasonlítja az EEPROM aktuális tartalmát a beleírandó tartalommal, és csak akkor ír ha ez eltér).
(#) Peter65 válasza JoeA hozzászólására (») Ápr 24, 2019 /
 
Ha belegondolsz, egy 10msec-es impulzust, egy félperiódust, egy DC jelnek is tekinthetsz. Nem szeretik ezt a trafók. Az iparban is lágyan futtatják fel, mert a transzformátor mágneses állapotának ez a kedvező. Ha nincs lágy-indítás, akkor is elvileg egy 90°-os gyújtásszöggel kellene kezdeni, hogy ne vidd mindjárt az első félperiódussal telítésbe a vasat.
Következő: »»   523 / 854
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem