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   682 / 839
(#) mateatek válasza matyas98 hozzászólására (») Márc 8, 2021 / 1
 
  1. pinMode (9, OUTPUT);
  2. pinMode (10, OUTPUT);
  3. TCCR1A = 0;
  4. TCCR1B = 0;
  5. TCCR1A = _BV(WGM11) | _BV(COM1A1) | _BV(COM1B1);
  6. TCCR1B = _BV(WGM13) | _BV(CS10) | _BV(CS12) | _BV(WGM12);
  7. ICR1   = 31249; //periódus idő, 2 másodperc
  8. OCR1A = 15000; //D9 kitöltés
  9. OCR1B = 15000; //D10 kitöltés


Az ICR1 regiszter a periódus időt határozza meg. 65535-nél nagyobb nem lehet. Az kicsit több, mint 4 másodperces periódus időt tesz ki. Most 2 másodpercre van állítva. Az OCR1x regiszter a két kimenet PWM értékét tartalmazza. Maximum értéke az ICR1 lehet.
Max 4,19 másodperces periódus idő a maximum, amit tud a timer1 16 MHz-es órajel mellett fast PWM-ben, 1024-es előosztó mellett. Fázis korrekt PWM-ben a dupláját. Ha ennél is hosszabb periódus idő kell, akkor már az MCU órajel előosztóját is osztásra kell állítani, ami lassítja a műveletek elvégzését. De azzal cirka 2145 másodperces periódus időt lehet elérni. Ha ennél is nagyobb periódus idő kell, akkor már le kell cserélni lassabbra a kvarcot.
(#) GPeti1977 válasza vargham hozzászólására (») Márc 8, 2021 /
 
Igen olvastam most már. Azért forgott a motor elsőnek mert az agyonstruktúrált, objektumorientáltan programozni tudó nagy tudású valaki az SS pin-t elfelejtette outputra állítani, így semmi adatot nem fogadott el az IC, a bekapcsolás után a RUN engedélyezve van, így elég csak pwm jelet adni a motor forog. Van egy szép nem működő program hozzá a referencia:
Bővebben: Link
(#) Skori hozzászólása Márc 12, 2021 /
 
Az arduino fejlesztőkörnyezetet át lehet állítani valahogyan, hogy ne utf8-ban tárolja az ékezetes karaktereket, hanem mondjuk használjon iso8859-et vagy bármi olyat ahol nem foglalnak két bájtot
az ékezetes betűk?
(#) Josi777 válasza Skori hozzászólására (») Márc 12, 2021 /
 
Nem tudok róla, hogy lenne és valószínűleg nem is lesz, mert a fordító a kódban eleve utf-8-as kódolást használ és ennek a megváltoztatása kompatibilitási problémát okozhat (a wide karakterek példáján okulva, amit benne hagytak a fordítóban az utf-8 megjelenése után).
De létezik konverter hozzá, arra az esetre, ha a soros monitor nem támogatja az utf-8-at.
De miért van rá szükséged, hogy 1 byte-os legyen? Hátha van rá más megoldás.
(#) atiotezer hozzászólása Márc 15, 2021 /
 
Sziasztok.

Arduino nano (atmega328) tudom használni egyszerre a soros portot és az I2C port-ot egyszerre?
Soros port-ra egy Nextion kijelző menne, i2C- pedig egy mcp23017-es i/o port-bővítő.

Köszönöm.
(#) Medve válasza atiotezer hozzászólására (») Márc 15, 2021 /
 
Szia, szerintem nincs akadálya. (használtam már "egyszerre")
A hozzászólás módosítva: Márc 15, 2021
(#) Pethical válasza atiotezer hozzászólására (») Márc 15, 2021 /
 
Tudod. Miért nem próbáltad ki?
(#) atiotezer válasza Pethical hozzászólására (») Márc 15, 2021 /
 
Mivel jelenleg nincs itthon sem port bővítő sem Nextion kijelző.
(Mert, ha nem lehet, akkor felesleges lenne rendelnem)
Köszönöm.
(#) atiotezer válasza Medve hozzászólására (») Márc 15, 2021 /
 
Köszönöm.
(#) matyas98 hozzászólása Márc 15, 2021 /
 
Sziasztok!

Először szeretném megköszönni a sok segítséget a PWM jellel kapcsolatban!

Másodszor szeretnék ismét segítséget kérni. Javasolták a fórumon, hogy szerezzek be MAX31855 k típusú hőszenzor erősítőt mert ez tágabb tartományban tudja értelmezni a hőmérsékleteket. Azonban kipróbáltam az arduinoval példakódot használva a könyvtárból (Adafruit MAX31855) de teljesen értelmezhetetlen értékeket kaptam. Máshol olvastam, hogy zajszűrés céljából erősen javallott egy 10nF-os kerámia kondenzátor bekötése a bemenetre. Ugyan 10nF-os kondim nem volt, de bekötöttem egy 45nF körülit de semmi nem változott. Valaki találkozott már ilyen problémával, több külföldi fórumon utánanéztem de nem találtam semmi megoldást. A termoelemeket kipróbáltam MAX6675-el és úgy működtek.

A kód az alábbi:
  1. #include <SPI.h>
  2. #include "Adafruit_MAX31855.h"
  3.  
  4. // Default connection is using software SPI, but comment and uncomment one of
  5. // the two examples below to switch between software SPI and hardware SPI:
  6.  
  7. // Example creating a thermocouple instance with software SPI on any three
  8. // digital IO pins.
  9. #define MAXDO   3
  10. #define MAXCS   4
  11. #define MAXCLK  5
  12.  
  13. // initialize the Thermocouple
  14. Adafruit_MAX31855 thermocouple(MAXCLK, MAXCS, MAXDO);
  15.  
  16. // Example creating a thermocouple instance with hardware SPI
  17. // on a given CS pin.
  18. //#define MAXCS   10
  19. //Adafruit_MAX31855 thermocouple(MAXCS);
  20.  
  21. void setup() {
  22.   Serial.begin(9600);
  23.  
  24.   while (!Serial) delay(1); // wait for Serial on Leonardo/Zero, etc
  25.  
  26.   Serial.println("MAX31855 test");
  27.   // wait for MAX chip to stabilize
  28.   delay(500);
  29.   Serial.print("Initializing sensor...");
  30.   if (!thermocouple.begin()) {
  31.     Serial.println("ERROR.");
  32.     while (1) delay(10);
  33.   }
  34.   Serial.println("DONE.");
  35. }
  36.  
  37. void loop() {
  38.   // basic readout test, just print the current temp
  39.    Serial.print("Internal Temp = ");
  40.    Serial.println(thermocouple.readInternal());
  41.  
  42.    double c = thermocouple.readCelsius();
  43.    if (isnan(c)) {
  44.      Serial.println("Something wrong with thermocouple!");
  45.    } else {
  46.      Serial.print("C = ");
  47.      Serial.println(c);
  48.    }
  49.    //Serial.print("F = ");
  50.    //Serial.println(thermocouple.readFahrenheit());
  51.  
  52.    delay(1000);
  53. }


És az alábbi értékeket kapom a soros porton:

  1. C = -1481.00
  2. Internal Temp = -124.12
  3. C = -1392.25
  4. Internal Temp = -123.56
  5. C = -1303.75
  6. Internal Temp = -59.19
  7. C = -1152.25
  8. Internal Temp = -75.19
  9. C = -1084.00
  10. Internal Temp = -74.81
  11. C = -931.25
  12. Internal Temp = -58.69
  13. C = -844.25


Előre is köszönöm a segítséget!
A hozzászólás módosítva: Márc 15, 2021
(#) majkimester válasza Skori hozzászólására (») Márc 16, 2021 /
 
Skori, amiatt kérdezed amit ITT írtam?

Én ASCII forrással dolgoztam, nem Arduino alatt, ha a forrás file csak UTF-8 lehet, akkor is meg lehet szerintem csinálni, csak akkor a mappelő függvényben ha 0xC2 vagy nagyobb byte jön, akkor azt csak eltárolni kell mint utf8 első byte, és a következő byte kiírásánál megcsinálni a mappelést.

Így a forrásban UTF-8 lesz, de az LCD-re kiküldve ASCII.
(#) Skori válasza majkimester hozzászólására (») Márc 16, 2021 /
 
Igen amiatt is. Tudom is kezelni a problémát, de sok dolgot egyszerűsített volna.
A probléma összetettebb annál amint amit írsz, ugyanis az a megoldás, hogy a 0xc2 vagy nagyobb byte esetén tudom, hogy UTF8 karakterként kell feldolgozni, az bájt sorrend függő.
És már belefutottam olyanba, hogy amiatt kellett átírnom, mert az a processzor amire át akartam vinni a kódot, fordított bájt sorrenddel tárolta az adatokat (típust ne kérdezz, sok éve volt már).
Ha nem kellene az UTF8-at használni, akkor lehetne processzorfüggetlen kódot írni.

A jelenlegi megoldásom egyébként ilyesmi:
  1. void lcdsh_str2(char *s, byte len){//ékezetet is tartalmazó szöveg kiírása, len karakteren
  2.   byte c,d;
  3.   for (c=0 ; *s && (c<len); s++,c++) {
  4.     if ((*s<126) && (*s>31)){
  5.       lcdsh_wrbyte(*s);
  6.     }else{
  7.       const char ekezetes[]="áíűőüöúóéÁÍŰŐÜÖÚÓÉ\0";  
  8.       for (d=0; ekezetes[d]; d+=2)
  9.          if ((*s == ekezetes[d]) && (*(s+1) == ekezetes[d+1])){          
  10.            lcdsh_wrbyte("\0i\6\4\5\3\7\2\1\0I\6\4\5\3\7\2\1"[d/2]); //ha egyezést talál, erre cseréli
  11.            s++;
  12.            break;
  13.          };//end if
  14.     }    
  15.   }
  16.   for ( ;c<len; c++) lcdsh_wrbyte(32);
  17. }//end fv

Itt a konverziós táblázat és a sok switch-case helyett két string konstanst, és ciklust használok a konverzióhoz (jól működik). Többféle karaktertábla esetén csak ezeket a string konstansokat kellene #define-ba kiraknom.
(#) majkimester válasza Skori hozzászólására (») Márc 16, 2021 /
 
Értem. A táblázatos megoldásod jó, sokkal tömörebb.
Utf-re a switch-case elég terjengős lenne, de ASCII-ban megfelelt.
(#) Skori válasza majkimester hozzászólására (») Márc 16, 2021 /
 
A switch-case megoldásodban az tetszett meg, hogy könnyen áttekinthető. De ahogyan írod is, utf8-al kompatibilissé kellene tenni, ha arduinoval is használni akarnám. Ma már talán ügyesebben, ill. áttekinthetőbbre meg tudnám írni a táblázatos megoldást is, de jó lett volna az utf8-tól megszabadulni. A forrasztóállomásom programjában is használom ezt a függvényt, de néha elgondolkozom rajta, hogy valamilyen ügyesebb megoldást kellene csinálni.
A hozzászólás módosítva: Márc 16, 2021
(#) TavIR-AVR válasza Skori hozzászólására (») Márc 17, 2021 /
 
Nem. Illetve a régi 1.0.x illetve -0023ig bezárólag tárolta nem UTF-8ban.
A spec beállítások a preferences.txt-ben vannak - de abban nincs ilyen lehetőség.
(#) Skori válasza TavIR-AVR hozzászólására (») Márc 18, 2021 /
 
Akkor marad a jelenlegi megoldás. Azért köszönöm mindenkinek aki utánanézett vagy próbált segíteni.
(#) Rober_4 hozzászólása Márc 20, 2021 /
 
Egy gyakorlati kérdésem lenne:
Milyen módszerrel, logikával alakítjátok át a bool logikai típusokat a praktikusabb tárolás céljából bájt-á?
(Tehát ha van 8 független bool változód, és nem szeretél 8 bájtot kidobni rájuk, akkor milyen praktikához folyamodtok, hogy bájt-á alakítsátok őket át?)
A hozzászólás módosítva: Márc 20, 2021
(#) tbarath válasza Rober_4 hozzászólására (») Márc 20, 2021 / 1
 
Össze tudod bindzsizni bitműveletekkel (Bővebben: Link), de lehet, hogy több memóriát buksz el a műveletekkel, mint amit megnyersz az adaton.
(#) superuser válasza Rober_4 hozzászólására (») Márc 20, 2021 / 2
 
Nem biztos, hogy jól értem a kérdésedet, de a klasszikus mikrokontrolleres megoldás a flagek használata bit művelettel. kb. így:
Hogy programozástechnikailag ez manapság mennyire indokolt, az megint más kérdés.
Én szeretem ezt a megoldást, jól olvasható kódot ad.

  1. #define INPUT1_ACTIVE 0x01
  2. #define INPUT2_ACTIVE 0x02
  3. #define INPUT3_ACTIVE 0x04
  4. #define INPUT4_ACTIVE 0x08
  5. #define INPUT5_ACTIVE 0x10
  6.  
  7. //8 bemenet állapotának tárolása egy bájton
  8. BYTE bInputState;
  9. if (input1 == 1) bInputState |= INPUT1_ACTIVE;
  10. if (input2 == 1) bInputState |= INPUT2_ACTIVE;
  11. if (input3 == 1) bInputState |= INPUT3_ACTIVE;
  12.  
  13. flag bit törlése:
  14. bInputState &= ~INPUT3_ACTIVE;
  15.  
  16. flag bit vizsgálata:
  17. if (bInputState & INPUT3_ACTIVE)
  18.   ;
(#) Pethical válasza Rober_4 hozzászólására (») Márc 20, 2021 / 1
 
Pl. Bit Field használatával is megoldható.
(#) Rober_4 válasza Rober_4 hozzászólására (») Márc 20, 2021 /
 
Köszönöm a segítséget. Konkrét leszek: van egy 32*8-as boolean tömböm, ami a Nano program memóriájának kb 10%-át megeszi. Gyanús lett, hogy ez túl sok. (Ezek egy szekvenszer dobhangjait tárolják) Átalakítottam byte-os tárolásra, és 77%-ról sikerült 68%-ra lemennem. (aminek örülök egyébként) Viszont ilyen bitReader-es megoldást kellett alkalmaznom a tömb címzéshez, valahogy így:
  1. byte split=framearpeggio%8;
  2.  if (bitRead(drumtomb[labnumber][elozodobindex],split)) {
  3.     noteOnMIDI(0x80 | drumchan,  lab,  drumdinamika);
  4.   }

Tehát kénytelen voltam a 8-as maradékok alapján címezgetni a tömböt, ami egyébként úgy néz ki működik, csak nem vagyok biztos benne, hogy ez a legkézenfekvőbb, és leggyorsabb megoldás...
Mindenesetre most átrágom a programot, és minden logikai változót átszervezek byte-ba. Csak megfordult a fejemben, hogy ezért felesleges volt létrehozniuk ezt a típust, mert így kb többet árt, mintha eredetileg is byte-os szemlélettel építeném fel a programot... Tehát mondjuk, ha lenne erre egy fordító opció, az megmagyarázná a dolgot...
A hozzászólás módosítva: Márc 20, 2021
(#) superuser válasza Rober_4 hozzászólására (») Márc 21, 2021 /
 
Az Arduino kódok kapcsán szerintem ez egy igen jellemző probléma. Nem tudod ki írta meg, nem tudod hogyan. Nem tudod milyen erőforrást használ és mennyit. Ahol számít, ott jobban jársz a saját kóddal, mint egy alapvető feladatra felhasználni egy akárhogyan megírt könyvtárat.
(#) icserny válasza Rober_4 hozzászólására (») Márc 21, 2021 / 2
 
Bár fogalmam sincs, hogy miről van szó, de a 8-as maradékot szerintem a 7-tel való ÉS kapcsolattal is megkaphatod.
  1. byte split = framearpeggio & 7;
(#) atiotezer hozzászólása Márc 21, 2021 /
 
Sziasztok.

Ezt átnézni valaki, hogy lát -e benne hibát?

7 nyomógomb
6 Kimenet
MCP2307 I2C port-bővítő
Ezek 3.3V-ról mennek.
Egy Nextion kijelző (5-3.3v szintillesztéssel)

A másik oldalon egy arduino nano 33 IOT lesz (ez 3.3V-os) ezzel kommunikál a port-bővítő.


A linken ott van pdf-ben is, mert lehet az oldal lerontja a kép minőségét.

https://www.dropbox.com/s/0tmjs0pozfj83bo/ext.pdf?dl=0



Köszönöm.

ext.jpg
    
(#) Bakman válasza atiotezer hozzászólására (») Márc 21, 2021 /
 
Az U$1 és az U$8 milyen IC-k? Ha 78xx típusú stabilizátorok, akkor a kimenetükön ne legyen csak 4.7 - 10 µF-os kondenzátor, kivéve ha az adalap (más típusú IC esetén) másként nem nyilatkozik.
(#) atiotezer válasza Bakman hozzászólására (») Márc 21, 2021 /
 
Szia.

Az egyik L7805 a másik LD33, (dpak mind a kettő) adatlap alapján teszek oda akkor kondit.
(#) Bakman válasza atiotezer hozzászólására (») Márc 21, 2021 /
 
Abban az elrendezésben ahogyan te használod, LD33 esetén 10 µF van az adatlapban, 7805 esetén pedig 100 nF. Utóbbinál, ha nagy kapacitású terhelés van a kimeneten, kell egy védődióda is, különben a nagy kondenzátor tönkreteszi az IC-t.
(#) atiotezer válasza Bakman hozzászólására (») Márc 21, 2021 /
 
Rendben, a többi része szerinted megfelelő?
(#) Bakman válasza atiotezer hozzászólására (») Márc 21, 2021 /
 
Ha a portbővítő nem használt lábait (A7, B0 és B1) kimenetnek állítod be, akkor feleslegesek a felhúzó ellenállások. Ha a Q1 - Q6 FET-eket nem akarod gyorsan kapcsolgatni (másodpercenként többször), akkor jó de a 10 kΩ-os felhúzókat inkább cseréld le 1 kΩ-os ellenállásokra, gyorsabban fognak lezárni a FET-ek.
(#) pbalazs válasza atiotezer hozzászólására (») Márc 21, 2021 /
 
A 10k-s felhúzók a bemeneten szerintem hatástalanok, mert a LED és az ellenállása kisöntöli.
L03-mal sorban 10k van, gondolom, 120R-t akartál.
A kimeneteken elég erős FET-ek vannak. Érdemes kiszámolnod, hogy kikapcsoláskor mekkora disszipáció keletkezik, azaz a 10k elég gyorsan süti-e ki a gate kapacitást.
Az UART szintillesztőhöz szerintem nem kellenek FET-ek, de konkrét adatlapot kellene nézni. Az első kijelző, amit a gugli kidobott, megérti a 3V-ot magasnak. A másik irányhoz meg elég egy feszosztó.
Következő: »»   682 / 839
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