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   668 / 846
(#) mateatek válasza lobo67 hozzászólására (») Dec 16, 2020 /
 
A megszakításban enkódert kezelek.

  1. ISR(PCINT2_vect) {
  2.   A = A + ((PIND & _BV (4)) == 0) << 1;
  3.   A = A + ((PIND & _BV (7)) == 0) << 1;
  4.   A = A << 2;
  5.   if (A == 136) lepes--;
  6.   if (A == 144) lepes++;
  7. }


De kezdek belegabalyodni. Ha letiltom LCD kezelés közben a megszakítást, akkor valamelyest működik. Azért valamelyest, mert néha "újraindul" az MCU. Lefut a setup és kezdődik újra minden, de a RAM-ban tárolt adatok maradnak.
(#) sdrlab válasza mateatek hozzászólására (») Dec 16, 2020 /
 
Az összeadás precedenciája nagyobb, mint a shiftelésé! Biztosan így akartad ezt??

A RAM értéke resetkor nem változik meg, csak tápelvételkor....
A hozzászólás módosítva: Dec 16, 2020
(#) mateatek válasza sdrlab hozzászólására (») Dec 16, 2020 /
 
Ezt kifejthetnéd bővebben. Életem első enkóder kezelő receptje ez. Működik, azóta ezt használom. Ha lehet gyorsabbra is írni, hát átírom.
A hozzászólás módosítva: Dec 16, 2020
(#) sdrlab válasza mateatek hozzászólására (») Dec 16, 2020 /
 
Az még nem baj, de mindenképpen célszerű lenne érteni, hogy mit csinál a kód...!
Én pl nem igazán értem mi akar lenne a zárójeles rész...?!! Egy if-et nem hagytál le onnan?

De amiről én beszélek, az egy sunyi hiba, az összeadást végzi el előbb, majd ennek eredményével shiftel! Nagyon más lesz az eredmény, mintha fordítva lenne..., pedig az tűnik logikusabbnak )
(#) mateatek válasza sdrlab hozzászólására (») Dec 16, 2020 /
 
Nem hagytam le if-et. Egyszerűen egy 8 bites változóba beletologatom a pinek értékét és megvizsgálom, hogy az előre lépés, vagy hátra lépés volt-e, vagy esetleg fals jel.
(#) sdrlab válasza mateatek hozzászólására (») Dec 17, 2020 /
 
Akkor magyarázd el, mit is csinál ez szerinted? : ((PIND & _BV (4)) == 0)
Jobbik esetben a PIND 4. bitjét maszkolja..., aztán vizsgál egy egyenlőséget 0-val, de minek, és hogyan??! Itt valaha egy if lehetett gondolom.... Jelen esetben ignorálja a fordító feltehetően, majd az eredményhez hozzáadja az A változó korábbi értékét, és az egésszel shiftel egy 1-est A-ba! Nos, kötve hinném, hogy erre gondolt a költő eredetileg, és hogy ez így korrektül működne....
(#) benjami válasza sdrlab hozzászólására (») Dec 17, 2020 /
 
Szerintem működik, csak elég nehezen kibogozható, hogy hogyan (ötletes és kicsit kifacsart módszer). És a működéshez pont az kell, hogy az összeadással kezdje és a végén shifteljen.
(#) rettung hozzászólása Dec 17, 2020 /
 
Sziasztok!
Meg tudnatok nekem mondani, hogy kb. 10db led vezerlesere, egy modellbe melyik alaplapot celszeru megvenni? Automodell "kiviĺagitasa" lenne a cel. max 150mA aramfelvetel lenne. Meg sose dolgoztam arduinoval. Valaki a arduino nanot javasolta. Hestorba van valami szamomra hasznalhato szerintetek?
Koszonom!
(#) sdrlab válasza benjami hozzászólására (») Dec 17, 2020 /
 
Akkor esetleg leírnád ezt az ötletes módszert, hogy konkrétan hogyan működik szerinted?
(#) benjami válasza sdrlab hozzászólására (») Dec 17, 2020 /
 
A c fordító ugye úgy működik, hogy ha egy feltétel vizsgálat eredménye igaz, akkor az eredménye 1 (true) lesz, ha hamis akkor 0 (false).
Az második és a harmadik sorban a zárójeles részbe helyettesíts be 1-t ha az encoder vizsgált lába 0 (azaz rövidzár, ha GND-re húz), 0-t ha az encoder lába 1.
2. sor: A (static char) változó 1. bitjébe bekerül az 1 érték, ha D4 pin == LO.
3. sor: ha D7 pin == LO -> A.1 = 1, az eddig A.1-ben levő bit pedig átvándorol A.2-be
4. sor: a két bit shift után D4 és D7 pin értéke A.2 és A.3 bitbe kerül
5-6. sor: az előző megszakításkor bekerült és a most bekerült bitek alapján csökkenti vagy növeli lepes értékét. Mivel megszakításonként 4 bitet tolódik "A" változó értéke, mindig csak az aktuális és az előző megszakításkor bekerült encoder állapotát tartalmazza a régebbiek meg szépen kicsorognak felül.
A hozzászólás módosítva: Dec 17, 2020
(#) sdrlab válasza benjami hozzászólására (») Dec 17, 2020 /
 
Szerintem a char típus 8 bites, előjeles szám! Ez mikor tud 136/144 értéket felvenni?
A 4. sorban nem a 2,3 bitekbe kerülnek az értékek, hanem 3,4-be! Az első shiftelés nem kellene oda...

Ok, kapsz egy számot, ami az előző állapot, és az aktuálisból származtatott! Ez alkalmasnak tűnik arra, hogy eldöntsük volt e forgatás, és az irányát is meghatározzuk.
De mitől jó ez a kissé nyakatekert algoritmus, amikor nem nyújt semmi prellmentesítést a forgatás során?! Ami ezeknél a mechanikus(már ha itt olyan van) enkódereknél életbevágóan fontos... Ráadásul, megszakításban kezelve még véletlenül sem marad ki egy prell sem forgatás közben! Csoda, ha egyáltalán ez így használható valamire is...max optikai enkóderekhez, ahol nincs prell....
(#) benjami válasza sdrlab hozzászólására (») Dec 17, 2020 /
 
Igen, unsigned char az A, ezt kifelejtettem. Amúgy az egyenlőségvizsgálat szerintem jól fog működni előjeles változóval is, mert a 136 és 144 konstansból 0x88 és 0x90 értéket fog a fordító csinálni.
A bitek számolását lehet hogy elrontottam, de a lényeget azért leírtam.
Mechanikus enkódereknél a prell némi kondenzátorral simán megszüntethető, ha meg nincs megszüntetve, akkor lesz némi ugrálás a lepes változóban. Ha ezt a változót csak bizonyos időnként olvassuk akkor kész a prellmentesítés.
(#) sdrlab válasza benjami hozzászólására (») Dec 17, 2020 /
 
Idézet:
„Amúgy az egyenlőségvizsgálat szerintem jól fog működni előjeles változóval is, mert a 136 és 144 konstansból 0x88 és 0x90 értéket fog a fordító csinálni.”

Hát nem, mert ezek előjeles értelmezésben negatív számok már! És te pozitív számmal hasonlítanád össze! Sosem fog egyezni )

Kondenzátorral valóban elég jól csökkenthető ez az effektus..., ám az amúgy is gyatra kontaktusok élettartam szempontjából nem áldásos a szűrőkondenzátor rövidzár szerű kisütése forgatáskor....

Emlékeim szerint előfordulnak ezeknél mechanikus defektek is, amik miatt egyes pozíciókban nem ad megfelelő állapotot a kapcsolók állása! Itt csak logikai trükközésekkel oldható meg az, hogy ekkor se tévesszen se irányt, se számolást. Ez sincs kezelve itt....
(#) mateatek válasza sdrlab hozzászólására (») Dec 17, 2020 /
 
Nem tudom, hogy mit kell ezen annyit agyalni. Kellett egy enkóder kezelő rutin, és mivel a megszakítás lábaim már foglaltak voltak, hát csak PCinterrupttal tudtam megoldani. Mivel az enkóder könyvtárak akkorák, hogy fele programmemóriát lefoglalják, így eldöntöttem, írok egyet ami gyors és egyszerű. Nem volt kedvem 2000 soros agymenéseken átrágni magamat. Nem vagyok én programozó. A terv az volt, hogy mire a rendelkezésemre álló 3 sör elfogy, arra legyek készen. A prellt kondival megoldottam, a rövidzárat a kondi felől meg egy ellenállással.

Idézet:
„Akkor magyarázd el, mit is csinál ez szerinted? : ((PIND & _BV (4)) == 0)”


Kiolvassa egy adott bemeneti pin értékét. Ha magas akkor 0-át, ha alacsony akkor 1-et ad vissza. Kicsit gyorsabb, mint a digitalRead és pont a fordítottja.
A végén az if-ekben pedig a bájtot összehasonlítom. 136 helyett írhatok oda akár 0b10001000-át, vagy 0x88-at is, a fordító ugyanúgy befordítja és működik.
Lehet, hogy a kód nem jó, de viszont működik. A kérdező kérdezte, hogy mi fut a megszakításban. Erre én beillesztettem neki. Felesleges ezen vitázni. Mindenki úgy használja az enkódert, ahogy akarja.
(#) mateatek válasza sdrlab hozzászólására (») Dec 17, 2020 /
 
Idézet:
„Akkor magyarázd el, mit is csinál ez szerinted? : ((PIND & _BV (4)) == 0)

  1. void setup() {
  2.   DDRB |= _BV (4);
  3.   DDRB &= ~_BV (3);
  4.   PORTB |= _BV (3);
  5.   PORTB &= ~_BV (4);
  6.   Serial.begin(9600);
  7. }
  8.  
  9. void loop() {
  10.   Serial.println(((PINB & _BV (3)) == 0));
  11. }


Próbáljad ki. Nyomógomb hiányában zárjad össze egy alkatrész lábbal vagy egy grafit ceruzával a nanó 11-12 lábát.
(#) sdrlab válasza mateatek hozzászólására (») Dec 17, 2020 /
 
...Talán azért, mert bizonyos kódok csak a csillagok együttállásakor működnek..., aztán meg van a csodálkozás, hogy mi lehet a rossz??! Más kódot meg nem láttunk tőled, így ezen agyaltunk egy sort....
(#) sdrlab válasza mateatek hozzászólására (») Dec 17, 2020 /
 
Felesleges leírnod még egyszer ezt, benjami már megtette, mi akart az ott lenni!
(#) mateatek válasza sdrlab hozzászólására (») Dec 17, 2020 /
 
Tehát, ez a kód, ami fagy, vagy újraindulást eredményez néha. A kód még közel sem kész, a hardver konfigurálásához használom (használnám) egyenlőre.

Szerk: ha a megszakítást nem tiltom le az LCD kezelése előtt, akkor az enkóder első kattanására befagy. A 13-as lábon lévő LED-et azért villogtatom, hogy lássa, van-e fagyás.

  1. #include <Adafruit_MCP4728.h>
  2. #include <Wire.h>
  3. #include <LiquidCrystal_I2C.h>
  4.  
  5. Adafruit_MCP4728 mcp;
  6.  
  7. LiquidCrystal_I2C lcd(0x26, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
  8.  
  9. byte A = 0;
  10. volatile unsigned int lepes = 0;
  11. unsigned int lepesv = 1;
  12. unsigned int szam = 0;
  13.  
  14.  
  15. void setup() {
  16.   analogReference(EXTERNAL);
  17.   mcp.begin();
  18.   lcd.begin(16, 2);
  19.   lcd.setCursor(4, 0);
  20.   lcd.print("F\x01mkeres\x07");
  21.   delay(1000);
  22.   lcd.clear();
  23.   DDRB |= _BV (2);
  24.   DDRB |= _BV (3);
  25.   DDRB |= _BV (4);
  26.   DDRD |= _BV (0);
  27.   DDRD |= _BV (1);
  28.   DDRB |= _BV (1);
  29.   DDRD &= ~_BV (7);
  30.   DDRD &= ~_BV (4);
  31.   PORTD |= _BV (4);
  32.   PORTD |= _BV (7);
  33.   DDRB |= _BV (5);
  34.   lcd.clear();
  35.   mcp.setChannelValue(MCP4728_CHANNEL_A, 4095, MCP4728_VREF_INTERNAL, MCP4728_GAIN_2X);
  36.   mcp.setChannelValue(MCP4728_CHANNEL_B, 4095, MCP4728_VREF_INTERNAL, MCP4728_GAIN_2X);
  37.   mcp.setChannelValue(MCP4728_CHANNEL_C, 1024, MCP4728_VREF_INTERNAL, MCP4728_GAIN_2X);
  38.   mcp.setChannelValue(MCP4728_CHANNEL_D, 3066, MCP4728_VREF_INTERNAL, MCP4728_GAIN_2X);
  39.   Wire.setClock(300000);
  40.   PCICR = 0b00000100;
  41.   PCMSK2 = 0b10010000;
  42. }
  43.  
  44. void loop() {
  45.   delay(1000);
  46.   PORTB |= _BV (5);
  47.   delay(1000);
  48.   PORTB &= ~_BV (5);
  49.   PCICR = 0;
  50.   PCIFR = 0;
  51.   lcd.setCursor(0, 0);
  52.   lcd.print(lepes);
  53.   lcd.print("  ");
  54.   lcd.print(szam);
  55.   delay(1);
  56.   PCICR = 0b00000100;
  57.   if (lepes != lepesv) {
  58.     if (lepes >= 4) {
  59.       lepes = 0;
  60.     }
  61.     if (lepes == 0) {
  62.       Timer10();
  63.     }
  64.     if (lepes == 1) {
  65.       Timer15();
  66.     }
  67.     if (lepes == 2) {
  68.       Timer20();
  69.     }
  70.     if (lepes == 3) {
  71.       Timer25();
  72.     }
  73.     lepesv = lepes;
  74.   }
  75. }
  76.  
  77. void Timer25() {
  78.   PCICR = 0;
  79.   PCIFR = 0;
  80.   lcd.setCursor(0, 1);
  81.   lcd.print("25kHz");
  82.   delay(1);
  83.   PCICR = 0b00000100;
  84.   PORTB &= ~_BV (2);
  85.   PORTB &= ~_BV (3);
  86.   PORTB &= ~_BV (4);
  87.   int setgnd = 0;
  88.   noInterrupts();
  89.   TCCR1A = 0;
  90.   TCCR1B = 0;
  91.   TCCR3A = 0;
  92.   TCCR3B = 0;
  93.   TCCR3A = 0;
  94.   TCCR3B = 0;
  95.   TCCR1A = _BV(WGM11) | _BV(COM1A1);
  96.   TCCR1B = _BV(WGM13) | _BV(CS10) | _BV(WGM12);
  97.   ICR1   = 639;
  98.   OCR1A = 319;
  99.   TCNT1 = setgnd;
  100.   TCCR3A = _BV(WGM31) | _BV(COM3A1);
  101.   TCCR3B = _BV(WGM33) | _BV(CS30) | _BV(WGM32);
  102.   ICR3   = 639;
  103.   OCR3A = 319;
  104.   TCNT3 = setgnd;
  105.   TCCR4A = _BV(WGM41) | _BV(COM4A1);
  106.   TCCR4B = _BV(WGM43) | _BV(CS40) | _BV(WGM42);
  107.   ICR4   = 639;
  108.   OCR4A = 319;
  109.   TCNT4 = setgnd;
  110.   interrupts();
  111. }
  112.  
  113.  
  114. void Timer20() {
  115.   PCICR = 0;
  116.   PCIFR = 0;
  117.   lcd.setCursor(0, 1);
  118.   lcd.print("20kHz");
  119.   delay(1);
  120.   PCICR = 0b00000100;
  121.   PORTB |= _BV (2);
  122.   PORTB &= ~_BV (3);
  123.   PORTB &= ~_BV (4);
  124.   int setgnd = 0;
  125.   noInterrupts();
  126.   TCCR1A = 0;
  127.   TCCR1B = 0;
  128.   TCCR3A = 0;
  129.   TCCR3B = 0;
  130.   TCCR3A = 0;
  131.   TCCR3B = 0;
  132.   TCCR1A = _BV(WGM11) | _BV(COM1A1);
  133.   TCCR1B = _BV(WGM13) | _BV(CS10) | _BV(WGM12);
  134.   ICR1   = 799;
  135.   OCR1A = 399;
  136.   TCNT1 = setgnd;
  137.   TCCR3A = _BV(WGM31) | _BV(COM3A1);
  138.   TCCR3B = _BV(WGM33) | _BV(CS30) | _BV(WGM32);
  139.   ICR3   = 799;
  140.   OCR3A = 399;
  141.   TCNT3 = setgnd;
  142.   TCCR4A = _BV(WGM41) | _BV(COM4A1);
  143.   TCCR4B = _BV(WGM43) | _BV(CS40) | _BV(WGM42);
  144.   ICR4   = 799;
  145.   OCR4A = 399;
  146.   TCNT4 = setgnd;
  147.   interrupts();
  148. }
  149.  
  150. void Timer15() {
  151.   PCICR = 0;
  152.   PCIFR = 0;
  153.   lcd.setCursor(0, 1);
  154.   lcd.print("15kHz");
  155.   delay(1);
  156.   PCICR = 0b00000100;
  157.   PORTB |= _BV (2);
  158.   PORTB |= _BV (3);
  159.   PORTB &= ~_BV (4);
  160.   int setgnd = 0;
  161.   noInterrupts();
  162.   TCCR1A = 0;
  163.   TCCR1B = 0;
  164.   TCCR3A = 0;
  165.   TCCR3B = 0;
  166.   TCCR3A = 0;
  167.   TCCR3B = 0;
  168.   TCCR1A = _BV(WGM11) | _BV(COM1A1);
  169.   TCCR1B = _BV(WGM13) | _BV(CS10) | _BV(WGM12);
  170.   ICR1   = 1065;
  171.   OCR1A = 532;
  172.   TCNT1 = setgnd;
  173.   TCCR3A = _BV(WGM31) | _BV(COM3A1);
  174.   TCCR3B = _BV(WGM33) | _BV(CS30) | _BV(WGM32);
  175.   ICR3   = 1065;
  176.   OCR3A = 532;
  177.   TCNT3 = setgnd;
  178.   TCCR4A = _BV(WGM41) | _BV(COM4A1);
  179.   TCCR4B = _BV(WGM43) | _BV(CS40) | _BV(WGM42);
  180.   ICR4   = 1065;
  181.   OCR4A = 532;
  182.   TCNT4 = setgnd;
  183.   interrupts();
  184. }
  185.  
  186. void Timer10() {
  187.   PCICR = 0;
  188.   PCIFR = 0;
  189.   lcd.setCursor(0, 1);
  190.   lcd.print("10kHz");
  191.   delay(1);
  192.   PCICR = 0b00000100;
  193.   PORTB |= _BV (2);
  194.   PORTB |= _BV (3);
  195.   PORTB |= _BV (4);
  196.   int setgnd = 0;
  197.   noInterrupts();
  198.   TCCR1A = 0;
  199.   TCCR1B = 0;
  200.   TCCR3A = 0;
  201.   TCCR3B = 0;
  202.   TCCR3A = 0;
  203.   TCCR3B = 0;
  204.   TCCR1A = _BV(WGM11) | _BV(COM1A1);
  205.   TCCR1B = _BV(WGM13) | _BV(CS10) | _BV(WGM12);
  206.   ICR1   = 1599;
  207.   OCR1A = 799;
  208.   TCNT1 = setgnd;
  209.   TCCR3A = _BV(WGM31) | _BV(COM3A1);
  210.   TCCR3B = _BV(WGM33) | _BV(CS30) | _BV(WGM32);
  211.   ICR3   = 1599;
  212.   OCR3A = 799;
  213.   TCNT3 = setgnd;
  214.   TCCR4A = _BV(WGM41) | _BV(COM4A1);
  215.   TCCR4B = _BV(WGM43) | _BV(CS40) | _BV(WGM42);
  216.   ICR4   = 1599;
  217.   OCR4A = 799;
  218.   TCNT4 = setgnd;
  219.   interrupts();
  220. }
  221.  
  222. ISR(PCINT2_vect) {
  223.   A = A + ((PIND & _BV (4)) == 0) << 1;
  224.   A = A + ((PIND & _BV (7)) == 0) << 1;
  225.   A = A << 2;
  226.   if (A == 136) lepes--;
  227.   if (A == 144) lepes++;
  228.   szam++;
  229. }
A hozzászólás módosítva: Dec 17, 2020
(#) Frankye válasza rettung hozzászólására (») Dec 17, 2020 /
 
Szia!
Nálam ugyan ilyen céllal NANO és UNO alaplapok vannak. Mind a kettő bőven megfelel a célnak, de a MICRO alaplap is jó. (Lényegében bármelyik Arduino alaplap megfelelő lehet.) Ami bonyolítja a dolgot, hogy ezeknek az alaplapoknak a kimenetei max. 40 mA-rel terhelhetőek, ezért valamilyen kihajtásra szükséged lesz hozzá.
A "trükk" nem a panel kiválasztása, hanem a program megírása. Nem annyira bonyolult, ha van egy kis informatikai affinitása hozzá az embernek.
(#) sdrlab válasza mateatek hozzászólására (») Dec 17, 2020 /
 
Próbáld ki ezt a kódot:
  1. A =( A << 1) + ((PIND & _BV (4)) == 0) ;
  2.   A = (A << 1) + ((PIND & _BV (7)) == 0) ;
  3.   if ((A & 3) == 1) lepes--;
  4.   if ((A & 3) == 2) lepes++;


Kicsit korrektebb így! A kódoddal az a baj, hogy függ az előző forgatás irányától is, viszont nincs lekezelve benne a 4 állapotból 2. így irányváltáskor kimaradhat az első impulzuscsomag!
(#) sdrlab válasza mateatek hozzászólására (») Dec 17, 2020 /
 
Első ránézésre passz....
Másodikra..., próbálj ki egy másik LCD kezelő könyvtárat...! Elvileg nem kéne, hogy a kettőnek köze legyen egymáshoz, de ahogy láttam, már másnak is volt hasonló baja ezzel a könyvtárral!
(#) mateatek válasza sdrlab hozzászólására (») Dec 17, 2020 /
 
Kipróbáltam, de sajnos nem működik.
(#) mateatek válasza sdrlab hozzászólására (») Dec 17, 2020 /
 
Kipróbáltam másik I2C-s LCD könyvtárral is, de azzal is ugyanez volt. Másik IDE-t is próbáltam.
Nekiállok bogarászni az LCD könyvtárait. Érdekes, hogy csak akkor fagy, ha rá van csatlakoztatva az LCD. Ha fizikailag nincsen rajta, de ugyanaz a "fagyós" program fut, akkor nem fagy.
(#) lobo67 válasza rettung hozzászólására (») Dec 17, 2020 /
 
Szia, erre a célra tényleg bármelyik arduino megfelel, akár a legkisebb atmega168-assal szerelt is. A nano azért jó, mert nem kell a programozásához más eszköz, csak egy USB kábel. Abból viszont általában miniUSB (nem ugyanaz mint a telefonoké), de egyik sem drága, a nano168 egy ezres (vagy nano328 1200) , a kábel (ha nincs a fiókban) 240. Plusz szállítás.
(#) lobo67 válasza mateatek hozzászólására (») Dec 18, 2020 /
 
Ez így elég érdekes. Biztosan jó a kijelző, jók a frekvenciák és a feszültségek? Mintha a kijelző bukdácsolna. Esetleg nem túl nagy az áramfelvétel a táp számára?
(#) sdrlab válasza mateatek hozzászólására (») Dec 18, 2020 /
 
Valószínű, hogy az i2c kommunikáció kiesik a szinkronból valami miatt, és vár egy visszaigazolást, ami sosem érkezik meg. Timeout meg nincs benne, feltehetően....

Másik arduino panellel is kipróbáltad?
(#) sdrlab válasza mateatek hozzászólására (») Dec 18, 2020 /
 
Ez érdekes. Ki nem próbáltam, de elvileg működnie kellene...
(#) mateatek válasza sdrlab hozzászólására (») Dec 18, 2020 /
 
Sajnos az I2C-hez annyit értek, mint a harangöntéshez. Hagyományos, 4-bites módban használtam már karakteres LCD-t és PCinterruptot egyszerre. Ott semmi gond nem volt. Arra tudok gondolni, hogy a hagyományos LCD kezelésnél az MCU nem vár visszaigazolást az LCD-től a művelet befejezésére. Hanem várakozik kicsit. Ezért is lassabb az I2C-nél. Szerintem az I2C-s LCD kezelése addig, amíg a művelet be nem fejeződik, addig valahogy várakoztatja az MCU-t. Talán mint az analogRead() függvény. Amíg nincsen készen a mérés, addig egy while ciklusban pihentet. Könnyen lehet, hogy míg az MCU vár az LCD felől a visszaigazolásra, akkor közbeszól a megszakítás és ha a megszakításkor jön valami az I2C-n, azt nem veszi figyelembe.
Próbáltam másik MCU-val, ellenőriztem a tápot, a szűrést, puffert, áramokat. próbáltam másik LCD-vel.
(#) lobo67 válasza mateatek hozzászólására (») Dec 18, 2020 /
 
Mellékelnéd a teljes LiquidCrystal_I2C libraryt, amit használsz?
(#) mateatek válasza lobo67 hozzászólására (») Dec 18, 2020 /
 
Következő: »»   668 / 846
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