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   603 / 851
(#) KoblogPerGyok válasza Lamprologus hozzászólására (») Márc 13, 2020 /
 
Helló!

Itt van egy táblázat is szerintem az SPI lesz a jóbb.

https://www.rfwireless-world.com/Terminology/UART-vs-SPI-vs-I2C.html
(#) Bakman válasza Lamprologus hozzászólására (») Márc 13, 2020 /
 
UART sebessége, 115 200 bit/s, e fölé már nem nagyon tudnak menni egyszerű eszközök, SPI-vel 1 Mbit/s is könnyen elérhető, nem számítva a CS be- és kikapcsolásának idejét.

I2C-n 400 kHz-es órajelet is könnyen el lehet érni, a következő, 1 MHz-es órajelet már nem sok eszköz tud kezelni. Ráadásul I2C esetén a kapcsolat elején megy a pinpongozás, amíg az eszközök megbeszélik egymás közt, kinek is szól az adat.
(#) Lamprologus válasza Bakman hozzászólására (») Márc 13, 2020 /
 
ok! Akkor mondjuk legyen az SPI ...
Hogy célszerű az adatokat küldeni?
Legyen a PIC a mester, és csak tolja az adatokat egymás után, vagy a nodemcu legyen a mester és mint pl egy memória kiolvasásnál kérje egyesével az adatokat? Vagy mi lenne célszerű?
(#) usane válasza Lamprologus hozzászólására (») Márc 13, 2020 /
 
Mi a lassú? Megmérted és a névleges sebesség a lassú, vagy nem megy a névlegessel? Nem lehet, hogy az olvasó vagy a küldő rutin a lassú?
Egyébként járatok UART-ot 920000 Baudon is. Igaz scak időlegesen. Eszközöktől, kábelezéstől, órajel forrástól is függ. A NodeMCU ennyivel frissíti a Nextion szoftverét. Egyébként, ha a NodeMCU-n hardveres UART-ot használsz (serial0) és közben a serial.print-et is használod debuggoláshoz akkor az be is kavarhat a sebességbe, mert az a serial0-ra ír alapból. Nem tudom, hogy van nálad konfigurálva, de nálam amikor a Nextion-os cuccot csináltam, nagyon lelassította. Igaz a Nextion lib inicializált egy új kommunikációs csatornát a serial-ra.
(#) sargarigo válasza usane hozzászólására (») Márc 13, 2020 /
 
Szerintem csak arra gondolt, hogy érzetre szeretné ha gyorsabb lenne..
(#) Bakman válasza Lamprologus hozzászólására (») Márc 13, 2020 /
 
Ha a NodeMCU kéri, kéregeti az adatokat, az ismét ront a sebességen. Csináld meg úgy, ahogy UART-on csináltad, tolod az adatokat, ahogy jönnek.
(#) usane válasza szeg76 hozzászólására (») Márc 13, 2020 /
 
Ez nekem hiányosnak tűnik. A t2 az nálad pointer. Abból hogy lesz tömb? Csak ha rámutat.
Ha meg rámutat akkor nem mutathat máshová is.
(#) usane válasza usane hozzászólására (») Márc 13, 2020 /
 
Továbbmegyek. Ha kiegészítem, sem jó, mert fordítva kellene az egyenlőség. A t1-nek szeretném átadni a t2 elemeit, mert a t1 a nagyobb, és a fordító azt nem fogadja el.
(#) Bell hozzászólása Márc 13, 2020 /
 
Heló!
Nem boldogulok ezzel az Arduinoval.
Megvan egy Duemilanov bootloaderrel ellátott ATmega328P PU IC, benne egy programozón át feltöltött blink, ami működik.
De USB-soros átalakítóval nem lehet programozni. Ugyanezt máshol is használom és működik.
GND, +5V, RX, TX, helyén vannak, a DTR 100nF-al rákötve a RESET lábra a 10KOhmos felhúzó ellenállással együtt. Táppal párhuzamosan 10 µF és 100nF.
Mi lehet a hiba?
(#) KoblogPerGyok válasza Bell hozzászólására (») Márc 13, 2020 / 1
 
Helló!

Az Arduino a soros portból kapja az 5V-ot és a GND-t? Gondolom igen, mert azt írtad. Milyen környezetben programozod? Win+Arduino IDE? Gondolom a port jól van beállítva az id-ben.

Mit jelent, hogy máshol jó?

Arra gondolok, hogy szoftveresen is lehet a hiba esetleg. Fordított byte sorrendben küldi az usb soros átalakító, vagy valami port beállítás esetleg.

Elképzelhető, hogy ezt a gondot a korábbi programozó áthidalja, direktben meg nem.

https://www.embeddedrelated.com/showarticle/174.php
A hozzászólás módosítva: Márc 13, 2020
(#) KoblogPerGyok válasza Bell hozzászólására (») Márc 13, 2020 /
 
Ilyesmire gondolok:

https://v8doc.sas.com/sashtml/lgref/z1270373.htm

Ott a UNIX-NUXI problémára is gondolhatunk szerintem.
(#) nightlife válasza rolandgw hozzászólására (») Márc 13, 2020 /
 
"b" tömb pointerei így már "a" tömb szabadon választott elemeire mutatnak.
Ha "b" tömböt változtatja, változik "a" is, és fordítva is igaz.
Ez volt a kérés nem?
(#) rolandgw válasza nightlife hozzászólására (») Márc 13, 2020 /
 
Lefordítom amit írtál:
  1. int a[10] = { 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };
  2.     int b[4];
  3.     b[0] = a[3];
  4.     b[1]) =  a[4];
  5.     b [2] = a [5];
  6.     b [3]=  a [6];

A b-nek sem az a-nak nincsenek pointerei, egy pointer van ebben az esetben mindkettőnél, ami különböző és konstans, ez a pointer azonosítója, tehát a és b.
(#) zaza99 hozzászólása Márc 13, 2020 /
 
Sziasztok!
Hogyan tudom a BME280 szenzor SDA SCL portját áttenni D12-13-ra?
  1. /*
  2. BME280 I2C Test.ino
  3.  
  4. This code shows how to record data from the BME280 environmental sensor
  5. using I2C interface. This file is an example file, part of the Arduino
  6. BME280 library.
  7.  
  8. GNU General Public License
  9.  
  10. Written: Dec 30 2015.
  11. Last Updated: Oct 07 2017.
  12.  
  13. Connecting the BME280 Sensor:
  14. Sensor              ->  Board
  15. -----------------------------
  16. Vin (Voltage In)    ->  3.3V
  17. Gnd (Ground)        ->  Gnd
  18. SDA (Serial Data)   ->  A4 on Uno/Pro-Mini, 20 on Mega2560/Due, 2 Leonardo/Pro-Micro
  19. SCK (Serial Clock)  ->  A5 on Uno/Pro-Mini, 21 on Mega2560/Due, 3 Leonardo/Pro-Micro
  20.  
  21.  */
  22.  
  23. #include <BME280I2C.h>
  24. #include <Wire.h>
  25.  
  26. #define SERIAL_BAUD 115200
  27.  
  28. BME280I2C bme;    // Default : forced mode, standby time = 1000 ms
  29.                   // Oversampling = pressure ×1, temperature ×1, humidity ×1, filter off,
  30.  
  31. //////////////////////////////////////////////////////////////////
  32. void setup()
  33. {
  34.   Serial.begin(SERIAL_BAUD);
  35.  
  36.   while(!Serial) {} // Wait
  37.  
  38.   Wire.begin();
  39.  
  40.   while(!bme.begin())
  41.   {
  42.     Serial.println("Could not find BME280 sensor!");
  43.     delay(1000);
  44.   }
  45.  
  46.   // bme.chipID(); // Deprecated. See chipModel().
  47.   switch(bme.chipModel())
  48.   {
  49.      case BME280::ChipModel_BME280:
  50.        Serial.println("Found BME280 sensor! Success.");
  51.        break;
  52.      case BME280::ChipModel_BMP280:
  53.        Serial.println("Found BMP280 sensor! No Humidity available.");
  54.        break;
  55.      default:
  56.        Serial.println("Found UNKNOWN sensor! Error!");
  57.   }
  58. }
  59.  
  60. void loop()
  61. {
  62.    printBME280Data(&Serial);
  63.    delay(500);
  64. }
  65.  
  66. //////////////////////////////////////////////////////////////////
  67. void printBME280Data
  68. (
  69.    Stream* client
  70. )
  71. {
  72.    float temp(NAN), hum(NAN), pres(NAN);
  73.  
  74.    BME280::TempUnit tempUnit(BME280::TempUnit_Celsius);
  75.    BME280::PresUnit presUnit(BME280::PresUnit_Pa);
  76.  
  77.    bme.read(pres, temp, hum, tempUnit, presUnit);
  78.  
  79.    client->print("Temp: ");
  80.    client->print(temp);
  81.    client->print("°"+ String(tempUnit == BME280::TempUnit_Celsius ? 'C' :'F'));
  82.    client->print("\t\tHumidity: ");
  83.    client->print(hum);
  84.    client->print("% RH");
  85.    client->print("\t\tPressure: ");
  86.    client->print(pres);
  87.    client->println(" Pa");
  88.  
  89.    delay(1000);
  90. }
(#) sargarigo válasza zaza99 hozzászólására (») Márc 13, 2020 /
 
A BME280I2C.h, vagy a Wire.h fájlokban kell hogy legyen a definíciója, hogy alapból melyik pineket használja. Nézz bele!
(#) KoblogPerGyok válasza zaza99 hozzászólására (») Márc 13, 2020 /
 
Miért kell átrakni? A használt MCU-nak az SCL/SDA lábainak kivezetése adottak-fixek az I2C-hez.
(#) zaza99 válasza KoblogPerGyok hozzászólására (») Márc 13, 2020 /
 
Mert a képen látható kijelző lefoglalja az A4-A5 pineket.

s-l1600.jpg
    
(#) KoblogPerGyok válasza zaza99 hozzászólására (») Márc 13, 2020 /
 
Azaz az i2c-n van a kijelző is?

Az nem gond. Az I2C egyik előnye, hogy ugyanazon a vonalon több mint 100 eszköz lehet. Címezni kell őket.
A hozzászólás módosítva: Márc 13, 2020
(#) Bell válasza KoblogPerGyok hozzászólására (») Márc 13, 2020 /
 
Win7 64bit, Arduino IDE 1.8.12 (a legújabb).
Ugyanezt az USB-soros átalakítót használom egy Arduino mini-nél és ott nincs vele semmi gond.
A portot nem tudom hol és milyen értékre kell beállítani az ID-ben.
De gondolom, hogy ugyanaz minden bootloadernél.
Ilyen hibákat kapok:
Arduino: 1.8.12 (Windows 7), Alaplap:"Arduino Duemilanove or Diecimila, ATmega328P"

Using Port : COM5
Using Programmer : arduino
Overriding Baud Rate : 57600
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0xef
avrdude: ser_recv(): read error: Az I/O művelet megszakítva. (Egy folyamat véget ért, vagy egy alkalmazás megszakította az I/O műveletet.)

avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0xef
avrdude: ser_send(): write error: sorry no info avail
avrdude: ser_recv(): read error: Az eszköz nem ismeri fel a parancsot.

Ezek szerint a soros porttal van gond.
Pontosabban el sem indul a programozás folyamata, mert villog tovább attól, ami benne van.
Lehet, hogy kell oda valamilyen felhúzó ellenállás?
(#) KoblogPerGyok válasza Bell hozzászólására (») Márc 13, 2020 / 1
 
Érdekes akkor nem az amire gondolok. Mi az alap baud rate? Annak kellene utána nézni. Nem lehet, hogy a bootloader alapban nem ezzel a sebességgel akar kommunikálni?
(#) asch válasza Lamprologus hozzászólására (») Márc 13, 2020 /
 
Kulcskérdés, hogy van-e DMA? Ennek az a lényege, hogy a processzor munkája nélkül becsorognak az adatok a RAM-ba. Én a 8 bites AVR-eket ismerem, ott nincs. Arra tippelnék, hogy a PIC-en sincs. Gyanítom, hogy a nodeMCU-ban van ilyen, vagy legalább nagyobb vételi puffer.

DMA nélkül minden fogadott bájt (fogadó puffer megtelés, adási puffer ürülés) egy interruptot okoz (vagy pollozva fel kell dolgozni), és annak a feldolgozási ideje is korlátozhatja az átviteli sebességet. Illetve biztosítani kell, hogy időben lefusson - az SPI slave ugye nem tudja jelezni, hogy felkészült-e a következő bájt fogadására, tehát csakis a sebesség korlátozásával lehet ezt biztosítani.

Az I2C-ban a slave is tudja lassítani az átvitelt ismereteim szerint, de lehet, hogy rosszul emlékszem.

AVR-en a legnagyobb sávszélességet szerintem szoftveresen megvalósított SPI-szerű protokollal lehet elérni úgy, hogy nem 1, hanem pl 8 adatvonalat használunk az 1 db órajel mellé. Tehát 1 órajellel átmegy egy teljes bájt. Cserébe sok lábat lefoglal, és szoftveresen kell megvalósítani. Ez tuti megvalósítható PIC és nodeMCU között is, de csak akkor érdemes, ha _valóban_ szükség van rá.

Az, hogy lassú, az egyébként nem túl pontos megfogalmazás. Mi lassú? A késleltetés? Nem tudsz elegendő periódusnyi adatot átküldeni egy másodperc alatt? Túl sokáig "áll" a program, ameddig a kommunikáció tart?

Mert ha csak az a baj, hogy túl sokáig áll a program, akkor megoldás lehet, ha interrupt segítségével "háttérben" történik a kommunikáció. Ha valóban nem elegendő a sávszélesség, akkor kell a kommunikációs protokollon változtatni.
A hozzászólás módosítva: Márc 13, 2020
(#) zaza99 válasza KoblogPerGyok hozzászólására (») Márc 13, 2020 /
 
Ezzel a példával megy a kijelző:
  1. /***********************************************************************************
  2. *This program is a demo of displaying string
  3. *This demo was made for LCD modules with 8bit or 16bit data port.
  4. *This program requires the the LCDKIWI library.
  5.  
  6. * File                : display_string.ino
  7. * Hardware Environment: Arduino UNO&Mega2560
  8. * Build Environment   : Arduino
  9.  
  10. *Set the pins to the correct ones for your development shield or breakout board.
  11. *This demo use the BREAKOUT BOARD only and use these 8bit data lines to the LCD,
  12. *pin usage as follow:
  13. *                  LCD_CS  LCD_CD  LCD_WR  LCD_RD  LCD_RST  SD_SS  SD_DI  SD_DO  SD_SCK
  14. *     Arduino Uno    A3      A2      A1      A0      A4      10     11     12      13                            
  15. *Arduino Mega2560    A3      A2      A1      A0      A4      10     11     12      13                          
  16.  
  17. *                  LCD_D0  LCD_D1  LCD_D2  LCD_D3  LCD_D4  LCD_D5  LCD_D6  LCD_D7  
  18. *     Arduino Uno    8       9       2       3       4       5       6       7
  19. *Arduino Mega2560    8       9       2       3       4       5       6       7
  20.  
  21. *Remember to set the pins to suit your display module!
  22. *
  23. * @attention
  24. *
  25. * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  26. * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  27. * TIME. AS A RESULT, QD electronic SHALL NOT BE HELD LIABLE FOR ANY
  28. * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  29. * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  30. * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  31. **********************************************************************************/
  32.  
  33. #include <LCDWIKI_GUI.h> //Core graphics library
  34. #include <LCDWIKI_KBV.h> //Hardware-specific library
  35.  
  36. //if the IC model is known or the modules is unreadable,you can use this constructed function
  37. LCDWIKI_KBV mylcd(ILI9486,A3,A2,A1,A0,A4); //model,cs,cd,wr,rd,reset
  38. //if the IC model is not known and the modules is readable,you can use this constructed function
  39. //LCDWIKI_KBV mylcd(320,480,A3,A2,A1,A0,A4);//width,height,cs,cd,wr,rd,reset
  40.  
  41. //define some colour values
  42. #define  BLACK   0x0000
  43. #define BLUE    0x001F
  44. #define RED     0xF800
  45. #define GREEN   0x07E0
  46. #define CYAN    0x07FF
  47. #define MAGENTA 0xF81F
  48. #define YELLOW  0xFFE0
  49. #define WHITE   0xFFFF
  50.  
  51. void setup()
  52. {
  53.   Serial.begin(9600);
  54.   mylcd.Init_LCD();
  55.   Serial.println(mylcd.Read_ID(), HEX);
  56.   mylcd.Fill_Screen(BLACK);
  57. }
  58.  
  59. void loop()
  60. {
  61.    uint16_t;
  62.   mylcd.Set_Text_Mode(0);
  63.   //display 1 times string
  64.   mylcd.Fill_Screen(0x0000);
  65.   mylcd.Set_Text_colour(RED);
  66.   mylcd.Set_Text_Back_colour(BLACK);
  67.   mylcd.Set_Text_Size(1);
  68.   mylcd.Print_String("Hello World!", 0, 0);
  69.   mylcd.Print_Number_Float(01234.56789, 2, 0, 8, '.', 0, ' ');  
  70.   mylcd.Print_Number_Int(0xDEADBEF, 0, 16, 0, ' ',16);
  71.   //mylcd.Print_String("DEADBEF", 0, 16);
  72.  
  73.   //display 2 times string
  74.   mylcd.Set_Text_colour(GREEN);
  75.   mylcd.Set_Text_Size(2);
  76.   mylcd.Print_String("Hello World!", 0, 40);
  77.   mylcd.Print_Number_Float(01234.56789, 2, 0, 56, '.', 0, ' ');  
  78.   mylcd.Print_Number_Int(0xDEADBEF, 0, 72, 0, ' ',16);
  79.   //mylcd.Print_String("DEADBEEF", 0, 72);
  80.  
  81.   //display 3 times string
  82.   mylcd.Set_Text_colour(BLUE);
  83.   mylcd.Set_Text_Size(3);
  84.   mylcd.Print_String("Hello World!", 0, 104);
  85.   mylcd.Print_Number_Float(01234.56789, 2, 0, 128, '.', 0, ' ');  
  86.   mylcd.Print_Number_Int(0xDEADBEF, 0, 152, 0, ' ',16);
  87.  // mylcd.Print_String("DEADBEEF", 0, 152);
  88.  
  89.   //display 4 times string
  90.   mylcd.Set_Text_colour(WHITE);
  91.   mylcd.Set_Text_Size(4);
  92.   mylcd.Print_String("Hello!", 0, 192);
  93.  
  94.   //display 5 times string
  95.   mylcd.Set_Text_colour(YELLOW);
  96.   mylcd.Set_Text_Size(5);
  97.   mylcd.Print_String("Hello!", 0, 224);
  98.  
  99.   //display 6 times string
  100.   mylcd.Set_Text_colour(RED);
  101.   mylcd.Set_Text_Size(6);
  102.   mylcd.Print_String("Hello!", 0, 266);
  103.  
  104.   //delay(3000);
  105. }
(#) usane válasza zaza99 hozzászólására (») Márc 13, 2020 /
 
Nem tudod átírni. Az IIC busz fix helyen van. LCD típus jó lenne, de a kódból ítélve az SPI-t használ. Meg a deszka típusát sem írtad, hogy UNO, MEGA vagy micsoda? Sok vezérlőnél Az SPI-nek és az IIC-nek vannak közös lábaik. IIC általában fix, SPI talán jobban áthelyezhető emlékeim szerint, de deszka típus nélkül passz.
(#) zaza99 válasza usane hozzászólására (») Márc 13, 2020 /
 
Uno-n szeretném használni, szerintem nem spi-s a kijelző mert használja az A0-A5 éd D2-D9 lábakat.
(#) usane válasza zaza99 hozzászólására (») Márc 13, 2020 /
 
Ha jól látom a kijelző lábai átszabhatóak.
Idézet:
„LCDWIKI_KBV mylcd(ILI9486,A3,A2,A1,A0,A4); //model,cs,cd,wr,rd,reset”
(#) zaza99 válasza usane hozzászólására (») Márc 13, 2020 /
 
Az egyiket át tudom tenni digitálisra is?
(#) usane válasza zaza99 hozzászólására (») Márc 13, 2020 /
 
Mindet át tudod. A kijelzőnek nem kell analóg jel. Magas vagy alacsony jelet kap.
(#) KoblogPerGyok válasza usane hozzászólására (») Márc 13, 2020 /
 
Én belezavarodtam de hála az Égnek, kikapták a kezemből a gépet. Ezek szerint az A4 lábat kell lecserélni valami másra?
(#) zaza99 válasza KoblogPerGyok hozzászólására (») Márc 13, 2020 /
 
Igen a kijelző A4 lábát át sikerült tennem a D10-re így a BME280-nak maradt az A4-A5 szabadon.
Kijelzi az értékeket ahogy kell.

Köszönöm mindenkinek a segítséget!
(#) usane válasza zaza99 hozzászólására (») Márc 13, 2020 /
 
Következő: »»   603 / 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