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   186 / 856
(#) atus1981 válasza Koleus hozzászólására (») Jan 25, 2016 /
 
Nem ismerem az SSR eszközöket ezért lehet hülyeséget kérdezek: Hány On-Off kapcsolást bír az élete során az SSR?
(#) elactrofan válasza kegyetlen19 hozzászólására (») Jan 25, 2016 /
 
Ne vard, hogy mas megcsinalja. Probalkozzal ha nem megy akkor itt segitenek, de indulj el valahogy.
(#) Kera_Will válasza kegyetlen19 hozzászólására (») Jan 25, 2016 /
 
Itt egy egyszerű minta, ha ennek a működését átlátod akkor lépjél tovább.
minta-elore-szamlalo
(#) Bakman válasza atus1981 hozzászólására (») Jan 25, 2016 /
 
Ha nincsenek feszegetve a határai, a reléknél nagyságrendekkel többet. A bekapcsolása megoldható egy tranzisztorral és egy ellenállással, nem kell túlvariálni. Ennyit ne sajnálj rá, 100 Ft-ból megvan.
(#) kegyetlen19 válasza Kera_Will hozzászólására (») Jan 25, 2016 /
 
Sziasztok. Természetesen nem várom el, hogy valaki megcsinálja, ráadásul abból nem is tanulnék, csak útbaigazítás kellene, (sajnos nem igazán értem, még!).
Az előzőleg linkelt kódot kicsit „takarítgattam”, eddig jutottam.
  1. #include "TimerOne.h"
  2. #include "TM1637.h"
  3. #define ON 1
  4. #define OFF 0
  5.  
  6. const int megy = 2;
  7. const int all = 3;
  8.  
  9. int inditas = 0;
  10.  
  11. int8_t TimeDisp[] = {0x00,0x00,0x00,0x00};
  12. unsigned char ClockPoint = 1;
  13. unsigned char Update;
  14. unsigned char masodp = 0;
  15. unsigned char perc;
  16.  
  17. #define CLK 9      
  18. #define DIO 8
  19. TM1637 tm1637(CLK,DIO);
  20.  
  21. void setup() {
  22.   tm1637.set(BRIGHT_TYPICAL);
  23.   //BRIGHT_TYPICAL = 2,BRIGHT_DARKEST = 0,BRIGHTEST = 7;
  24.   tm1637.init();
  25.   Timer1.initialize(1000000);
  26.   Timer1.attachInterrupt(TimingISR);
  27.   pinMode(megy, INPUT);
  28.   pinMode(all, INPUT);
  29. }
  30.  
  31. void loop() {
  32.   if (Update == ON) {
  33.     TimeUpdate();
  34.     tm1637.display(TimeDisp);
  35.   }
  36.  if (digitalRead(megy) == HIGH) {
  37.      inditas = 1;  
  38.    }
  39.  if (digitalRead(all) == HIGH) {
  40.      inditas = 0;
  41.   }
  42. }
  43.  
  44. void TimingISR() {
  45.   Update = ON;
  46.   if (inditas == 1) {
  47.     masodp ++;
  48.     if(masodp == 60) {
  49.       perc ++;
  50.       masodp = 0;
  51.       if(perc == 60) {
  52.         perc = 0;
  53.     }
  54.    }
  55.   }
  56.   ClockPoint = (~ClockPoint) & 0x01;
  57. }
  58.  
  59. void TimeUpdate(void){
  60.   if(ClockPoint)tm1637.point(POINT_ON);
  61.   //POINT_ON = 1,POINT_OFF = 0;
  62.   else tm1637.point(POINT_OFF);
  63.   TimeDisp[0] = perc / 10;
  64.   TimeDisp[1] = perc % 10;
  65.   TimeDisp[2] = masodp / 10;
  66.   TimeDisp[3] = masodp % 10;
  67.   Update = OFF;
  68. }

Még csak olyan kódokkal foglalkoztam, amiben csak a void loop volt, azt se tudom minek kell a void TimeUpdate és a void TimingISR. Ezeket nem lehet összevonni? Lehet benne még felesleges rész? És a kijelző fényének kikapcsolására sem jöttem rá.
Előre is köszönöm az építő jellegű hozzászólásokat.
(#) Koleus válasza atus1981 hozzászólására (») Jan 25, 2016 /
 
Az hogy hány ciklust bírnak ki, eléggé relatív. Azon múlik, milyen környezetben dolgozik, hogy lett méretezve, és gyártófüggő is lehet. Jó hűtés és megfelelő méretezés mellett (1f esetén 3kW kb 14-15A, erre 25A SSR illik), megfelelő biztivel (szereti az UR-t) a gyártók sok millió ciklust emlegetnek. De sima 20A automata bizti mellett, az első melegítőzárlatánál/földzárlatnál kuka lesz.
(#) Balázs válasza kegyetlen19 hozzászólására (») Jan 25, 2016 /
 
A TimingISR egy megszakításkezelő rutin (ISR - Interrupt Service Routine), megszakításvezérelten hívódik másodpercenként. Ez azt jelenti, hogy akárhol is tart éppen a program, másodpercenként mindig automatikusan meghívódik ez a függvény. Növeli az értékeket, és jelzi, hogy lehet frissíteni a kijelzőt. A loop ezt észreveszi, és kiírja az értékeket. A TimeUpdate a kétjegyű számokból maradékos osztással előállítja a helyiértékeket. A két függvényt össze lehet vonni, de általánosságban az a jó programozási gyakorlat, ha a megszakítási rutinok a lehető legrövidebbek és leggyorsabbak (számításokat végezni, függvényt hívni megszakításban általában nem illik).
A hozzászólás módosítva: Jan 25, 2016
(#) Balázs válasza kegyetlen19 hozzászólására (») Jan 25, 2016 /
 
Az egyik kérdésedre nem válaszoltam: a kijelző kikapcsolása a
  1. tm1637.clearDisplay();

függvénnyel lehetséges, a set függvénnyel pedig a fényerő is állítható. Legalábbis a driver forráskódjából úgy látom. Kipróbálni nem tudom, nincs ilyen kijelzőm.
A hozzászólás módosítva: Jan 25, 2016
(#) kegyetlen19 válasza Balázs hozzászólására (») Jan 25, 2016 /
 
Igen, a set-el tudtam állítani a fényerőt, (a void setup-ban benne van).
De a tm1637.clearDisplay(); nincs, ezt hogy tudom a kódba beilleszteni?
(#) Balázs válasza kegyetlen19 hozzászólására (») Jan 25, 2016 /
 
Hát amikor ki szeretnéd kapcsolni a kijelzőt, akkor hívd meg ezt a függvényt...
(#) kegyetlen19 válasza Balázs hozzászólására (») Jan 25, 2016 /
 
Hát valami nem tökéletes.
A fent beillesztet kód 40. sora után raktam be, mikor nyomom a nyomógombot csak villog a kijelző, ha elengedem akkor meg normál fényerővel megy.
(#) Balázs válasza kegyetlen19 hozzászólására (») Jan 25, 2016 / 1
 
Ez így is van rendjén, mivel a 34. sorban az inditas változó értékétől függetlenül kiírod a kijelzőre az aktuális tartalmat.
(#) kegyetlen19 válasza Balázs hozzászólására (») Jan 25, 2016 /
 
Megvan. Köszi.
A 40. sor után az Update-t OFF-ra állítom és így a 32. sor utáni rész nem teljesül.
A 45. sort meg átraktam a 47.-be.
A kódot viszont lehet még egyszerűsíteni?
(#) vyky hozzászólása Jan 26, 2016 /
 
Sziasztok.
Egy hp nyomtatóból bontottam egy enkóder tárcsát a hozzá tartozó optóvillával,de a neten fellelhető programok közül egyikkel sem működik helyesen.Tudna valaki egy működő példát feltenni? A cél az lenne ,hogy kiírja hogy mennyit forgattam jobbra illetve balra.
Köszönöm előre is.
(#) Koleus válasza atus1981 hozzászólására (») Jan 26, 2016 /
 
Kérdezni akartam, hogy milyen SSR néztél ki, de visszaolvastam és látom hogy Fotek 25 A. Mivel kínában másmilyenek az amperok, árban meg kicsi a különbség, válaszd a 40 A+ hűtőborda. Ide már jó a 20 A kismegszakító. Vezérelni meg tranzisztoron keresztül kellene, mint ahohy Bakman is írta.
(#) Koleus válasza vyky hozzászólására (») Jan 26, 2016 /
 
Mit értesz az alatt hogy nem működik rendesen? Kevesebbet vagy többet mutat? Ismerned kell' hogy hány impulzust ad a tárcsa egy körön.
(#) vyky válasza Koleus hozzászólására (») Jan 26, 2016 /
 
Szia.
Itt egy példa kód.
  1. //Variables to set the counts/inch
  2. #define TH_PER_IN  20 //lead screw threads per inch
  3. #define CT_PER_REV  48 //encoder counts per revolution
  4. // Thus the accuracy of the measurement 1 inch /(TH_PER_IN*CT_PER_REV)
  5.  
  6. //Variable to reverse the sign if the machine and encoder don't agree with your sense of things
  7. #define REFLECTX -1
  8. //#define REFLECTY -1
  9.  
  10.  
  11. //Based on
  12. //http://www.circuitsathome.com/mcu/reading-rotary-encoder-on-arduino
  13. //Expanded to 3 encoders and written to be more clear and less over elegant
  14. #include <LiquidCrystal.h>
  15. LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
  16.  
  17. unsigned int olddata;
  18. unsigned int newdata;
  19. char newX;
  20. //char newY;
  21.  
  22. char oldX;
  23. //char oldY;
  24.  
  25. long int counterX = 0;
  26. //long int counterY = 0;
  27.  
  28. // table of meaning of states, input is two bits old value, two bits new value
  29. // the encoder has either moved +1, -1 or stayed in the same place
  30. int8_t enc_states[] = {0,-1,1,0,1,0,0,-1,-1,0,0,1,0,1,-1,0};
  31.  
  32. void setup()
  33. {
  34.   /* Setup encoder pins as inputs */
  35.   DDRD = B00000000;   //Sets input direction all to analog inputs
  36.   PORTD = B11111111;   //Sets pull ups on the analog pins to 1
  37.  
  38.  
  39.   Serial.begin (9600);
  40.   Serial.println("Start");
  41.   counterX = 0;
  42.  // counterY = 0;
  43.  
  44.  
  45.   pinMode(13 ,OUTPUT);  //turn on backlight
  46.   digitalWrite(13, HIGH); //turn on backlight
  47.   lcd.begin(16,2);
  48.   delay(500); //Optrex display needs to rest after a begin
  49.   lcd.clear();
  50.   lcd.setCursor(0,0);
  51.   delay(100); //Optrex display needs to rest after setting cursor
  52.   lcd.print("X: ");
  53.  // lcd.setCursor(0,1);
  54.  // lcd.print("Y: ");
  55.  
  56. }
  57.  
  58. void loop()
  59. {
  60.  
  61.   //This loop needs to run fast to avoid missing encoder states
  62.   newdata = PIND;
  63.  
  64.   if( newdata != olddata ) {
  65.  
  66.     newX = newdata & 0x03;  //mask out just the X bits
  67.     oldX = olddata & 0x03;  //mask out just the X bits
  68.     oldX = oldX << 2;  //move over to form address to table
  69.     counterX += enc_states[oldX + newX] ;  //increment or decrement counter from table
  70.     Serial.print(" X:");
  71.     Serial.print(counterX, DEC);
  72.     lcd.setCursor(2,0);
  73.     lcd.print(1000*counterX/(TH_PER_IN*CT_PER_REV*REFLECTX), DEC);
  74.     lcd.print(" mm    ");
  75.  
  76.  //   newY = newdata & 0x03;   //mask out just the Y bits
  77.  //   newY = newY >> 2;  //shift to LSBs
  78.  //   oldY = olddata & 0x03;   //mask out just the Y bits
  79.  //   counterY += enc_states[oldY + newY] ;
  80.  //   Serial.print(" Y:");  
  81.  //   Serial.print(counterY, DEC);
  82.  //   lcd.setCursor(2,1);
  83.  //   lcd.print(1000*counterY/(TH_PER_IN*CT_PER_REV*REFLECTY), DEC);
  84.  //   lcd.print(" mm    ");
  85.  
  86.   }
  87.   olddata = newdata;
  88. }

Szépen be is jön az lcd-n a kép és a számok futnak össze vissza fel's alá.
Az analog pinekre kötöttem az enkóder adatszálait.
Így nem igazán értem mi baj lehet
U.I.: egy LCD Keypad shield van hozzá.
A hozzászólás módosítva: Jan 26, 2016
(#) Koleus válasza vyky hozzászólására (») Jan 26, 2016 1 /
 
Ez a belinkelt program egy orsón számítja az elmozdulást. TH_PER_IN a menetek száma inch-enként, a tárcsa pedig 48 impulzust ad körönként (CT_PER_REV). Az impulzusokat a PIND0 és PIND1 lábakon számolja. Nem használ interrupt-ot, csak simán beolvassa a D portot, majd kimaszkolja a D0 és D1 (67. sor). Az értéket összehasonlítja a táblázattal (30. sor). A kombináció alapján növeli vagy csökkenti a számlálót (70. sor). A 74. sorban meg átszámolja a számláló értékét mm-be és kiírja az LCD-re.
Ehhez képest neked mi van? Van-e orsód vagy nincs, hány menet/inch v mm, hány impulzust ad a tárcsád körönként,stb? Mit ír a kijelződ?
Ez a megoldás csak lassú mozgásoknál alkalmazható, kis impulzus szám mellett. Ha az ardu mást is csinál, nem "ér rá" megszámolni az összes impulzust, az eredmény meg pontatlan lesz. Pontosan csak megszakításokkal lehet mérni.
(#) vyky válasza Koleus hozzászólására (») Jan 26, 2016 /
 
Szia.
Van az orsóm amin van a tárcsa tárcsa felbontását megszámolni szabad szemmel lehetetlen,
De úgy 2000 körülire saccolom.
Ahogy írod valószínűleg a lassú mozgás hibbádzik
mást nem csinál az arduino csak ere figyel,tehát van ideje számolni.
A kijelzőn meg fut a szám fel le attól függetlenül,hogy mozgatom-e a tárcsát vagy sem.
(#) Koleus válasza vyky hozzászólására (») Jan 26, 2016 /
 
A 2000 impulzus az jó sok, megszakítások nélkül nem fog menni. Ez a program inkább csak lyukacsos tárcsára való, mint ahogy írtam, a páldaprogram is 48 impulzusra van írva.
(#) vyky válasza Koleus hozzászólására (») Jan 26, 2016 /
 
Értem,és köszönöm szépen.és az mitől lehet,hogy hozzá sem érek mégis számol felfele a kijelző?
(#) vyky válasza vyky hozzászólására (») Jan 26, 2016 /
 
Bocsi az alap kérdésért,de a 0x03 mit csinál?
Próbálok közben utána olvasni,de eddig nem sok sikerrel
(#) Koleus válasza vyky hozzászólására (») Jan 26, 2016 /
 
Az ardu változást érzékel a bemeneteken, a két leolvasás között. Mint ahogy írtad, a beosztásod annyira finom, hogy megszámolhatatlan. A megszakításoknál felfutó és lefutó éleket kezelsz, de ilyen impulzusszám mellett valszeg kell még szűrés/prellmentesítés is. A másik dolog, hogy milyen fényre reagálnak a fototranzisztorok az olvasó részen. Mert ugye a nyomtatóban tök sötét van, csak a dióda világít át a tárcsa résein, itt meg kint van. Meg hát ilyen felbontásnál az olvasónak hiperérzékenynek kell lennie.
(#) Koleus válasza vyky hozzászólására (») Jan 26, 2016 /
 
Itt keverik kicsit az arduino környezetet az AVR C-vel. A 0x03 egy hex maszk, a beolvasott port 8 bites, mivel csak az első két lábat olvasod, logikai és-sel eldobod a többit (0x03 = 00000011 b).
Nem tudom milyen ardud van, de most eszméltem rá egy szarvashibára. A program a D port 0 és 1 bitjét olvassa, ami az Uno-n, Nano-n, nem más mint az RX, TX. Ezért a soros portot számolja. Írd át az összes PORTD-t és PIND-t, PORTC-re ás PINC-re, mert ezek az analóg bemenetek. A tárcsát az A0 és A1-re kötötted?
(#) vyky válasza Koleus hozzászólására (») Jan 26, 2016 /
 
Jogos valóban PIND volt benne de az A1 A2-re tettem a villa adatlábait
Uno-m van. Szóval akkor az analóg lábakon csak az A1 és az A2 lábat figyeli?
Ez nem valami jó,mert az A0 az LCD Key shield miatt nyomógombra van kötve
Az hogy tudnám elérni,hogy az A1..... A5 -ig használja ?
(#) Koleus válasza vyky hozzászólására (») Jan 26, 2016 /
 
A 63. sorban a D portot olvassa be, ami ardunál D0-D7. Ha átírod mindenhol a PORT és PIND-t C-re, mint ahogy írtam, és a maszkot megváltoztatod, a 67. és 68. sorokban 0x03 helyett 0x06 (0000 0110 b), akkor a C port 1 és 2 bitjét figyeled, ami az ardun az A1 és A2.
(#) vyky válasza Koleus hozzászólására (») Jan 26, 2016 /
 
Átírtam most jön a teszt Sajnos csak sutkosnak a számok,de csak felfele,anélkül,hogy hozzáérnék
(#) Koleus válasza vyky hozzászólására (») Jan 26, 2016 /
 
A 36. és 37. sorokat is átírtad? Mivel használsz már más lábakat a C porton, jobb lenne csak az A1 és A2 pinMode-dal bemenetként definiálni, és aktiválni a felhúzó elleállást digitalWrite()-tal. Az eredeti program az egész portot írja egyszerre. Ha ez sem segít, és nem az LCD panelod könyvtára írja felül a portot, akkor még mindig marad a hozzászólásban leirtak.
(#) vyky válasza Koleus hozzászólására (») Jan 26, 2016 /
 
Átírtam ahogy mondtad.De csak futnak a számok felfele Akkor ez nem jött össze
Köszönöm a segítséget.
(#) ALI hozzászólása Jan 27, 2016 /
 
Sziasztok.

Egy kis segítséget kérnék.
Építettem agy kazán vezérlőt ami a szoba hőmérsékletének függvényében szabályozza a kazánt.
lm35 a szoba hőmérő 5 méterre van a vezérlőtől.
De messzebbre kellene vinnem.
Vezeték nélkül meg lehet valahogy oldani a hőmérést?
Valami olyan kellene amihez nem kell net.
Olyasmit kellene csinálnom mint egy szoba termosztát.

Előre is köszi
Következő: »»   186 / 856
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