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   418 / 853
(#) t4nt1zjeee válasza Rober_4 hozzászólására (») Jan 23, 2018 /
 
Valahol rossz formátumot vagy értéket adtál meg. Nézd vissza mit javítottál ami után nem lett jó. Majd állítsd vissza olyanra mint amilyen előtte volt, hogy jó legyen. Én is így írtam saját programot. Nem volt könnyű de összejött. Már 95%-os.
(#) Rober_4 válasza t4nt1zjeee hozzászólására (») Jan 23, 2018 /
 
Még csak kezdem, még nem ment eddig. Beállítottam a típust Nano-ra, usb-re a kommunikációt, a csip típusát, mást nem nagyon tudtam. Lehet kipróbálom Windows alatt, hátha ilyen jogosultsági problémák miatt van...
Egyébként fordítási hiba...
A hozzászólás módosítva: Jan 23, 2018
(#) Rober_4 válasza Rober_4 hozzászólására (») Jan 23, 2018 /
 
Windowson megy, ott le is fordul és át is küldi a vezérlőre.
(#) t4nt1zjeee válasza Rober_4 hozzászólására (») Jan 23, 2018 2 /
 
Mondjuk én alap, hogy Windowson dolgozok. Win 7 a legjobb ilyen téren. A Mac meg Linux/Ubuntu ilyen hülyeségeket el kell felejteni. Arduino inkább Windows párti.
(#) Bakman válasza t4nt1zjeee hozzászólására (») Jan 23, 2018 / 2
 
Idézet:
„A Mac meg Linux/Ubuntu ilyen hülyeségeket el kell felejteni.”
Hiszed vagy nem, az ablakokon túl is van ám élet csak néha ki kellene nézni.
(#) tbarath válasza t4nt1zjeee hozzászólására (») Jan 23, 2018 /
 
LOL, még hogy windows párti. Inkább az a helyzet, hogy _te_ a windows-hoz értesz (de legalábbis a unix/linux világhoz sokkal kevésbé), ezért preferálod a windows-t. Amivel semmi baj nincs, csak nem kellene alaptalan butaságokat terjeszteni.
(#) tbarath válasza Rober_4 hozzászólására (») Jan 23, 2018 / 1
 
Szerintem itt a telepítéssel/konfigolással van valami elrontva, mert ez nem egy program, csak egy üres sketch. Ennek minden körülmények között le kellene fordulnia.

Lehet valami jogosultsági probléma is, de valami konfig csúnyaság is.
(#) pjg válasza t4nt1zjeee hozzászólására (») Jan 23, 2018 /
 
Az Arduino is Linux.
(#) szikorapéter hozzászólása Jan 23, 2018 /
 
Sziasztok. Arduino nano-val élesztek épp egy AD9851-est ,találtam is egy programot viszont az én LCD-m csak 2x16 soros. Ehhez át is írtam de valamiért nem csinál semmit a kijelzővel. Jelenleg a nano A4 és A5 portjára van kötve a serial lcd (A4 = SDA , A3 = SCL).

  1. /*
  2.    
  3.    This sketch will setup an Arduino (Nano in my example)
  4.    with the an I2C 20x4 LCD and a AD9851 DDS module (from ebay)
  5.    and a rotary encoder.
  6.    
  7.    The encoder can be spun from 1.8MHz to 30MHz.
  8.    When you push the encoder push button it will allow to
  9.    change the decade position of the number being changed/tuned.
  10.    
  11.    This code is heavily commented so that you can try to
  12.    understand what is going on.
  13.    
  14.    This tries to avoid the use of the delay command since that is
  15.    a blocking statement. Use of the millis function and variable
  16.    checking as a timer are used instead if/when needed.
  17.    
  18.    The base sketch takes about 8k of memory.
  19.    
  20.    This could be easily used a the builing block for a HF radio.
  21.    
  22.    -------------------
  23.    
  24.    DDS AD9850/AD9850 info from:
  25.    Mike Bowthorpe
  26.    http://www.ladyada.net/rant/2007/02/cotw-ltc6903/
  27.    http://www.geocities.com/leon_heller/dds.html
  28.    Function for sending the byte word by Peter Marks http://marxy.org
  29.  
  30.        
  31.    
  32.    ---Encoder info---
  33.    https://forum.sparkfun.com/viewtopic.php?p=65052
  34.  
  35.    http://hifiduino.files.wordpress.com/2010/10/rotarynodebounce.jpg
  36.  
  37.    read a rotary encoder with interrupts
  38.    Encoder hooked up with common to GROUND,
  39.    Encoder Pin A to pin 2,
  40.    Encoder Pin B to pin 4 (or pin 3 see below)
  41.    
  42.    uses Arduino pullups on A & B channel outputs
  43.    turning on the pullups saves having to hook up resistors
  44.    to the A & B channel outputs
  45.    
  46.    
  47.    ---I2C LCD INFO---
  48.    http://arduino-info.wikispaces.com/LCD-Blue-I2C
  49.    YWROBOT
  50.    LCD header pins/cable color code
  51.    VCC = Red         -- 5v
  52.    GND = Black       -- Gnd  
  53.    SDA = Yellow      -- A4
  54.    SCL = Green/White -- A5
  55.  
  56. */
  57.  
  58. //---Libraries
  59. #include <Wire.h>                                       // I2C library
  60. #include <LiquidCrystal_I2C.h>                          // I2C LCD library
  61. LiquidCrystal_I2C lcd(0x27,16,2);                       // set the LCD address to 0x27 for a 16 chars and 2 line display
  62.  
  63. //--Define constants
  64. #define encoder0PinA  2                        // Setup the encoder pins
  65. #define encoder0PinB  4                        // Setup the encoder pins
  66. #define encoderbtn 6                           // encoder pushbutton
  67. #define DDS_CLOCK 180000000                    // 30MHz x 6 (onboard rock)
  68.  
  69.  
  70. //---define variables
  71. volatile long encoder0Pos = 10000000;          // setup a value to count with
  72. volatile long oldencoder0Pos = encoder0Pos ;   // used to compare
  73. int varVal;                                    // variable for reading the pin status
  74. int varHz = 1;                                 // 1=Hz, 2=KHz, 3=10KHz, 4=100KHz, 5=MHz tuning step mode
  75. int long varMult = 1;                          // used to plug in as the multiplier
  76. char varBuf1[8];                               // used to convert an int to a string array for the freq display
  77. char varBuf2[10];                              // used to format the freq display with commas      
  78. unsigned long varCurrentMillis;                // current time via the Millis function
  79. long varPreviousMillis = 0;                    // used as a timer to avoid bounce
  80. long varInterval = 500;                        // interval used with a timer (milliseconds)
  81. byte ddsLOAD = 8;                              // AD9851 LOAD   Arduino D8
  82. byte ddsCLOCK = 9;                             // AD9851 CLOCK  Arduino D9
  83. byte ddsDATA = 10;                             // AD9851 FQ_UD  Ardunio D10
  84. long varTuning_word;                           // Used to hold the word for the DDS
  85.  
  86.  
  87.  
  88. void setup() {
  89. //---Setup encoder  
  90.   pinMode(encoderbtn, INPUT);
  91.   pinMode(encoder0PinA, INPUT);
  92.   digitalWrite(encoder0PinA, HIGH);       // turn on pullup resistor
  93.   pinMode(encoder0PinB, INPUT);
  94.   digitalWrite(encoder0PinB, HIGH);       // turn on pullup resistor
  95.   attachInterrupt(0, doEncoder, CHANGE);  // encoder pin on interrupt 0 - pin 2
  96. //---Initial screen setup  
  97.   lcd.init();                             // initialize the lcd
  98.   lcd.backlight();                        // turn on the lcd backlight
  99.   lcd.clear();                            // good practice to make sure that display is clear
  100.   lcd.setCursor(0,0);                     // column,row
  101.   lcd.print("Freq: ");
  102.   sprintf(varBuf1,"%8lu", encoder0Pos);   // convert initial freq for display
  103.   sprintf(varBuf2,"%1c%1c,%1c%1c%1c,%1c%1c%1c", varBuf1[0], varBuf1[1], varBuf1[2], varBuf1[3], varBuf1[4], varBuf1[5], varBuf1[6], varBuf1[7], varBuf1[8]);
  104.   lcd.print(varBuf2);
  105.   lcd.setCursor(18,0);                    // column,row
  106.   lcd.print("Hz");                        // prints out step; should variablize
  107. //---setup pins for AD9851
  108.   pinMode (ddsDATA, OUTPUT);              // sets pin 10 as OUPUT
  109.   pinMode (ddsCLOCK, OUTPUT);             // sets pin 9 as OUTPUT
  110.   pinMode (ddsLOAD, OUTPUT);              // sets pin 8 as OUTPUT
  111.   sendFrequency(encoder0Pos);             // send the initial freq to the DDS
  112. }
  113.  
  114.  
  115.  
  116. void loop(){
  117.   encoderStatus();                        // check for encoder button press
  118.   lcdStatus();                            // function for lcd updates
  119.   if (encoder0Pos != oldencoder0Pos)      // only update the DDS if the freq has changed
  120.     sendFrequency(encoder0Pos);           // function to update the DDS
  121. }
  122.  
  123.  
  124.  
  125. void sendFrequency(long encoder0Pos){                        // function to update the DDS
  126.   varTuning_word = (encoder0Pos * pow(2, 32)) / DDS_CLOCK;   // set value for the DDS
  127.   digitalWrite (ddsLOAD, LOW);                               // take load pin low
  128.   //--start loop--
  129.   for(int i = 0; i < 32; i++)                                // loop through the bits
  130.   {
  131.     if ((varTuning_word & 1) == 1)                           // test for binary 1
  132.       outOne();                                              // function to send 1 serial
  133.     else
  134.       outZero();                                             // function to send 0 serial
  135.     varTuning_word = varTuning_word >> 1;                    
  136.   }
  137.   //--end loop--
  138.   byte_out(0x09);                                            // send the end command
  139.   digitalWrite (ddsLOAD, HIGH);                              // take the load pin high
  140. }
  141.  
  142.  
  143.  
  144.  
  145. void byte_out(unsigned char byte)         // spin through a byte (8 bits)
  146. {                                         // send it a bit a time
  147.   int i;
  148.  
  149.   for (i = 0; i < 8; i++)
  150.   {
  151.     if ((byte & 1) == 1)
  152.       outOne();
  153.     else
  154.       outZero();
  155.     byte = byte >> 1;
  156.   }
  157. }
  158.  
  159.  
  160.  
  161.  
  162. void outOne(){                            // send 1 to the DDS        
  163.   digitalWrite(ddsCLOCK, LOW);            // set the ddsCLOCK pin low
  164.   digitalWrite(ddsDATA, HIGH);            // set the ddsDATA pin high
  165.   digitalWrite(ddsCLOCK, HIGH);           // set the ddsCLOCK pin HIGH
  166.   digitalWrite(ddsDATA, LOW);             // set the ddsDATA ping low
  167. }
  168.  
  169.  
  170.  
  171. void outZero(){                           // send 0 to the DDS
  172.   digitalWrite(ddsCLOCK, LOW);            // set the ddsCLOCK pin low
  173.   digitalWrite(ddsDATA, LOW);             // set the ddsDATA pin low
  174.   digitalWrite(ddsCLOCK, HIGH);           // set the ddsCLOCK pin high
  175. }
  176.  
  177.  
  178.  
  179. void encoderStatus (){                    // this is checking for the button press and setting the MHZ, KHz, Hz cursor
  180.   varCurrentMillis = millis();            // set variable = time
  181.   if(varCurrentMillis - varPreviousMillis > varInterval) {
  182.      varPreviousMillis = varCurrentMillis;  
  183.      varVal = digitalRead(encoderbtn);    // read input value and store it in val
  184.      if (varVal == LOW) {                 // check if the button is pressed
  185.         if (varHz == 6) {                 // 1 Hz, 2 100Hz, 3 KHz, 4 10KHz, 5 100KHz, 6 MHz
  186.         varHz = 0;                        // reset from MHz to Hz  
  187.         }    
  188.       varHz = varHz + 1;                  // move one position
  189.      }
  190.   }
  191. }
  192.  
  193.  
  194.  
  195.  
  196.  
  197. void lcdStatus (){
  198.     sprintf(varBuf1,"%8lu", encoder0Pos);        
  199.     sprintf(varBuf2,"%1c%1c,%1c%1c%1c,%1c%1c%1c", varBuf1[0], varBuf1[1], varBuf1[2], varBuf1[3], varBuf1[4], varBuf1[5], varBuf1[6], varBuf1[7], varBuf1[8]);
  200.     if (encoder0Pos != oldencoder0Pos){
  201.       lcd.setCursor(6,0);                   // column,row
  202.       lcd.print(varBuf2);                   // prints out the freq
  203.     }
  204.  
  205.    switch (varHz) {
  206.     case 1:                                 // if 1 move the cursor to Hz
  207.       lcd.setCursor(18,0);                  // column,row
  208.       lcd.print("H1");                      // prints out step
  209.       varMult = 1;        
  210.       break;
  211.     case 2:                                 // if 2 move the cursor to 100 Hz
  212.       lcd.setCursor(18,0);                  // column,row
  213.       lcd.print("H2");                      // prints out step
  214.       //varMult = 1000/2;                   // original encoder with detents
  215.       varMult = 100;                        // AA0ZZ encoder, no detents
  216.       break;
  217.     case 3:                                 // if 2 move the cursor to KHz
  218.       lcd.setCursor(18,0);                  // column,row
  219.       lcd.print("K1");                      // prints out step
  220.       //varMult = 1000/2;                   // original encoder with detents
  221.       varMult = 1000;                       // AA0ZZ encoder, no detents
  222.       break;
  223.      case 4:                                // if 3 move the cursor to 10KHz
  224.       lcd.setCursor(18,0);                  // column,row
  225.       lcd.print("K2");                      // prints out step
  226.       //varMult = 10000/2;                  // original encoder with detents
  227.       varMult = 10000;                      // AA0ZZ encoder, no detents
  228.       break;  
  229.     case 5:                                 // if 4 move the cursor to 100KHz
  230.       lcd.setCursor(18,0);                  // column,row
  231.       lcd.print("K3");                      // prints out step
  232.       //varMult = 100000/2;                 // original encoder with detents
  233.       varMult = 100000;                     // AA0ZZ encoder, no detents
  234.       break;  
  235.     case 6:                                 // if 5 move the cursor to MHz
  236.       lcd.setCursor(18,0);                  // column,row
  237.       lcd.print("MH");                      // prints out step
  238.       //varMult = 500000;                   // original encoder with detents
  239.       varMult = 1000000;                    // AA0ZZ encoder, no detents
  240.       break;
  241.     }
  242.     if (encoder0Pos <= 1800000) {            // lower bounds limit
  243.         encoder0Pos  = 1800000;
  244.     }
  245.     if (encoder0Pos >= 30000000) {           // upper bounds limit
  246.         encoder0Pos  = 30000000;
  247.     }
  248. }
  249.  
  250.  
  251.  
  252.  
  253.  
  254. void doEncoder(){
  255.  oldencoder0Pos = encoder0Pos;                // reset the variables so that we can compare them next time
  256.   if (digitalRead(encoder0PinA) == HIGH) {    // found a low-to-high on channel A
  257.     if (digitalRead(encoder0PinB) == LOW) {   // check channel B to see which way
  258.                                               // encoder is turning
  259.       encoder0Pos = encoder0Pos - varMult;    // CCW
  260.     }
  261.     else {
  262.       encoder0Pos = encoder0Pos + varMult;    // CW
  263.     }
  264.   }
  265.   else                                        // found a high-to-low on channel A
  266.   {
  267.     if (digitalRead(encoder0PinB) == LOW) {   // check channel B to see which way
  268.                                               // encoder is turning  
  269.       encoder0Pos = encoder0Pos + varMult;    // CW
  270.     }
  271.     else {
  272.       encoder0Pos = encoder0Pos - varMult;    // CCW
  273.     }
  274.   }
  275.  }
  276.  
  277. /*  to read the other two transitions - just use another attachInterrupt()
  278. in the setup and duplicate the doEncoder function into say,
  279. doEncoderA and doEncoderB.
  280. You also need to move the other encoder wire over to pin 3 (interrupt 1).
  281. */
(#) szikorapéter válasza szikorapéter hozzászólására (») Jan 23, 2018 /
 
Valamiért mindig csak az LCD init sornál áll meg.

  1. //---Initial screen setup  
  2.   lcd.init();                             // initialize the lcd


A hibaüzenet amit ír:
  1. Arduino: 1.8.3 (Windows 7), Alaplap:"Arduino Nano, ATmega328"
  2.  
  3. C:\Users\Zikha\Desktop\sketch_jan23a\sketch_jan23a.ino:61:32: warning: invalid conversion from 'int' to 't_backlighPol' [-fpermissive]
  4.  
  5.  LiquidCrystal_I2C lcd(0x27,16,2);                       // set the LCD address to 0x27 for a 20 chars and 4 line display
  6.  
  7.                                 ^
  8.  
  9. In file included from C:\Users\Zikha\Desktop\sketch_jan23a\sketch_jan23a.ino:60:0:
  10.  
  11. C:\Program Files (x86)\Arduino\libraries\Newliquidcrystal_1.3.5/LiquidCrystal_I2C.h:53:4: note: initializing argument 3 of 'LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t, uint8_t, t_backlighPol)'
  12.  
  13.     LiquidCrystal_I2C (uint8_t lcd_Addr, uint8_t backlighPin, t_backlighPol pol);
  14.  
  15.     ^
  16.  
  17. C:\Program Files (x86)\Arduino\libraries\Newliquidcrystal_1.3.5/LiquidCrystal_I2C.h: In function 'void setup()':
  18.  
  19. C:\Program Files (x86)\Arduino\libraries\Newliquidcrystal_1.3.5/LiquidCrystal_I2C.h:154:9: error: 'int LiquidCrystal_I2C::init()' is private
  20.  
  21.     int  init();
  22.  
  23.          ^
  24.  
  25. sketch_jan23a:97: error: within this context
  26.  
  27.    lcd.init();                             // initialize the lcd
  28.  
  29.             ^
  30.  
  31. exit status 1
  32. within this context
  33.  
  34. Ennek a jelentésnek több információja lehetne
  35. a "Bővebb kimenet mutatása fordításkor"
  36. opció engedélyezésével a Fájl -> Beállítások-ban.
(#) Rober_4 válasza t4nt1zjeee hozzászólására (») Jan 24, 2018 /
 
Én meg csak ezért az Arduino-ért nem akartam Windowson dolgozni, ha 5 éve nem használom, csak végszükségben. Ráadásul azok az audió szoftverek is amikkel tesztelem az Arduinot, mert ilyen Midi vezérlőszerűséget akarok, is Linuxon futnak, így mindig újra kell indítanom a feltöltéshez a gépet...
(#) Rober_4 válasza tbarath hozzászólására (») Jan 24, 2018 /
 
Ha rendszergazda jogokkal futtatom az Arduino programot, akkor valamivel jobb. Olyan mintha nem lenne joga lefordítani, vagy a fordítónak nem lenne joga a futtatáshoz...
(#) tbarath válasza Rober_4 hozzászólására (») Jan 24, 2018 /
 
Szerintem szedd le az arduino IDE-t és telepítsd újra.
(#) Kera_Will válasza Rober_4 hozzászólására (») Jan 24, 2018 / 1
 
Linux alatt a dialout csoporthoz kell hozzáadni a felhasználót!

ez a lényeg

Amíg nem tagja a dialout csoportnak addig nem fog portra írni a user nevében ... csak ha root ként futtatja az ARDUINO IDE-t.
A hozzászólás módosítva: Jan 24, 2018
(#) szikorapéter válasza szikorapéter hozzászólására (») Jan 24, 2018 /
 
Valaki esetleg tudja a választ mert még itt kínlódok vele de sajnos még mindig megakad a program ugyan ott.
(#) Gabó válasza szikorapéter hozzászólására (») Jan 24, 2018 /
 
Tanulmányozd át!
LCD I2C
(#) benjami válasza szikorapéter hozzászólására (») Jan 24, 2018 /
 
Az eredeti programmal is elakad? Attól hogy te kisebb kijelzőt raksz bele, attól még működnie kell, csak nem fog ráférni minden szöveg.
Amúgy az I2C átalakítóra ugyanúgy van rákötve a kijelző mint a példában?
(#) szikorapéter válasza benjami hozzászólására (») Jan 24, 2018 /
 
Igen ugyanúgy van rákötve mint általában, az eredeti program is megáll ugyan itt. Az eredeti programot itt lehet megtalálni: Link a project felé.
(#) tbarath válasza Kera_Will hozzászólására (») Jan 24, 2018 /
 
Nála elvileg fordításnál hal el a gcc (pontosabban avr-g++), márpedig ahhoz nem kell semmi más, mint hogy a telepítés rendben legyen. A feltöltéshez persze kell a dialout, de szerintem itt nem ez lesz a megoldás. Jogosultság, 32/64 bit kavarás, valami lib hiányzik, valahonnan egy az egyben átmásolt konfig, én ilyesmire tippelek
(#) tbarath válasza szikorapéter hozzászólására (») Jan 24, 2018 /
 
Na akkor kattints a linkre, ott van linkelve az I2C LCD-s témáról valami wiki nevű - de nagyon nem wiki - oldal, és ott nézd meg hogy tök más a deklarálás, mint amit a kódban használ a linkelő.

Vagy keress másik i2c libet, vagy a kódot írd át. Szerintem az első egyszerűbb.
(#) szikorapéter válasza tbarath hozzászólására (») Jan 24, 2018 /
 
Köszönöm a választ,akkor próbálok egy másik libary-t keresni elsőnek, ha nem válik be marad a kódmódosítás.
(#) szikorapéter válasza tbarath hozzászólására (») Jan 24, 2018 /
 
Kerestem másik I2C libet de semmi. Ugyanúgy ugyanott akad meg a program, de a zárójeles részben nem kéne valamit megadnom?
(#) tbarath válasza szikorapéter hozzászólására (») Jan 24, 2018 /
 
Semmi?
google://LiquidCrystal_I2C
1. találat
A példakód szerint (link) így inicializál:
  1. #include <LiquidCrystal_I2C.h>
  2.  
  3. // Set the LCD address to 0x27 for a 16 chars and 2 line display
  4. LiquidCrystal_I2C lcd(0x27, 16, 2);
  5.  
  6. void setup()
  7. {
  8.         // initialize the LCD
  9.         lcd.begin();


A másik út: én régebben használtam i2c-s 1602-es LCD-t, szerintem kb. az a kód, amit használsz, innen (Link). Én a LiquidCrystal_V1.2.1.zip-et használtam, vagy mert akkor az volt a legújabb, vagy mert az működött, már nem emlékszem rá.
Itt így néz ki az init (csak a lényeg):
  1. #include <LiquidCrystal_I2C.h>
  2.  
  3. // Set the pins on the I2C chip used for LCD connections:
  4. //                    addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
  5. LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address
  6.  
  7. void setup() {
  8.         lcd.begin(16, 2);  // initialize the lcd for 16 chars 2 lines, turn on backlight
A hozzászólás módosítva: Jan 24, 2018
(#) lm53 válasza berkesandor hozzászólására (») Jan 24, 2018 /
 
Az Arduino saját tápja lehet a probléma. A működő példánynál üzem közben megvan a 3.3V, a nem működőknél 3.1V körül van, lehet ez is az ok, rá kell tennem egy külső 3V3 -t. Mindenkinek kösz a segítő szándékot.
(#) lm53 válasza proba hozzászólására (») Jan 24, 2018 /
 
Nem lenne megoldás a 3.3V -ról járatás, mert a 3,3V -os TFT mellett van az áramkörben egy 5V -ról működő másik SPI -eszköz is.
(#) szikorapéter válasza tbarath hozzászólására (») Jan 24, 2018 /
 
Köszönöm a 2. libary-t használtam azzal nem ment, amit linkeltél azzal rögtön jó lett. Már át is alakítottam a programot hogy jól mutasson a 2x16-os LCD-n is. Mégegyszer köszönöm a választ.
(#) tbarath válasza szikorapéter hozzászólására (») Jan 24, 2018 /
 
Szívesen. Általában célszerű linkelni azt az oldalt, ahonnan a mintát/ötletet veszed, leírni hogy honnan van a lib, mert néha nagyon nem egyértelmű. Ennek ismeretében már könnyebb megtalálni az esetleges hibákat.
(#) tbarath hozzászólása Jan 24, 2018 /
 
Sziasztok,

Interrupt-ozni készülök, ez eddig még kimaradt. Egy rotary encoder-t tennék rá, nézegettem példakódokat, és nem igazán értem hogy miért használnak sok helyen két interrupt-ot is egy rotary encoder-re.
Szerintem egy bőven elég (mondjuk PinA a interrupt pin-re, a másik "simára"), és amikor ott bármilyen változás van akkor vizsgálom a pinA és pinB értékét, ha mindkettő ugyanaz akkor órajárás irányába forgatom, ha nem akkor az ellenkező irányba.

Rosszul látom?
(#) szeg76 válasza tbarath hozzászólására (») Jan 24, 2018 / 1
 
Egy tipp: a nem éppen új ATmega328-on (is) létezik a pin change interrupt, vagyis bármely adatport bitjének változása generálhat megszakítást.
(#) Bakman válasza tbarath hozzászólására (») Jan 24, 2018 / 1
 
Csak részben. Vannak olyan enkóderek, amelyek Gray kódú kimenettel rendelkeznek, ott mindkét kimenet a másiktól függetlenül változik, mindkettőt aktívan kell figyelni. Egyik sem órajel, egyik sem irány. Ez pl. Gray kódú kimenettel rendelkezik: Bővebben: Link. 600 impulzus/fordulat van megadva gyári adatként, valójában 2400 lépést lehet megkülönböztetni egy teljes fordulat alatt.
Következő: »»   418 / 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