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   344 / 840
(#) jeges hozzászólása Máj 15, 2017 /
 
U döl az infó.... átt tanulmányozom amit leirtatok!

köszönöm!
(#) Gelez válasza Kera_Will hozzászólására (») Máj 15, 2017 /
 
1 A trafónál egy 50mA relé nagyáramúnak számít?
(#) Kera_Will válasza Gelez hozzászólására (») Máj 15, 2017 /
 
Annyira nem , de ha sok van egyszerre meg húzva (15-20 db) akkor igen .
Másik zavar szűrés pont a relék kontaktusai (amik a motorokat kapcsolják ) közé szoktak egy soros R C tagot is kötni nagy fesz kondi (4/600V) és 2-5 W ellenállást (nagy méretű így a kivezetései között nagyobb az átütési távolság) 10-100n és pár 100 ohm - kilo ohm nagyságrendben.
A hozzászólás módosítva: Máj 15, 2017
(#) csabeszq válasza Kera_Will hozzászólására (») Máj 15, 2017 /
 
Az AVR kishal egy komolyabb induktív elemhez. A terepasztalomon volt egy 1A-es elektromágnes és képes volt ki/bekapcsolásnál kiakasztani a mikrovezérlőt.

Az igazat megvallva még az optikai leválasztás sem segített. Amikor egy induktív elemet fizikailag megszakítasz, akkor antennává alakul és képes olyan elektromágneses zajt produkálni, ami eltiporja az AVR-t.

Nem tudtam a problémát megoldani, külön táp sem segített, az elektromos zajt kellett megszüntetni.

Én védődiódát raktam be, elvezette az induktivitás áramát kikapcsolásnál és a probléma megszűnt. Semmi más nem segített. Ha nem tudod így megoldani, akkor alumíniumdobozba rakod és brutálisan árnyékolod. A komolyabb elektromágnesek levegőből képesek kiütni egy AVR-t.

Egy villám 80000A-t képes leadni, a házban 80A-es biztosíték van, ha a szomszéd fába beletrafál, mindent ledarál. Az én 1A-es induktivitásom és a pár uA-es AVR között ugyanakkora különbség van. Ha 1A-es induktivitás beindul könyörtelen munkát végez. Nálam a 22000 µF sem tudta megfogni.

A legjobb, ha valahogy kiszűröd a zajt, hogy el se jusson a mikrokontrollerig.
A hozzászólás módosítva: Máj 15, 2017
(#) Kera_Will válasza csabeszq hozzászólására (») Máj 15, 2017 /
 
Jogos az észrevétel ott a mosógép motorjai a főbajok okozói .
(#) jeges hozzászólása Máj 15, 2017 /
 
byte változot 0..255 étéket szeretnék százalékra váltani vagyis0..100!

De ez igy nem ok met 0...255 ad vissza még mindig soros porton!

  1. byte cyle=cyle/100;
  2.  
  3. cyle = Serial.parseInt();
A hozzászólás módosítva: Máj 15, 2017
(#) jeges válasza Gelez hozzászólására (») Máj 15, 2017 /
 
Még a dc motort kapcsolgatsz ha jol étem relével?
Mert a dc motor felöl is felépö tranziens áram lökések is szépen zavarják a controlert + még gajra is vágja ezekere megfelelö dioda van (motor irányában)!
(#) tbarath válasza jeges hozzászólására (») Máj 16, 2017 /
 
Itt a matek nem stimmel, pontosabban az sem, mert a kód is zagyva.
Ha 0 => 0% és 255 => 100% konverziót akarod, akkor szazalek = byte * 100 / 255 a képlet.
De itt az is baj lehet, hogy byte-okkal dolgozol, és ha "belül" is byte-tal dolgozik akkor valahol lesz egy szép nagy nullád, azzal pedig bármit szorzol az 0 lesz. De ezt ki kell próbálni.
Szerintem cast-olni kell, de lehet hogy tizedesponttal is kikényszerítheted, pl. byte / 255.0 * 100
(#) Kera_Will válasza Gelez hozzászólására (») Máj 16, 2017 /
 
JOBB választás lenne a SSR lenne , ami null átmenetet is figyeli akkor biztos a legkevesebb a tranziens jelenség.Igaz oda se ártana az R C tagok.

mosomasa1
SSR-panel teljesítményt kapcsoló részek

Itt nincs semmi reccsenés , roppanás, zavarodás évtized óta teszi a dolgát.
A hozzászólás módosítva: Máj 16, 2017
(#) molnarp hozzászólása Máj 16, 2017 /
 
I2C protokollt nem értem teljesen, hiába olvastam a tananyagot.
Miért és milyen esetben kell megcímezni a buszra felfűzött eszközöket?
Nálam úgy van most, hogy a buszon van egy DS3231 és egy AM2315 és nem adtam meg a címüket.
Később egy külső eeprom is lesz rajta.
Amúgy tökéletesen működik, azt leszámítva, hogy random 1-3 naponta lefagy a kontroller, reset gombra se indul újra, csak ha a tápot elveszem.
Még nem tudom, hogy emiatt, de ha csak az órát hagyom rajta, akkor 3 nap után se fagyott le.
Most megint visszatettem, de felhúzó nélkül a szenzort, próbalaneles kontaktokat javítottam.
Eddig jó, de messze van még a 3 nap, hogy lássam köze van-e hozzá.
Szóval lehet a lefagyásnak köze ahhoz, hogy külön címzés nélkül használom?
(#) vargham válasza molnarp hozzászólására (») Máj 16, 2017 /
 
> Miért
Mert a buszon nem beszélhetnek maguktól a slave eszközök. A master szólítja őket, és arra válaszolnak.

> és milyen esetben kell megcímezni a buszra felfűzött eszközöket?
Ha azt akrod, hogy mondjanak valamit.

> Nálam úgy van most, hogy a buszon van egy DS3231 és egy AM2315 és nem adtam meg a címüket.
Olyan nincs.
Gondolom, hogy valamilyen könyvtárat használsz hozzájuk. Ha belenézel a forráskódjába, abban benne van az alapértelmezett cím, és azon szólítja az eszközöket. Lásd például itt, 49. sor.
(#) molnarp válasza vargham hozzászólására (») Máj 16, 2017 /
 
Köszönöm, így már értem.
Akkor a fagyás okát máshol kell keresnem.
(#) icserny válasza molnarp hozzászólására (») Máj 16, 2017 /
 
Idézet:
„Miért és milyen esetben kell megcímezni a buszra felfűzött eszközöket?”

Azért, mert az I2C buszon nincsenek egyedi kiválasztó vezetékek, csupán a címből derül ki, hogy kinek szól az adás.
Akkor, amikor az eszköznek jelezni akarod, hogy neki szól az adás, vagy ha kérdezni akarsz tőle valamit. Tehát minden tranzakció (beírás és kiolvasás egyaránt) a cím kiküldésével kezdődik.
(#) molnarp válasza icserny hozzászólására (») Máj 16, 2017 /
 
Azért nem volt világos, mert nem tudtam, hogy a könyvtára tartalmazza és olyan példákat néztem amiket a programban címzeztek.
Viszont ha pl. 2 egyforma eszközt használok, akkor azokat a programba kell címeznem? Vagyis csak az egyiket kell, mert a másikat a könyvtár már tartalmazza?
(#) jeges válasza tbarath hozzászólására (») Máj 16, 2017 /
 
igy probálom ahogy javasoltad be irt adat értéke még mindig 0...255 ad visza nem osztodik 100 al!
  1. byte cyle1;
  2.   cyle= cyle1/ 255.0 * 100;
  3.  
  4.  cyle = Serial.parseInt();
  5.  
  6.  
  7. Serial.println("             ");
  8.  Serial.print(cyle/2.55);
  9.  Serial.print("%");
  10.  
  11. //vagy  
  12. ----------------------------------------
  13. byte cyle1;
  14.   cyle= cyle1* 100 / 255;
  15.  
  16.  cyle = Serial.parseInt();
  17.  
  18.  
  19. Serial.println("             ");
  20.  Serial.print(cyle/2.55);
  21.  Serial.print("%");


javasolták a map finkciot is de nem jó!

  1. byte val =  cyle;
  2.   val = map(val, 0, 255, 0, 100);
  3.  
  4.  
  5.  cyle = Serial.parseInt();
A hozzászólás módosítva: Máj 16, 2017
(#) vargham válasza molnarp hozzászólására (») Máj 16, 2017 /
 
> Viszont ha pl. 2 egyforma eszközt használok, akkor azokat a programba kell címeznem?
Nem ilyen egyszerű.
Olvastad a használni kívánt eszközök adatlapjait?
Olvastad az i2c leírását?
Az eszközök beépítve tartalmazzák a címüket. A sok eszköznél ez egy fix érték, nem lehet változtatni, így egy buszon egy lehet belőlük. Vannak olyan eszközök, amelyeknek az IC egy-két lábát földre / tápra húzva választani tudsz néhány fix cím közül.

Az Arduino libek általában C++ osztályok, és a konstruktorban tudod megadni a működési paramétereket, például az i2c címet.
(#) TheShaft hozzászólása Máj 16, 2017 /
 
Sziasztok!

ATMEGA328-on szeretnék 3 külső megszakítást használni (külső eseménytől eltelt időzítés lenne a feladat). Sajnos csak 2 ilyen bemenete van. Állítólag lehet bármely bemenetre PinChange megszakítást konfigurálni. Ebben az esetben is él még a két külső megszakítás bemenetem?
(#) icserny válasza molnarp hozzászólására (») Máj 16, 2017 /
 
Idézet:
„Viszont ha pl. 2 egyforma eszközt használok ...”

Ez csak akkor megy, ha van hardveres lehetőség a cím valamilyen módosítására (pl ha egyes címbitek "ki vannak vezetve", és átforrasztással módosítani tudod, hogy logikai 0-ra vagy 1-re legyen kötve. Két eszköz ugyanis nem rendelkezhet azonos címmel.

Azt, hogy hogyan lehet ezeket címezni, az attól függ, hogy a könyvtár hogyan van megírva. Lehet-e pl. más-más címmel példányosítani?

Az Adafruit TSL2561 szenzort kezelő könyvtárnál például lehet:
  1. Adafruit_TSL2561_Unified tsl_1 = Adafruit_TSL2561_Unified(0x29, 11111);
  2. Adafruit_TSL2561_Unified tsl_2 = Adafruit_TSL2561_Unified(0x39, 22222);
  3. Adafruit_TSL2561_Unified tsl_3 = Adafruit_TSL2561_Unified(0x49, 33333);


(az utolsó paraméter itt a SensorID nével eltárolt és visszaadott azonosító szám, ne vedd komolyan)
(#) atus1981 válasza jeges hozzászólására (») Máj 16, 2017 /
 
Úgynevezett Faraday kalitkát érdemes megpróbálni?
(#) jeges válasza atus1981 hozzászólására (») Máj 16, 2017 /
 
Ez indukcio alapon müködik a (Jelenség) amit irtam a motor felöli jelenséget nem segitene Faraday kalitka rata ha arra gondolsz!
Egyszerüen :
Egy x menetü tekercsre áram forást kapcsolunk BE kapcsoláskor akkor áram folyik rajta KI kapcsoláskor feszültség indukálodik a tekercs kivezetésein!
A fenti jelenség egyben hasznos is meg átok is az az felhasználási célrol beszélek!
pl"feszültség indukálodik a tekercs kivezetésein" ezel a jelenségel konderzátort töltögetnek akor már használhato pl step up dcdc konverternek .... wiki megtalálod a jelenség teljes müködését!
(#) csabeszq válasza atus1981 hozzászólására (») Máj 16, 2017 /
 
A védődiódának utánanéztél, dc motornál mennie kellene.

Többen is említették megoldásnak.
A hozzászólás módosítva: Máj 16, 2017
(#) Gelez válasza csabeszq hozzászólására (») Máj 16, 2017 /
 
Nekem nem is kikapcsoláskor van a gond. Bekapcsolja a motort, 2mp delay után ki kellene kapcsolnia, de nem teszi, megy folyamatosan. Elakadt a delay ciklusban.
Érdekes, talán itt a HE-n olvastam egy PIC/AVR összehasonlításban, hogy az AVR jobban bírja az efféle zavarokat mert automotive minősítésű. Akkor a zárt fémdoboz segíthet? Hogyan oldják meg ezt a gondot a rengeteg olcsó eszköznél amiben vmi mikrovezérlő van kenyérsütőtől a (stilszerűen) mosógépig?
(#) Gelez válasza jeges hozzászólására (») Máj 16, 2017 /
 
200W körüli AC motort kapcsolok relével
(#) jeges válasza Gelez hozzászólására (») Máj 16, 2017 /
 
Akor csak program hibba de nem látunk részlete sem belöle!
Nem lehet olyan funkciot használsz ami igenyelné a belsö elenálások felhuzását pl port lább definicionál?
De még számtalan ok és okozat lehet!
(#) jeges válasza jeges hozzászólására (») Máj 16, 2017 /
 
igy müködik de pontatlan mindig elcsuszik az érték!

pontoság :
1% akor csak 0.78% !
5% akor csak 4.71% !

ki érti ezt...........



  1. cyle = (Serial.parseInt()*25.5/10);
  2.  
  3.  //de érdekel igy nem jó definició:
  4.  
  5. cyle = (Serial.parseInt()*2.55/100);
  6.  
  7. cyle = (Serial.parseInt()*255/1);
(#) tbarath válasza jeges hozzászólására (») Máj 16, 2017 /
 
hát én tuti nem értem amit írsz, de legalább valamit haladtál.
Explicit cast-olással is megpróbálkozhatsz
  1. byte x = 147;
  2. float f_pct = (float)x / 2.55;
  3. Serial.println(f_pct);
  4. byte b_pct = (byte)f_pct;
  5. Serial.println(b_pct);


Amúgy az itt írt kódod is hibás, mert egy 0-255 skálát akarsz egy 0-100-ra konvertálni, szóval a byte 2.55 változása jelent 1 %-ot. Tehát 100-zal kell szorozni és 255-tel osztani, és nem fordítva. (Ami ekvivalens a 2,55-tel történő osztással, de a logikájátt szeretném megértetni. ÉS ugye kerekítesz, tehát a pontosságod limitált lesz.
(#) jeges válasza tbarath hozzászólására (») Máj 16, 2017 /
 
Amit emlitesz igen ez igy lene helyes "0-255 skálát akarsz egy 0-100" cyle /100*255; de ez igy egyáltalán nem müxik de miért is?
Már probáltam az összes változot fel venni cyle int, byte, float, long hátha változik valami!



  1. #include <PWM.h>
  2. #include <EEPROM.h>
  3. #define fre_EEPRCIM 10
  4.  
  5.  
  6. int value;
  7.  
  8. int led = 9;
  9. int led2 = 10;
  10.  
  11. int cyle = 127;
  12.  
  13. unsigned long frequency = 1;
  14.  
  15. void setup() {
  16.  Serial.begin(9600);
  17. frequency =  fre_EEPolvas(fre_EEPRCIM);
  18. Serial.println("             ");
  19.  Serial.print(frequency);
  20.  Serial.print("Hz");
  21.  
  22.  cyle =  EEPROM.read(20);
  23.  
  24. Serial.println("             ");
  25.  Serial.print(cyle/2.55);
  26.  Serial.print("%");
  27.  
  28.  InitTimersSafe();
  29.  
  30.  
  31.  
  32. bool success = SetPinFrequencySafe(led, frequency);
  33.  
  34.    Serial.flush();
  35. }
  36.  
  37. void loop() {
  38.  
  39. pwmWrite(led, cyle);
  40.  
  41. pwmWrite(led2, cyle);
  42.  
  43.  
  44.   if (Serial.available()){
  45.  
  46.     int inByte = Serial.read();
  47.  
  48.      switch (inByte) {
  49.  
  50.    
  51.    
  52.     //Serial.flush();
  53.    
  54. case 'f':
  55.  
  56.     frequency = Serial.parseInt();
  57.    
  58.     fre_EEPiras(fre_EEPRCIM, frequency);
  59.  
  60.  
  61.     asm volatile ("jmp 0"); //arduino auto reset
  62.  
  63.     break;
  64.  
  65.    //  
  66.  case 'c':
  67.  
  68.  
  69.  
  70. byte val;
  71. val= map(cyle, 0, 255, 0, 100);
  72. val= Serial.parseInt();
  73.  
  74.  
  75.  
  76.  
  77.  
  78.  // cyle = (Serial.parseInt()*25.5/10);
  79.  
  80.  
  81. //cyle = (Serial.parseInt()*25.5/10.0);
  82.     // Serial.flush();
  83.      
  84.     EEPROM.write(20,cyle);
  85.  
  86.     //value = EEPROM.read(20);
  87.  
  88.     asm volatile ("jmp 0");
  89.  
  90.  Serial.println("             ");
  91.  Serial.print(cyle/2.55);
  92.  Serial.print("%");
  93.  //Serial.println(Serial.parseInt());
  94.    
  95. break;
  96.    
  97.      }
  98.   }
  99. }
  100.  
  101.  
  102. unsigned long fre_EEPolvas(int address){
  103.   long negy = EEPROM.read(address);
  104.   long harom = EEPROM.read(address + 1);
  105.   long ketto = EEPROM.read(address + 2);
  106.   long egy = EEPROM.read(address + 3);
  107.   return ((negy << 0) & 0xFF) + ((harom << 8) & 0xFFFF) + ((ketto << 16) & 0xFFFFFF) + ((egy << 24) & 0xFFFFFFFF);
  108.  
  109.  
  110. }
  111.  
  112. void fre_EEPiras(int address, long adat){
  113.    byte negy = (adat & 0xFF);
  114.    byte harom = ((adat >> 8) & 0xFF);
  115.    byte ketto = ((adat >> 16) & 0xFF);
  116.    byte egy = ((adat >> 24) & 0xFF);
  117.    EEPROM.write(address, negy);
  118.    EEPROM.write(address + 1, harom);
  119.    EEPROM.write(address + 2, ketto);
  120.    EEPROM.write(address + 3, egy);
  121. }
A hozzászólás módosítva: Máj 16, 2017

Snap019.jpg
    
(#) jeges válasza jeges hozzászólására (») Máj 16, 2017 /
 
lemarat!
Pontosság 5% helyet csak 4.71%.....
(#) tbarath válasza jeges hozzászólására (») Máj 16, 2017 /
 
  1. byte val;
  2. val= map(cyle, 0, 255, 0, 100);
  3. val= Serial.parseInt();


Itt lefoglalsz egy változót, majd abba a cyle nevű változódból a map fv segítségével konvertált értéket rakod.
Majd ezzel jól nem csinálsz semmit, mert a következő sorban felülcsapod egy soros portról olvasott, egy int-té parszolt számmal. És ugye a parseint 0 értéket ad ha letelt a timeout, ami default 1 másodperc.
(#) jeges válasza tbarath hozzászólására (») Máj 16, 2017 /
 
Igen ez a rész egyáltalán nem is ok ahogy irod pontosan!

edig ez a jó de pontatlan és nem kell tizedes érték !

  1. cyle = (Serial.parseInt()*25.5/10);
A hozzászólás módosítva: Máj 16, 2017
Következő: »»   344 / 840
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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