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   225 / 853
(#) Kovidivi válasza siletto hozzászólására (») Máj 7, 2016 /
 
Tényleg ne vicceljetek már! Ott az Arduino, a maga összes energiatakarékos, alvó üzemmódjával, és ti CMOS IC-t akartok berakni? Ez olyan, mintha lenne egy ferrarid, de hátulról tolnád egy trabanttal. Fogni kell az RTC-t, beállítani, hogy mondjuk mp-ként adjon egy impulzust. Ezt számolod az AVR-rel, vagy hajtod az egyik timer-t, lényegtelen, és ha kell, majd felébred az AVR. Elvégzi a szükséges dolgokat, majd lefekszik aludni. Minimális a fogyasztása ilyenkor.
Ha vannak hiányos ismeretek, akkor pedig azokat kell pótolni, mert később is jól fog jönni a sleep módja az AVR-nek, nem pedig megkerülő megoldásokat kell keresni, és túlbonyolítani a feladatot. Persze, csak ha haladni a korral, és tanulni akar az ember.
A hozzászólás módosítva: Máj 7, 2016
(#) Bell hozzászólása Máj 7, 2016 /
 
Az ellenérvekkel egyetértek,
DE:
Adott volt az Arduino és az RTC, feladat a fogyasztás minimalizálása.
Az Arduino alvó állapotban is 5-10mA körüli áramot igényel, így CMOS-al, RTC-vel 10-50 mikroamper az idő nagy részében.
Ez 2 nagyságrenddel kisebb.
(#) Kovidivi válasza Bell hozzászólására (») Máj 7, 2016 /
 
Hát nem tudom. Én itt: Bővebben: Link 0.9mA-t látok, de még ezt is bőven sokallom.
Itt pedig 1uA (!): Bővebben: Link. Szóval kicsit még gyúrni kellene a szoftveren és a hardveren, mert képes rá az Arduino lapka. Alacsony feszültség védelmet ki kell iktatni, ez tuti, mert feleslegesen fogyaszt. De ha siletto elolvassa a két linket, biztosan megvilágosodik.
Ha jól emlékszek, én 15-30uA-t értem el, folyamatosan ketyegő timer2-vel. A lényeg, hogy két-három hétig elmegy az AVR egy 70mAh-s akksiról (ha a nagy áramot fogyasztó LED-eket nem kapcsolom be), másodpercenként felébredve, majd azonnal megy is aludni. És ez a verzió még nem is energiatakarékos. Akkor lenne igazán jó, ha 8mp-ként ébredne fel, vagy még ritkábban, és ha nem kellene megvárnom, amíg a timer lép egyet (ugyanis hamarabb készen vagyok az interrupttal, mint hogy a 32768Hz-es kvarc 1-et lép, és ilyenkor újra jön egy interrupt). Plusz minden mp-ben ellenőrzöm, hogy átléptem-e az 59-et, ekkor a perc változóhoz adok egyet, ott is ellenőrzök, és így tovább. Ez teljesen felesleges. Elég lenne egy unsigned long változó, ami a mp-eket számolja, és mikor lekérdezem az időt (LED-ek bekapcsolása), csak akkor számolja ki a pontos időt, tehát csak 1x fut le bekapcsolásonként ez a sok if. De nekem így is elegendő, hetente kell töltenem, ha használom is a karórát.
A hozzászólás módosítva: Máj 7, 2016
(#) Bell válasza Kovidivi hozzászólására (») Máj 7, 2016 /
 
Valaki írta itt nemrég a fogyasztást, én nem mértem, nem jártam utána.
De ha úgy áll a dolog mint írtad, nem kell semmit kapcsolgatni, elég 1 percenként ébreszteni.
(#) Kovidivi válasza Bell hozzászólására (») Máj 7, 2016 /
 
Persze, alapból 5-15mA-t fogyaszt az AVR, ez a normál üzemmód. Ezért találták ki az energiatakarékos üzemmódokat is. Ha az RTC tud ébresztést, akkor csak be kell állítani, aludni menni. Felébred az AVR, ismét beállítja a következő ébresztést, és elmegy aludni.
A hozzászólás módosítva: Máj 7, 2016
(#) Bell válasza Kovidivi hozzászólására (») Máj 7, 2016 1 /
 
Nem kell új ébresztést beállítani, elég leszámolni 10-et a tíz perchez és akkor mérni, tárolni.
(#) RoliNyh hozzászólása Máj 7, 2016 /
 
Szép napot!

Meg tudná mondani valaki, arduinoval hogyan oldható meg földfüggetlen feszültségmérés?
Konkrétan sorba kapcsolt Li-Ion cellák feszültségét kellene mérnem egyenként...
Esetleg valami célhardver létezik rá?
vagy valami ötletes megoldás?
(#) Kovidivi válasza RoliNyh hozzászólására (») Máj 7, 2016 / 1
 
Attól függ, hány cellát, és milyen pontossággal akarsz mérni. Ha csak a lekapcsolási feszültség a lényeg és/vagy nem kell nagy pontosság, akkor simán kivonod a mért feszültségekból az alatta levőket. Így felosztod a 10bitet a cellák között. Egyébként el kell tolnod minden feszültséget a GND-re, müveleti erősítő megoldja. Más lehetőséget nem ismerek.
Keress kapcsolási rajzot több cellás lithium ion védelemekre, hátha valami egyszerű megoldást használnak.
A hozzászólás módosítva: Máj 7, 2016
(#) siletto válasza RoliNyh hozzászólására (») Máj 7, 2016 /
 
Csak ötlet, de esetleg használhatnál optocsatolót is. A cellák közé kötöd egy ellenálláson keresztül a kibocsátó diódáját, a fototranzisztort meg egy ellenálláson keresztül a táp és föld közé. Az ellenálláson eső feszt. tudod mérni.


Az időzítésen még gondolkodom majd, szerintem a cmos lesz a nyerő. Az arduino felületen kívül nem értek a mikrokontrollerhez, nincsenek eszközeim hozzá, ilyen mélységben nem tudok csak úgy belemenni.
(#) RoliNyh válasza Kovidivi hozzászólására (») Máj 7, 2016 /
 
Valójában éppen ezt a kivonósdi módszert akarnám elkerülni, 24 sorosan kapcsolt cella mérésére kellene valami okosság...

Az optocsatolós módszert nem igazán használnám, mivel valós időben terhelés alatt is tudni kellene mérnem.

Egyébként elektromos kerékpár akkupakk cellafeszültség mérő lenne...
(#) siletto válasza RoliNyh hozzászólására (») Máj 7, 2016 /
 
Szerintem ez terhelés alatt is működik, de majd megmondják a szakértők
(#) jeges válasza bunny hozzászólására (») Máj 7, 2016 /
 
sajnos to223...to89 stab ic nem igazán van nagy felületük hütési szempontbol max 100..200mA max midugy hiába 500mA....1A gyári adatok!
(#) RoliNyh válasza siletto hozzászólására (») Máj 7, 2016 /
 
Ha sorbakötöm a ledet a cellákkal, akkor ott nem folyhat nagy áram, mert tönkre megy a led...
(#) siletto válasza RoliNyh hozzászólására (») Máj 7, 2016 /
 
párhuzamosan,nem sorba.
Párhuzamosan kötöd a ledet az akkuval és egy előtétellenállással(nyilván azt a leddel sorba).
Minnél magasabb a feszültség, annál több áram folyik a leden, annál több áram fog folyni az optocsatoló kimenetén is, amit szintén sorba kötsz egy ellenállással, és figyeled a rajta eső feszültséget.
(#) RoliNyh válasza siletto hozzászólására (») Máj 7, 2016 /
 
Ja hogy a cellákkal párhuzamosan egyet-egyet, értem már...
Csak az a gond vele, hogy így meg állandóan fogyasztja a villanyt...

Azért köszi...
(#) _BiG_ válasza RoliNyh hozzászólására (») Máj 7, 2016 /
 
Egyszerű: az arduinonak külön táplálást kell adni (tehát nem a mérendő akkupakk adja a delejt neki), így földfüggetlen lesz a mérés, ugyanúgy, ahogy egy multiméternél.
A mérőpontokat akár kéttárcsás jaxley kapcsolóval kötheted a mérőbemenetre.
(#) RoliNyh válasza _BiG_ hozzászólására (») Máj 7, 2016 /
 
Az nem játszik, hogy én kapcsolgassam át folyton minden cellára, szóval ezt automatizálni kellene, a 24 bemenetválasztó relé meg már kissé megdrágítaná a dolgot.

Analóg multiplexerre gondoltam még, de nem tudom az mennyire hamisítaná meg a mérendő feszültséget, és azt sem, hogy mennyi a szórása egy ilyen áramkörnek, valamint azt sem tudom, lehet -e egyáltalán valós feszültséget mérni analóg multiplexeren keresztül...
(#) _BiG_ válasza RoliNyh hozzászólására (») Máj 7, 2016 /
 
A kapcsolósdit azért mondtam, mert nem részletezted, hogy kézzel mérsz-e, vagy automatikusan szeretnéd.

Az analóg kapcsolón esik némi feszültség, úgyhogy mérési hibát okozhat. De ha a mérőműszered nagy bemenő ellenállású lenne, akkor ez a hiba kicsi lesz, a kvantálási érték alatt.

Vannak pl. videojel-kapcsoló áramkörök, ezeknek alakhűen kell átvinniük a ráadott jeleket, ráadásul nagyfrekvencián is. Szerintem az ilyen, vagy ehhez hasonló kapcsolók alkalmasak ide is. Bár én még nem láttam ilyen megoldást, hogy erre használnák.
(#) kapu48 válasza siletto hozzászólására (») Máj 8, 2016 /
 
Butaság az egész CMOS-os ötlet!

Mikor pársoros interupt programmal be lehet állítani a következő megszakítást az RTC-ben.

Kb. ennyi:
\Arduino\libraries\Sodaq_DS3231\examples\RTCinterrupts.ino
  1. //Interrupt service routine for external interrupt on INT0 pin conntected to /INT
  2. void INT2_ISR()
  3. {
  4.   //az int elvégzi az élesztést
  5.   //Keep this as short as possible. Possibly avoid using function calls
  6.   DateTime now = rtc.now(); //get the current date-time  
  7.   uint8_t hour = now.hour();
  8.   uint8_t min = now.minute();
  9.   uint8_t sec = now.second();
  10.  
  11.   min += 10;            // +10 perc
  12.   if(min >= 60){
  13.           min = 0;
  14.           ++hour;
  15.           if(hour == 24){
  16.             hour = 0;
  17.           }
  18.   }
  19.   // következő interupt kérés setup
  20.   rtc.enableInterrupts(hour,min,sec);    // interrupt at (h,m,s)
  21.   //
  22.    //Srial.println(" External Interrupt detected ");
  23. }
A hozzászólás módosítva: Máj 8, 2016
(#) GPeti1977 válasza _BiG_ hozzászólására (») Máj 8, 2016 /
 
"Bár én még nem láttam ilyen megoldást, hogy erre használnák."
Nem is fogsz mivel nem erre valóak és nem is jók rá.

Nekem lenne egy ötletem, ha Li akkuról van szó akkor 3V feletti a feszültség megy róla a mikrokontroller.
Kell kettő optocsatoló, a fő kontroller bekapcsolja a mérendő akku által táplált kis egységet pl nano panel (belső referencia meg feszültség osztó kell) optocsatolón keresztül, vannak már egész jó FET kimenetű optocsatolók, a másik irányú opto pedig soros porton alacsony baud-dal elküldi a mért értéket, mikor megkapta lekapcsol és indítja a következő cella mérést.
(#) siletto válasza kapu48 hozzászólására (») Máj 8, 2016 /
 
Nem a megszakítással van gondom, hanem az avr sleep modeval, amit írtatok nemrég. Nem vagyok tisztában ezeknek a regisztereknek a buherálásában, ami kellene ehhez, ezért tartok tőle. Ha van példa, arduin-n belülről esetleg meg tudom, de azt is csak szájbarágósan
(#) kapu48 válasza siletto hozzászólására (») Máj 8, 2016 /
 
Nem értem a félelmed okát?

Csak bátran kellene kisérletezni:
Arduino sleep demo
A hozzászólás módosítva: Máj 8, 2016
(#) kapu48 válasza siletto hozzászólására (») Máj 8, 2016 /
 
Nem értem a félelmed okát?

Csak bátran kellene kisérletezni:
Arduino sleep demo

És az 1 perces interupt kérés amit számolni akartál?
Ugyan ott keletkezik mint az elöbbi 10 perces!

Most mia kérdés?
(#) roland9 hozzászólása Máj 9, 2016 /
 
Sziasztok!
A segítségeteket szeretném kérni, lenne egy h-bridge kapcsolású motorvezérlő amit egy ATMEGA8 vezérelne egy potméterrel, balra fordítva balra indul a motor jobbra fordítva jobbra indulna és minél inkább közeledünk a potméter végállásokhoz úgy nőne a motor sebessége is, ezt sikerült is megoldanom, de amikor közép állásba állítom a potit akkor a motor vagy egyik vagy másik irányban nagyon lassan de el kezd forogni. Abban kérném a segítségeteket, hogy hogyan lehetne megoldani, hogy a közép állástól jobbra és balra 1-2 fok kihagyás után induljon el motor?
  1. int dispPin = 0; // kijelzo pin
  2. int potPin = 5; // potmeter pin
  3. int speed1Pin = 10; // H-bridge PWM
  4. int speed2Pin = 9; // H-bridge PWM
  5. int motor1Pin = 12; // H-bridge BE-KI
  6. int motor2Pin = 11; // H-bridge BE-KI
  7. int val = 0; //
  8.  
  9.  
  10. void setup() {
  11.   pinMode(potPin, INPUT);
  12.   pinMode(dispPin, OUTPUT);
  13.   pinMode(speed1Pin, OUTPUT);
  14.   pinMode(speed2Pin, OUTPUT);
  15.   pinMode(motor1Pin, OUTPUT);
  16.   pinMode(motor2Pin, OUTPUT);
  17. }
  18. void loop() {
  19.  
  20.   val = analogRead(potPin);
  21.   val = val/4;
  22.   if (val < 130) {
  23.     digitalWrite(motor1Pin, LOW);
  24.     digitalWrite(motor2Pin, HIGH);
  25.     analogWrite(speed2Pin, 244-(val*2));
  26.     analogWrite(dispPin, 254-(val*2));
  27.    
  28.   }
  29.   if (val > 120) {
  30.     digitalWrite(motor1Pin, HIGH);
  31.     digitalWrite(motor2Pin, LOW);
  32.     analogWrite(speed1Pin, (val*2)-246);
  33.     analogWrite(dispPin, (val*2)-256);
(#) Kovidivi válasza roland9 hozzászólására (») Máj 9, 2016 /
 
If val<130 és val>120 akkor álljon meg a motor (kimenetek GND-k, vagy ahogy a kapcsolás megkívánja), ezután else (vagyis ha nem a 130 és 120 tartományban van a poti), ekkor jöhet a másik két feltételed.
(#) Elektro.on válasza roland9 hozzászólására (») Máj 9, 2016 /
 
Szia!
Én nem Arduinózok , úgy hogy bocsi a bele kotyogásért.
De én ott a loop ciklusban úgy csinálnám, hogy ha a poti értéke mondjuk 0-120 közé esik akkor balra ha 130-255 közé akkor jobbra forog. közötte semmi. Ha jól játom neked a két IF nél átfedés van. az elsőnél val érték kissebb 130 nál a másiknál nagyobb 120 nál.
Na most 125 nél??? mindkettőre igaz, tehát a késöbb lefutó feltétel fog teljesülni.
(#) roland9 válasza Kovidivi hozzászólására (») Máj 9, 2016 /
 
Ez kódban hogy lenne mert nekem nem akar működni?
(#) Elektro.on válasza roland9 hozzászólására (») Máj 9, 2016 /
 
Én az
Idézet:
„if (val < 130) {...”
lekérdezéseknél felcserélném a 120 -at és a130 -at.
(#) Bell válasza roland9 hozzászólására (») Máj 9, 2016 / 2
 
Én egy holt zónában adnám meg, mikor ne forogjon semerre: Remélem nem írtam el...

  1. unsigned int holt_zona;
  2. val = analogRead(potPin);
  3. if(val>511)
  4. {   //jobbra
  5. val=val-512;
  6. if(val<holt_zona)
  7. {
  8.     semmi;
  9. }
  10. else
  11. {
  12.     digitalWrite(motor1Pin, HIGH);
  13.     digitalWrite(motor2Pin, LOW);
  14.     analogWrite(speed1Pin, val/2);
  15.     analogWrite(dispPin, val/2);
  16. }
  17. }
  18.  
  19. if (val<512)
  20. {  //balra
  21. val=511-val
  22. if(val<holt_zona)
  23. {
  24.    semmi;
  25. }
  26. else
  27. {
  28.     digitalWrite(motor1Pin, LOW);
  29.     digitalWrite(motor2Pin, HIGH);
  30.     analogWrite(speed2Pin, val/2);
  31.     analogWrite(dispPin, (val/2);
  32. }
  33. }
A hozzászólás módosítva: Máj 9, 2016
(#) Kovidivi válasza roland9 hozzászólására (») Máj 9, 2016 /
 
Komolyan gondot okoz egy szövegesen leírt feltételszerkezet lekódolása?
Mikor szinte már majdnem a kódot írtam le, neked csak ki kellene javítanod, kicsit formailag rendezni, és kész lenne.
Szerintem itt hagyom az Arduino témát, mert azt látom, itt mindenki csak a sült galambra vár.
A hozzászólás módosítva: Máj 9, 2016
Következő: »»   225 / 853
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