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   799 / 851
(#) Massawa válasza sany hozzászólására (») Máj 19, 2023 / 1
 
A setup-ban csak definiálja mi a testString [i] tartalma.

Ahogy korábban irtam a

Idézet:

if (millis() > (timer + PATTERN_CHANGE_TIME)) {
sevseg.setChars(testStrings[testStringsPos]);
testStringsPos++;
if (testStringsPos >= MAX_NUMBER_STRINGS) testStringsPos = 0;
timer = millis();


A vastagon irt sorban irja ki a setupban definiált teststringek egyikét [testStringsPos]

[a zárojelben lesz a 0-11 ig]

Neked is erre lesz szükséged, csak egy kicsit egyszerüsiteni kell az egészet. Neked csak
A digitPins [] csak 3 jegyü lesz, minden más maradhat.

Neked majd a vastagon kiirt sorba kell majd bevinned véletleneket az A,B és C -t és a hozzájuk tartozo digit poziciot (1-3).
A hozzászólás módosítva: Máj 19, 2023
(#) sany válasza Massawa hozzászólására (») Máj 19, 2023 /
 
Ó, tényleg megzavart az a sok string.
(#) robis01 válasza sany hozzászólására (») Máj 20, 2023 / 1
 
Nem egészen úgy van ahogy te szeretnéd.

Idézet:
„Setting a character string

  1. sevseg.setChars("abcd");


Character arrays can be displayed - as accurately as possible on a seven segment display. See SevSeg.cpp digitCodeMap[] to notes on each character. Only alphanumeric characters, plus ' ', '-', '_', and '.' are supported. The character array should be NULL terminated.”


Oka pedig a karaktertáblázat. Minden karakter (szám, betű, szimbólum) egy bájtban van tárolva. A bájtban lévő bitek sorozata leírható decimálisan, hexadecimálisan, binárisan, és még sokféle más számrendszer szerint is.
Amire hivatkozol (valamilyen számrendszerben leírt számmal) az nem más mint maga a karakter.

Amire neked szükséged lenne:
Idézet:
„Custom display setting

// Set the segments for every digit on the display
  1. uint8_t segs[4] = {0, 0x5B, 0x6D, 0x63};
  2. sevseg.setSegments(segs);


// Set the segments for a single digit. Set digit 3 to 0x63.
  1. sevseg.setSegmentsDigit(3, 0x63);


You can manipulate individual segments if needed. Each byte represents the display of a single digit, with each bit representing a single segment. The bits represent segments in the order .GFEDCBA. See SevSeg.cpp for more examples of these 'digitCodes'.”


Vannak behuzalozott futtatható mintaprogramok
Idézet:
„Sample simulations

The Wokwi team has created sample simulations of the examples in this library: Wokwi SevSeg_Counter Example
Wokwi stringWithPeriod Example.
Wokwi testWholeDisplay Example.”


Egy kicsit átírtam az eredetit, szépen lefut a szimulátorban:

  1. /* SevSeg Counter Example
  2.  
  3.  Copyright 2017 Dean Reading
  4.  
  5.  Licensed under the Apache License, Version 2.0 (the "License");
  6.  you may not use this file except in compliance with the License.
  7.  You may obtain a copy of the License at
  8.  http://www.apache.org/licenses/LICENSE-2.0
  9.  
  10.  Unless required by applicable law or agreed to in writing, software
  11.  distributed under the License is distributed on an "AS IS" BASIS,
  12.  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13.  See the License for the specific language governing permissions and
  14.  limitations under the License.
  15.  
  16.  
  17.  This example demonstrates a very simple use of the SevSeg library with a 4
  18.  digit display. It displays a counter that counts up, showing deci-seconds.
  19.  */
  20.  
  21. #include "SevSeg.h"
  22. SevSeg sevseg; //Instantiate a seven segment controller object
  23.     byte veletlenszam;
  24.     byte A = 0;
  25.     byte B = 0;
  26.     byte C = 0;
  27.   // byte dobporges =0; // ez lett a deciSeconds
  28.  
  29. void setup() {
  30.   byte numDigits = 4;
  31.   byte digitPins[] = {2, 3, 4, 5};
  32.   byte segmentPins[] = {6, 7, 8, 9, 10, 11, 12, 13};
  33.   bool resistorsOnSegments = false; // 'false' means resistors are on digit pins
  34.   byte hardwareConfig = COMMON_ANODE; // See README.md for options
  35.   bool updateWithDelays = false; // Default 'false' is Recommended
  36.   bool leadingZeros = false; // Use 'true' if you'd like to keep the leading zeros
  37.   bool disableDecPoint = false; // Use 'true' if your decimal point doesn't exist or isn't connected
  38.  
  39.   sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments,
  40.   updateWithDelays, leadingZeros, disableDecPoint);
  41.   sevseg.setBrightness(90);
  42.  
  43.   Serial.begin(9600);
  44. }
  45.  
  46. void loop() {
  47.   static unsigned long timer = millis();
  48.   static int deciSeconds = 0;
  49.  
  50.  veletlenszam = random(0,255);
  51.      A= veletlenszam;
  52.  veletlenszam = random(0,255);
  53.      B= veletlenszam;
  54.  veletlenszam = random(0,255);
  55.      C= veletlenszam;
  56.  
  57. uint8_t segs[4] = { 0, A, B, C};
  58. sevseg.setSegments(segs);
  59.  
  60.     Serial.print("deciSeconds:");
  61.     Serial.print(deciSeconds);
  62.     Serial.print("  A:");
  63.     Serial.print(A , BIN);
  64.     Serial.print("  B:");
  65.     Serial.print(B , BIN);
  66.     Serial.print("  C:");
  67.     Serial.println(C , BIN);
  68.  
  69.  if (millis() - timer >= 100) {
  70.     timer += 100;
  71.     deciSeconds++; // 100 milliSeconds is equal to 1 deciSecond
  72.  
  73.     if (deciSeconds == 31) { // Reset to 0 after counting for 30 seconds.
  74.       deciSeconds=0;
  75.        if (A == B && A==C){
  76.         Serial.println("NYERT");
  77.       }
  78.       else{
  79.         Serial.println("NEM NYERT");
  80.       }
  81.       int x = 0;
  82.       do {
  83.         //Programfutás vége
  84.       } while (x < 100);
  85.    }
  86.  
  87.  }
  88.   sevseg.refreshDisplay(); // Must run repeatedly
  89. }
  90.  
  91. /// END ///


És még egy figyelembe veendő felhívás:

Idézet:
„Warning: Any calls to delay() will interfere with the display. Any delays introduced by other functions will produce undesirable effects on the display.”
(#) sany válasza robis01 hozzászólására (») Máj 20, 2023 /
 
Idézet:
„Nem egészen úgy van ahogy te szeretnéd.”

Ez egy kompromisszum, de el kell fogadni.
(#) SzilCsong válasza robis01 hozzászólására (») Máj 20, 2023 /
 
meghosszabítottam az egyik modul vezetékeit, most olyat csinál, hogy az egyik modul működik csak, ha megcserélem akkor is csak az működik, ha működés közbe kiveszem a jót, akkor amelyik eddig működött, az hirtelen működni kezd.
Most egyáltalán nem produkálja azt ameit valamelyik nap, hogy jó volt mindkettő egyszerre.
(#) robis01 válasza SzilCsong hozzászólására (») Máj 20, 2023 /
 
Csak egy elmélet. Mondjuk küld és fogad az MCU 48 bit-et, és generálja az órjalelet. Ha egy zavaró jel átír 1-2 bitet a 48-ból már kavarodás lesz a vége. Ha meg az órajelből olt ki néhányat és ezért nem érkezik meg a 48 bit akkor még vár, és nem viszi le az SS vonalat. Megpróbálhatsz 10-100nF tenni panelok tápfesz bemenetére.
Esetleg ha van oszcilloszkóp érdemes rámérni a vezetékekre.

Viszont ha megjavul a leválasztástól akkor érdemes szoftveresen, vagy hardveresen lekapcsolni. Ki kell keresni az adatlapból, vagy ki kell kísérletezni, hogy mennyi azaz idő amíg feláll az RFID panel. Ez szerintem nem lesz több 100-200 ms-nél, ezért ha pl. 500ms időnként az egyik majd a másik működik az nem lesz gond. Senkinek nem fog feltűnni hogy 1-1,5 sec idővel több ideig tartja ott a kulcsot az olvasón.
A hozzászólás módosítva: Máj 20, 2023
(#) SzilCsong válasza robis01 hozzászólására (») Máj 21, 2023 /
 
Sima elkokat 40-100µF raktam rá próbaképpen, 100nF kondit még nem próbáltam.
Az 500msec ki-bekapcsolást kipróbáltam, nem lett jó
(#) SzilCsong válasza SzilCsong hozzászólására (») Máj 21, 2023 /
 
Nem tudom, miért van az, néha ha módosítani akarok egy hozzászólásomat, akkor nem teljesül, most ismét megpróbálom leírni

Kipróbáltam 100nF kondival, de nem lett jobb.
Most már tényleg marad az amit már az elején is javasoltak, hogy kell közéjük egy jel illesztő.
Kerestem alin a "arduino SPI isolator/separator" kulcsszóra, hátha létezik erre Hw, de nem dobott értékelhető találatot, úgy tűnik, csak én szívok ezzel.
Valami optokapus leválasztóra gondoltam, de ide nem lesz jó a sima 4ch optokapu, mivel nem egy irányba mennek az adatok.
Miso<-
Mosi->
SS->
reset->
Ha jól gondolom.
(#) robis01 válasza SzilCsong hozzászólására (») Máj 21, 2023 /
 
Nagyfrekvenciás szűrésre a µF tartomány hatástalan, nF, pF kell.

Az irányok jók az MCU felöl nézve. A 4 csatornás opto csatoló jó oda, ha tudja azt a frekvenciát amivel folyik a kommunikáció. Viszont azt nem értem, szerinted miért nem jó a "sima 4ch optokapu"?
A hozzászólás módosítva: Máj 21, 2023
(#) KoblogPerGyok válasza SzilCsong hozzászólására (») Máj 21, 2023 /
 
Ilyen nem jó?

Bővebben: Link

Épp ezért léteznek ilyenek. A szűréssel mi volt a gond? Másképpen oldom meg a problémámat, de nekem a 8MHz SPI nem jött össze eddig.
Ha van tapasztalatod szívesen elolvasom, ha eddig még nem írtad volna le. Sokat melózok, épp hogy ide tévedtem, ha már leírtad, akkor bocs.

Kulcsszó: Bidirectional Level Shifter.
A hozzászólás módosítva: Máj 21, 2023
(#) KoblogPerGyok válasza SzilCsong hozzászólására (») Máj 21, 2023 /
 
A tempóról nem ír semmit az adatlap, azonban leírja, hogy pontosan milyen FET-el megy.
Ilyennel,ha jól látom:

https://www.onsemi.com/pdf/datasheet/bss138-d.pdf

Ebből lehet következtetni a sebességre esetleg.
(#) robis01 válasza KoblogPerGyok hozzászólására (») Máj 21, 2023 /
 
Szerintem ez nem galvanikus leválasztás. Lehet hogy az opto sem elég, mert ha a zavart a hamis ic produkálja akkor nehéz kiszűrni a hibát.

Esetleg meg lehet próbálni az Spi.SetclockDivider alacsonyabb frekvenciára állításával.

Gondolkodtam az optokapu adatirányokra vonatkozó kérdéseden is. Arra gondoltál hogy az opto ic egyik oldala a bemenet a másik meg a kimenet? Ha igen akkor a MISO-t fordítva kell rákötni a működéshez.
(#) KoblogPerGyok válasza robis01 hozzászólására (») Máj 22, 2023 /
 
Azt hittem a jelszintek eltérőek, és a lgikai 1 elveszik valahol. Optokapu is simán jó, pont ahogy írtad. Azt már nem akartam odaírni, htha megoldja azt a kérdező.

Az optocsatoló sebességére is rá kell nézni, de elvileg az is gyors, illetve a 3.3V nem mindegyiknek elég, már ha modlban veszi. Erre figyelni kell.
Amit itt talltam 4 csatornásat, annak az adatlapja mintha csak az IC-re vonatkozna, nem a modulra, de ilyesmit olvastam:
Response time: 4us. Vce=2V, Ic=2mA, Rl=100Ohm esetén. A panelen nem tudom mekkora értékekkel szerepelnek ezek az értékek, de ha jól gondolom, ekkor 250KHz lehet az átvitel? SPI-nek kevés lesz szerintem. 12. oldalon jobb leírása van, nem pont az amire gndoltam, de itt hagyom a válaszom, mert ennek is utána kell nézni.

De simán tévedhetek is, nem néztem ennyire utána.
(#) SzilCsong válasza robis01 hozzászólására (») Máj 22, 2023 /
 
Az Uno felé 5V-os kommunikáció volna a logikus, ezen a 4ch optokapun közösítve vannak a bemenetek, és a kimenetek, és itt jön a probléma, mert az MiSo ugye a Uno fele dolgozik, szóval oda 5v os jelszintet vár, de ha az optukapu kinetére 3,3V-ot teszek Vcc-be, amit a MFRC dolgozik, akkor az uno fele lesz kevés.
(#) SzilCsong válasza KoblogPerGyok hozzászólására (») Máj 22, 2023 /
 
Mindennel próbálkoztam már, az egyik MFRC sose dolgozik rendesen (a cél nem 2db mfrc, hanem csak egy + SD kártya, de így egyszerűbb a hibakeresés)
Most azt vettem észre, rajta felejtettem a kártyát a nem-működő mfrc-n, hogy időnként veszi a jelet.
Próbáltam az imént javasolt frekvencia felezés/negyedelés, nem jött be.
most úgy van, hogy fél másodpercenként hol az egyik, hol a másik kapcsol, de így is atom bizonytalan, de fura, hogy csak az egyik.
Az általad javasolt illesztő jó ötlet, most akarok úgyis rendelni anyagot.
köszi.
(#) SzilCsong válasza robis01 hozzászólására (») Máj 22, 2023 /
 
Idézet:
„mert ha a zavart a hamis ic produkálja akkor nehéz kiszűrni a hibát.”

Most összesen 4db mfrc-m van, az egyiket beáldoztam I2C kísérletnek.
Ami most a legstabilabb, az se működött az SD kártyával, ahogy kellett volna, úgyhogy szerintem itt nem a hamisságon lesz a hangsúly.
(#) KoblogPerGyok válasza SzilCsong hozzászólására (») Máj 22, 2023 /
 
A szintillesztőben található FET- felépítésével készítettem egy kis szimulációt. A teszt akkor sikeres, ha a bemenő jel felfutási és lefutási ideje 1ns alatt van. Akkor az 1-4 MHz-et simán viszi. A 8 MHz-et már nem tudtam kipróbálni, bár jellegre jónak tűnik.
Szóval ha az Arduino digitális pin-jének a fel/lefutási ideje 1ns, vagy még kissebb, akkor jó lehet. Gondoltam kipróbálom a kapcsolást, mert a FET G-S kapacitása befojásolja az átvivendő frekit, kíváncsi voltam.
A hozzászólás módosítva: Máj 22, 2023
(#) robis01 válasza SzilCsong hozzászólására (») Máj 22, 2023 /
 
Azt hiszem megvan a probléma gyökere. Bár írnak a hibás chipekről, kondenzátorokról de a lényeg hogy
Idézet:
„2-nél több modulhoz egy multiplexer szükséges #191 .”

mfrc522.h
(#) SzilCsong válasza robis01 hozzászólására (») Máj 22, 2023 /
 
Nem tudom, mi az a multiplexer, ez esetbe
(#) vargham válasza robis01 hozzászólására (») Máj 23, 2023 /
 
Máskor ne a Google fordítós verziót linkeld be. Kösz.
(#) robis01 válasza SzilCsong hozzászólására (») Máj 23, 2023 /
 
Multiplexert úgy képzeld el mint egy billenőkaros váltókapcsolót. Ha balra áll akkor a bal oldali, ha meg jobbra akkor a jobb oldali ágat köti össze a középen lévővel. Ha jól értem azért van szükség erre, mert a gagyi másolat az MFRC522 ic-ből nem engedi el a lábakat, nem megy át magas impedanciába. Meg lehet próbálni az MFRC522 ic NRSTPD engedélyező lábát használni, de gondolom ezt már mások is megtették, és nem vezetett eredményre.

Multiplexer felépíthető logikai kapukból (mazochistáknak tranzisztorból,diódából), de egyszerűbb készen venni:

Használhatsz engedélyezhető tristate optocouplert, ilyenre még nem volt szükségem, nem tudom milyen néven gyárthatják.

Használhatsz tristate buffer ic-t pl. 74125.
Ide tartoznak az engedélyezhető szintillesztő ic-k is. pl:TSX0108 szintillesztők

Multiplexer ic pl. 74157

Az ajánlott ic-k átviteli frekvenciáit , 3,3V-os működési feszültséget, nagy impedanciás állapotát érdemes megnézni adatlapokról. Idő hiányban erre most nem volt lehetőségem.
(#) robis01 válasza vargham hozzászólására (») Máj 23, 2023 /
 
Igyekezni fogok az eredeti forrásra hivatkozni
(#) mechanika hozzászólása Máj 24, 2023 /
 
Sziasztok!

Adott egy atmega328p, amely mély alvásban van, két feladata lenne:

1. figyeli az egyik bemenetet, ha magas szintet érzékel akkor megszakítás történik és egy feten keresztül felébreszti az áramkör kapcsolódó részét miközben az egyik kimenetet alacsonyan tartja,

2. ha idő közben nem érkezik megszakítás akkor kb fél óránként felébreszti az áramkör kapcsolódó részét és a kimenetet magas szintre állítja.

Régóta jól működik több ilyen áramkör, de az utóbbi időben azt tapasztaltam, hogy az atmega időnként magasan tartja a fet-et így hamar lemerülnek az elemek.
(külső tápot nem tudok alkalmazni, ezért marad az energia takarékos altatás)

Az alábbi kódot alkalmazom:

  1. #include "LowPower.h"
  2. int fet = 9;
  3.  
  4. volatile int cc = 0;
  5. int c =0;
  6.  
  7. void setup()
  8. {
  9.  pinMode(A4, OUTPUT);
  10.  digitalWrite(A4, HIGH);
  11.  pinMode (fet, OUTPUT);
  12.  digitalWrite(fet, HIGH);
  13.  delay(2000);  
  14.  attachInterrupt(0, blink, RISING);
  15.  digitalWrite(fet, LOW);
  16.  digitalWrite(A4, LOW);
  17. }
  18. void loop()
  19. {
  20.   if (cc == 1){
  21.       digitalWrite(A4, LOW);
  22.       digitalWrite(fet, HIGH);
  23.       delay (3200);
  24.       digitalWrite(fet, LOW);
  25.       digitalWrite(A4, LOW);
  26.       delay (100);
  27.       cc = 0;
  28.       c = 0;
  29.  }
  30.   else{
  31.      LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
  32.      if (c > 225 && cc == 0){
  33.         digitalWrite(fet, HIGH);
  34.         digitalWrite(A4, HIGH);
  35.         delay(2400);
  36.         digitalWrite(fet, LOW);
  37.         digitalWrite(A4, LOW);
  38.         c = 0;
  39.         }
  40.     c++;
  41.   }}
  42. void blink()
  43. {
  44. cc = 1;
  45. }


Valakinek esetleg van tippje hol lehet a hiba?
Esetleg tapasztalata valakinek a LOW POWER funkció esetleges hibáival kapcsolatosan.

A segítséget előre is köszönöm!
A hozzászólás módosítva: Máj 24, 2023
(#) kapu48 válasza mechanika hozzászólására (») Máj 25, 2023 / 1
 
A megszakítás rutint a setup elött kellene létrehozni.

És az interuptot a loop-ban kezelném, a példa szerint:
powerDownWakeExternalInterrupt.ino
  1. // Allow wake up pin to trigger interrupt on low.
  2.     attachInterrupt(0, wakeUp, LOW);
  3.    
  4.     // Enter power down state with ADC and BOD module disabled.
  5.     // Wake up when wake up pin is low.
  6.     LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);
  7.    
  8.     // Disable external pin interrupt on wake up pin.
  9.     detachInterrupt(0);
  10.    
  11.     // Do something here
  12.     // Example: Read sensor, data logging, data transmission.
A hozzászólás módosítva: Máj 25, 2023
(#) vill hozzászólása Máj 27, 2023 /
 
Sziasztok,
A segítségeteket szeretném kérni időmérő megvalósításához, amit egy 7"-os érintős kijelzőn jelenítenék meg. (ezeket a könyvtárakat használom:<UTFT.h><UTouch.h>).
Röviden a történet:
- A kijelzőn van egy Start (gomb), amit ha megérint az ember akkor elindul egy timer 0:00:00-ról és másodpercenként számol (mint egy stopperóra).
Ennyi az egész. Sima 4,5"-os TFT kijelzőre már sikerült megcsinálni, de a 7"-os kijelzőnek teljesen más utasításkészlete van és sehogy sem tudom megoldani. (még most tanulom a C++-t).
Amiket találtam a neten, az mind vagy 2-3 soros kijelzőkre vagy 3-4,5" kijelzőkre van írva.
Ha valaki esetleg tudna segíteni, annak nagyon hálás lennék.
Előre is köszönöm és szép délutánt nektek.
(#) pipi válasza vill hozzászólására (») Máj 27, 2023 /
 
"Egy" 7"-os kijelzőhöz mit vársz...
(#) sargarigo válasza vill hozzászólására (») Máj 27, 2023 /
 
Szép, szép, de igazából nem írtál semmit! Sem a kijelző típusát, sem azt hogy mit csináltál meg eddig, sem az hogy hol akadtál el, és főleg hogy miben kellene a segítség.
(#) Jonni válasza vill hozzászólására (») Máj 28, 2023 /
 
A kijelzők tipusára szükség lenne , ahogy sargarigo is irta (ez egy alapfeltétel hogy segiteni tudjunk).
Ha arduino IDE-vel töltöd fel, akkor a hibaüzenet is kéne.
(#) vill hozzászólása Máj 28, 2023 /
 
Elnézést a pontatlanságért
Ez a kijelző:
VIFERR Anzeigemodul 7 Zoll TFT LCD 800x480 Touchscreen AVR STM32 ARM SSD1963
Az adapter:
Akozon LCD Schild 3,2 "TFT LCD Mega Schild V2.2 Erweiterungskarte für Touch Screen Display für Arduino Mega 2560

A programot azért nem írtam ide le, mert az időmérő szempontjából irreleváns és kb. 500 sorból áll.
Két Arduino Mega Board komunikál egymással soros porton. Az egyik a kijelzőhöz van egy adapterrel csatlakoztatva, a másik pedig a szenzorok és a relék kezeléséért felel. Sima soros porton kommunikálnak.

Több megoldást láttam a neten stopperórára. Van aki nagyon bonyolult kódot írt, van aki pár sorral megoldotta, de, ahogyan írtam, ezek teljesen más utasítások, mint ami ehhez a kijelzőhöz kell.
PL. itt egy kódrészlet egy gombhoz és egy benne lévő felirattal:

myGLCD.setColor(VGA_BLACK);
myGLCD.drawRect(375,230,475,281);
myGLCD.setBackColor(VGA_WHITE);
myGLCD.print("Nyitás",385,231);
(#) pipi válasza vill hozzászólására (») Máj 28, 2023 /
 
A 7-es kijelzőt mivel csatlakoztatod a megához? Ez egy LVDS interfészes cucc én úgy látom...
Következő: »»   799 / 851
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