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   346 / 852
(#) csabeszq válasza csabeszq hozzászólására (») Máj 19, 2017 /
 
(#) gerleimarci válasza gerleimarci hozzászólására (») Máj 19, 2017 /
 
Na, csak sikerült megoldanom a szoftveres PWM-et attiny24-en. Most olyan problémám van, hogy próbálok létrehozni egy hullámzó effektet, amiben eltolódva változtatja a fényerejüket a ledek, de amikor 0-nak kellene lenni-e, akkor felvillan egy pillanatra az adott kimeneten a led, amikor 255-nek, akkor meg elsötétül.
A másik problémám az, hogy ez egy hajszál híján, de nem fér be az attinybe (2k), ezért valami egyszerűsítést kéne rajta csinálni.
  1. #include "SoftPWM.h"
  2.  
  3. int brightness1 = 0;
  4. int brightness2 = 28;
  5. int brightness3 = 57;
  6. int brightness4 = 85;
  7. int brightness5 = 142;
  8. int brightness6 = 170;
  9. int brightness7 = 198;
  10. int brightness8 = 227;
  11. int brightness9 = 253;
  12. int fadeAmount1 = 4;
  13. int fadeAmount2 = 4;
  14. int fadeAmount3 = 4;
  15. int fadeAmount4 = 4;
  16. int fadeAmount5 = 4;
  17. int fadeAmount6 = 4;
  18. int fadeAmount7 = 4;
  19. int fadeAmount8 = 4;
  20. int fadeAmount9 = 4;
  21.  
  22. void setup() {
  23.   SoftPWMBegin();
  24. }
  25.  
  26. void loop() {
  27.   SoftPWMSet(0, brightness1);
  28.   brightness1 = brightness1 + fadeAmount1;
  29.   if (brightness1 <= 1 || brightness1 >= 255) {
  30.     fadeAmount1 = -fadeAmount1;
  31.   }
  32.  
  33.   SoftPWMSet(1, brightness2);
  34.   brightness2 = brightness2 + fadeAmount2;
  35.   if (brightness2 <= 0 || brightness2 >= 255) {
  36.     fadeAmount2 = -fadeAmount2;
  37.   }
  38.  
  39.   SoftPWMSet(2, brightness3);
  40.   brightness3 = brightness3 + fadeAmount3;
  41.   if (brightness3 <= 0 || brightness3 >= 255) {
  42.     fadeAmount3 = -fadeAmount3;
  43.   }
  44.  
  45.   SoftPWMSet(3, brightness4);
  46.   brightness4 = brightness4 + fadeAmount4;
  47.   if (brightness4 <= 0 || brightness4 >= 255) {
  48.     fadeAmount4 = -fadeAmount4;
  49.   }
  50.  
  51.   SoftPWMSet(4, brightness5);
  52.   brightness5 = brightness5 + fadeAmount5;
  53.   if (brightness5 <= 0 || brightness5 >= 255) {
  54.     fadeAmount5 = -fadeAmount5;
  55.   }
  56.  
  57.   SoftPWMSet(5, brightness6);
  58.   brightness6 = brightness6 + fadeAmount6;
  59.   if (brightness6 <= 0 || brightness6 >= 255) {
  60.     fadeAmount6 = -fadeAmount6;
  61.   }
  62.  
  63.   SoftPWMSet(6, brightness7);
  64.   brightness7 = brightness7 + fadeAmount7;
  65.   if (brightness7 <= 0 || brightness7 >= 255) {
  66.     fadeAmount7 = -fadeAmount7;
  67.   }
  68.  
  69.   SoftPWMSet(7, brightness8);
  70.   brightness8 = brightness8 + fadeAmount8;
  71.   if (brightness8 <= 0 || brightness8 >= 255) {
  72.     fadeAmount8 = -fadeAmount8;
  73.   }
  74.  
  75.   SoftPWMSet(8, brightness9);
  76.   brightness9 = brightness9 + fadeAmount9;
  77.   if (brightness9 <= 0 || brightness9 >= 255) {
  78.     fadeAmount9 = -fadeAmount9;
  79.   }
  80.  
  81.  
  82.   delay(30);
  83. }
(#) vargham válasza gerleimarci hozzászólására (») Máj 19, 2017 /
 
Miért pont Attiny?
(#) Gelez válasza atus1981 hozzászólására (») Máj 19, 2017 /
 
zseniális ötlet volt, megszűnt a probléma
nem hittem volna, hogy 2 feszstabon meg félmarék kondin keresztülmegy valami amikor behúz egy 50mA-es relé
köszönöm
(#) Gelez válasza jeges hozzászólására (») Máj 19, 2017 /
 
a relé tekercsével párhuzamosan van a dióda
a relék DC 24V-osak ezért mivel 24V AC trafó volt kéznél szűretlen egyenirányítóról vannak táplálva. Erről megy diódán keresztül a pufferre, majd a 7812-re.
Azért kell a dióda, hogy a relék tápfesze ne legyen pufferelve
(#) Gelez válasza csabeszq hozzászólására (») Máj 19, 2017 /
 
Ez még kefe nélküli 2/16 pólusú aszinkron motor
(#) szeg76 válasza gerleimarci hozzászólására (») Máj 19, 2017 /
 
Az alábbi kódrészlet kis különbségekkel 9-szer ismétlődik:

  1. SoftPWMSet(0, brightness1);
  2.   brightness1 = brightness1 + fadeAmount1;
  3.   if (brightness1 <= 1 || brightness1 >= 255) {
  4.     fadeAmount1 = -fadeAmount1;


Ha ezt egy ciklusba tudod szervezni, nyersz párszáz bájtot.
(#) atus1981 válasza Gelez hozzászólására (») Máj 19, 2017 /
 
Tudom
(#) gerleimarci válasza vargham hozzászólására (») Máj 19, 2017 /
 
Mert ebből van sok van egy jópár panelem ezzel szerelve, amiről tudok kiforrasztani. Ha kell adok annak is egy pár darabot, aki segít.
(#) molnarp válasza Gelez hozzászólására (») Máj 19, 2017 /
 
Az áramot nem a motornál gondoltam megmérni, hanem az arduino 5v-os ágánál, amiről táplálod a reléket.
Lehet ott esik le a fesz annyira, hogy bezavar a kontrollernek.
(#) Gelez válasza molnarp hozzászólására (») Máj 19, 2017 /
 
Biztos táp probléma volt mert akksiról üzemeltetve megoldódott. Csak nem értem hogy lehet ez, hiszen annyi pufferkondi volt benne, hogy lekapcsolás után még mp-ekig működött az ardu, ezt a puffert nem tudták a relék használni mert egy dióda nem engedte visszafolyni feléjük az áramot.
(#) csabeszq válasza gerleimarci hozzászólására (») Máj 19, 2017 /
 
Az Attiny24 vakvágány hobbi célra.

Bemész a chipcad honlapjára, kiválasztod a max 500 ft-os Attiny84-et, probléma megoldva. Van helyed, tudsz kódolni.

Ennyi az egész, rosszul indultál el, következtetést le kell vonni, IC csere.
A hozzászólás módosítva: Máj 19, 2017
(#) Kera_Will válasza Gelez hozzászólására (») Máj 19, 2017 /
 
Igen mert nem külön független tápról járattad az ardut.
(#) csabeszq válasza Gelez hozzászólására (») Máj 19, 2017 /
 
Relé és relé között nagy különbségek vannak. Van 15mA fogyasztású relém, meg örököltem 250 mA-est is. Vásárlásnál ohm mérőt viszek, mert alapból nem írják rá, hogy milyen.

Nem értem, mert ha a 15mA áramú is megbízhatóan kapcsol, akkor minek árulnak ilyen megalomán dögöket.

Hasznát nem látom, csak a baj van velük.
A hozzászólás módosítva: Máj 19, 2017
(#) Bakman válasza csabeszq hozzászólására (») Máj 19, 2017 /
 
Idézet:
„ha a 15mA áramú is megbízhatóan kapcsol, akkor minek árulnak ilyen megalomán dögöket”
Érintkezők távolsága, terhelhetősége, kapcsolási sebesség stb. Ezekhez kell méretezni a tekercset illetve a tekercs által gerjesztett mágneses mezőt. Továbbá finomodnak agyártási technikák és anyagok is. Sok rétege van a miértre adható válasznak.
(#) molnarp válasza Gelez hozzászólására (») Máj 20, 2017 /
 
Azért kérdeztem, mert ha Usb-ről táplálod, akkor 500mA-t, ha a tápcsatiról akkor 800-1000mA-t tud leadni.
(#) vargham válasza gerleimarci hozzászólására (») Máj 20, 2017 /
 
Ha hobbi, és tanulni (szenvedni) akarsz, akkor OK. Csak dobd ki az Arduino-t, mert brutálisan zabálja a memóriát.

Egész dobozzal vannak itthon Attinyk, de szerintem már sosem nyülok hozzájuk... Én inkább Atmega328-at vagy stm32f103-at használok. Gyorsabban haladok a kítűzött feladattal, nem kell alapvető apróságokkal sakkozni, és pont a szabad idő a legdrágább.

De ha ezeket mind tudtad, akkor nem szóltam.
(#) Gelez válasza molnarp hozzászólására (») Máj 20, 2017 /
 
Nem közvetlen kapcsolom a relét, hanem 1k-keresztül tranyóval. Megmértem, a max áramfelvétel 35mA. 20 körül van az ardu+ bekapcsolt kimenetenként 4mA.
(#) Massawa válasza csabeszq hozzászólására (») Máj 20, 2017 /
 
Azért kapcsolás meg kapcsolás között ég és föld a különbség. Azok a kisfogyasztásu relék inkább REED relék egy tekercsben vagy csak nagyon kis áramok kapcsolására alkalmasak ( <500 mA), és feszültség is gyakran korlátozva van kevesebb mint 100 V-ra.
A reléknél nem a kapcsolás a kritikus amikor meghuz, hanem amikor elengedi a kontaktusokat. Azoknak vissza kell térni a másik kontaktushoz ( ha átkapcsolos) vagy csak meg kell szakitani az áramot, amihez erö kell ( föleg a nagy amperek esetén). Azaz a visszahuzo rugonak elég erösnek kell lennie, amit behuzáskor le kell küzdeni.
Az áramfelvétel attol is függ, hogy hány kontaktust ( morzet) mozgat.
Ezért van ennyi fajta a piacon.
(#) gerleimarci válasza vargham hozzászólására (») Máj 20, 2017 /
 
Ez a tipikus 0Ft-os projektek része, amikor van itthon minden. Van egy halom ilyen attiny24-el szerelt panelem és egy fél tekercs narancssárga SMD ledem, és szeretnék belőlük értelmes dolgokat gyártani. A múlthéten csináltam belőle egyedi nászajándékokat, egy RGB lámpát és egy "dobogó" szívet képek , szerintem ilyen feladatokra bőven elég a kis attiny.
Ha komolyabb projekthez kezdek akkor meg ott van pár előre megvett Arduino Pro Mini klón, ami szívesebben építek be dolgokba.

Lehet hagyom a SoftPWM-et, ez a mikrokontroller nem erre való.
(#) kapu48 válasza gerleimarci hozzászólására (») Máj 20, 2017 /
 
Nem feladni kellene a problémát, hanem megoldani!

Lehet a sok egyforma nevű változót 1 – 1 tőmbe rakni, és akkor már a számokkal lehetne indexelni
(címezni) őket. Így már 1 ciklussal végig lehetne menni mind a 10 LED-en.
(#) szeg76 válasza gerleimarci hozzászólására (») Máj 20, 2017 /
 
A méretproblémát megoldja a hasonló kódrészletek ciklusba szervezése. Nano-ra fordítva a te verziód 2072 bájtja helyett lehet akár 1602 bájt is.

A felvillanást/kialvást az okozza, hogy a brightness értékek 0 alá vagy 255 fölé is mehetnek, miközben a SoftPWMSet() 0-255 értéket vár el.
Ugyanaz a 8 (16, akárhány) bit előjeles vagy előjel nélküli számként értelmezve teljesen más értéket jelent. Például -1 int érték előjel nélküli 8 bites számként 255.
Tehát valamilyen módon biztosítanod kell, hogy a függvény ne kaphasson 0-255 tartományon kívüli értéket.
(#) gerleimarci válasza szeg76 hozzászólására (») Máj 20, 2017 /
 
Az a baj, hogy még nem tudok igazán programozóként gondolkodni Egyelőre még a tanulgatós fázisban vagyok.

Azt már megoldottam, de attól csak még bonyolultabb és még több helyet foglal a program.
  1. if (brightness1 >= 255) {
  2.     SoftPWMSet(0, 255);
  3.   }
  4.   else {
  5.     if (brightness1 <= 0) {
  6.       SoftPWMSet(0, 0);
  7.     }
  8.     else {
  9.       SoftPWMSet(0, brightness1);
  10.     }
  11.  
  12.   }
  13.   brightness1 = brightness1 + fadeAmount1;
  14.   if (brightness1 <= 0 || brightness1 >= 255) {
  15.     fadeAmount1 = -fadeAmount1;
  16.   }
(#) gerleimarci válasza gerleimarci hozzászólására (») Máj 20, 2017 /
 
Próbálkozok, de nem akar összejönni. Most nem csökkenti a fényerőt, csak növeli 255-ig, és kezdi előről.
  1. #include "SoftPWM.h"
  2. uint8_t leds[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
  3. uint8_t brightness[10] = {0, 28, 57, 85, 142, 170, 198, 227, 254};
  4. uint8_t fadeamount[10] = {4, 4, 4, 4, 4, 4, 4, 4, 4};
  5.  
  6. // the setup routine runs once when you press reset:
  7. void setup() {
  8.   SoftPWMBegin();
  9.  
  10. }
  11.  
  12. // the loop routine runs over and over again forever:
  13. void loop()
  14. {
  15.  
  16.   for (int i = 0; i < 9; i++)
  17.   {
  18.     if (brightness[i] <= 0) {
  19.       SoftPWMSet(leds[i], 0);
  20.     }
  21.     else {
  22.       if (brightness[i] >= 255) {
  23.         SoftPWMSet(leds[i], 255);
  24.       }
  25.       else {
  26.         SoftPWMSet(leds[i], brightness[i]);
  27.       }
  28.     }
  29.     brightness[i] = brightness[i] + fadeamount[i];
  30.     if (brightness[i] <= 0 || brightness[i] >= 255) {
  31.       fadeamount[i] = -fadeamount[i];
  32.     }
  33.  
  34.   }
  35.   // wait for 30 milliseconds to see the dimming effect
  36.   delay(100);
(#) szeg76 válasza gerleimarci hozzászólására (») Máj 20, 2017 /
 
Alakul ez

+/- négyesével lépdelve előfordulhat, hogy nem jut érvényre az irányváltás feltétele.

  1. if (brightness[i] <= 0 || brightness[i] >= 255) {
  2.       fadeamount[i] = -fadeamount[i];


helyett

  1. if (brightness[i] < 4 || brightness[i] > 251) {
  2.       fadeamount[i] = -fadeamount[i];


és brightness[8] 254 helyett legyen 251
A hozzászólás módosítva: Máj 20, 2017
(#) gerleimarci válasza szeg76 hozzászólására (») Máj 20, 2017 /
 
Akkor inkább menjen egyesével kisebb delayel

Pedig már azt hittem, hogy...

wave.JPG
    
(#) jeges válasza gerleimarci hozzászólására (») Máj 21, 2017 /
 
ezel nincs"<=" tulcsordulásod?
(#) jeges válasza gerleimarci hozzászólására (») Máj 21, 2017 /
 
Rakd fel 1.8.2 azal lefodul...
(#) jeges hozzászólása Máj 21, 2017 /
 
Nem teljesül az if nagy falat unsigned long ?

  1. if(millis() >= 4294957295)



  1. #include <avr/wdt.h>
  2. #include "Arduino.h"
  3. int led=13;
  4.  
  5. //unsigned long previousMillis = 4294957295; // induló idő azért, hogy ne kelljen 49 napot várni 4294967295
  6.                              //4294967295
  7. unsigned long previousMillis = 4294966295;
  8. unsigned long currentMillis;
  9. unsigned long lastReadTime; // végleges programban: unsigned long lastReadTime=0;
  10. long interval = 1000; // intervallum
  11. int t;
  12.  
  13. void setup() {
  14.  
  15.   digitalWrite(led, HIGH);
  16.  
  17. Serial.begin(9600);
  18. pinMode(led, OUTPUT);
  19. // a végleges programban ez nem kell, csak a lastReadTime deklarációjában 0-zni az értékét
  20. lastReadTime = previousMillis;
  21. }
  22.  
  23. void loop()
  24. {
  25.  
  26.  
  27.  
  28. if(millis() >= 4294957295)
  29.  
  30.  
  31. {
  32.   delay(1000);
  33.   digitalWrite(led, LOW);
  34.  
  35.   wdt_enable(WDTO_15MS);    
  36.  
  37.  
  38.    while(1)
  39.   {
  40.     // wdt_reset();          // uncomment to avoid reboot
  41.   }
  42. }
  43.  
  44. currentMillis = previousMillis + millis();
  45.  
  46. if (currentMillis - lastReadTime > interval) {
  47.  
  48. lastReadTime = currentMillis;
  49.  
  50. Serial.print("Aktualis ido: ");
  51. //prints time since program started
  52. Serial.print(currentMillis);
  53. Serial.print(". Eltelt ido: ");
  54. //prints time since program started
  55. // ide irhattam volna millis()-t is.
  56. Serial.println(currentMillis - previousMillis);
  57. // Serial.println(millis());
  58.  
  59. delay(1000);
  60. }
  61. }
(#) gerleimarci válasza jeges hozzászólására (») Máj 21, 2017 /
 
Miért is? UNO-n jól megy ez a kód.
Következő: »»   346 / 852
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