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   675 / 845
(#) kapu48 válasza hajoskapitany hozzászólására (») Feb 5, 2021 /
 
Még ilyen csodát sem láttam, hogy valaki Serial.print-böl hívja meg a grafikus rutinokat!
Próbáld meg csak simán meghívni őket. Pl.:
  1. void loop(void) {
  2.   Serial.print(F("Screen fill              "));
  3.  testFillScreen();
  4.   delay(1000);
  5.  
  6.   Serial.print(F("Text                     "));
  7.   testText();
  8.   delay(3000);
  9. ... És így tovább.
(#) vargham válasza kapu48 hozzászólására (») Feb 5, 2021 /
 
Teljesen rendben van ez a tesztprogram. Megnézted, hogy mit csinálnak a test kezdetű függvények? Hogy mi a visszatérési értékük? És miért írja ki őket a sorosporton?
A testText függvény megméri, hogy mennyi idő alatt rajzolja ki a teszt szöveget a képernyőre, és ez lesz a visszatérési értéke. Ahogy a többi test függvény is méri a kirajzolás idejét. A Serial.print pedig kiírja ezt. A te módosításoddal a lényeg vész el belőle, nem fogjuk megtudni, hogy mennyi idő alatt történt meg a rajzolás. A grafikus rutin futásának szempontjából pedig tökéletesen mindegy, hogy honnan hívod meg.
Ez a sor:
  1. Serial.println(testText());

Egyenértékű ezzel a kettővel:
  1. unsigned long elapsedTime = testText();
  2. Serial.println(elapsedTime);

Csak az első rövidebb.
Remélem, így már érthető.
(#) papus51 válasza papus51 hozzászólására (») Feb 5, 2021 /
 
Köszönöm, a probléma megoldásra talált Bakman kolléga segítségével.
(#) hajoskapitany válasza vargham hozzászólására (») Feb 5, 2021 /
 
Ha teljesen rendben van a program, akkor valami hardveres gond lehet?
(#) vargham válasza hajoskapitany hozzászólására (») Feb 5, 2021 /
 
Elnézést, pontosítok. A kapu48 által kifogásolt rész van rendben. A többit nem néztem.
(#) kapu48 válasza vargham hozzászólására (») Feb 5, 2021 /
 
Igazad van!
Nem néztem meg a rutinokat. Mivel a kolléga nem a futás időt reklamálta, hanem hanem a megjelenítés módját. Igy a futásidőt lényegtelennek találtam.

Egy próbát meg ért volna. Bár a hiba valószínűleg máshol van.

Én megpróbálnám másik illesztő programokkal is.
(#) chopper800 hozzászólása Feb 5, 2021 /
 
Szerbusztok.
Segítséget szeretnék kérni programozásban. Egy 6 csöves nixie órát építek. A nixie csöveket tranzisztorokkal a tranzisztorokat CD4028 bcd to decimal IC-vel ezeket az IC-ket 74hc595 shift registerrel, és utóbbiakat Arduino Nano-val vezérlem avagy vezérelném. A pontos időt DS1307 I2C biztosítja. LCD-vel nincs probléma oda sikerült a progarmot az internet segítségével megírni (java részt kimásolni), de a shift registerre nem megy a dolog. És nem igazán találok az interneten se programot ami működne. Ha csak a másodperc kijelzésben segítene valaki megírni a programot, egyrészt nagyon örülnék, másrészt a percek és az órák programját már kitudnám fürkészni.
A válaszokat előre is köszönöm.
Üdv.
(#) kapu48 válasza chopper800 hozzászólására (») Feb 5, 2021 /
 
Kapcsolási rajzból többet megértenénk!
(#) chopper800 válasza kapu48 hozzászólására (») Feb 5, 2021 /
 
Itt most bajban vagyok mert azokkal nem tudok szolgálni, de (akármilyen nevetségesen hangzik )egy blokkdiagrammot tudok csinálni gyorsan (relatív gyorsan).
(#) vargham válasza chopper800 hozzászólására (») Feb 5, 2021 /
 
Ha nem tudod, mit hová kötöttél, akkor hogyan akarod programozni? Rajzold le!
(#) chopper800 válasza vargham hozzászólására (») Feb 5, 2021 /
 
Nem a legszebb, de talán átlátható.
(#) kapu48 válasza chopper800 hozzászólására (») Feb 5, 2021 /
 
Adatlap szerint 5 bemeneten vezérlik az 595-öst:
Bővebben: Link
A rajzodon csak 3 szerepel!
(#) chopper800 válasza kapu48 hozzászólására (») Feb 5, 2021 /
 
Igen mert a 10es pin "master reset (active LOW)" és a 13 pin "output enable (active LOW)" szintén ezért azokat GND-re kötöttem.
(#) chopper800 válasza chopper800 hozzászólására (») Feb 5, 2021 /
 
Hopp itt elírtam a 10 pin "MR " az 5 voltra van kötve. de a neten is így láttam kötéseket másképp nem működik.
(#) kapu48 válasza chopper800 hozzászólására (») Feb 5, 2021 /
 
Inkább nézd meg az adatlap Fig.6 Timing diagram-ot. Érdemes lenne mindet beköt.
(#) chopper800 válasza kapu48 hozzászólására (») Feb 5, 2021 /
 
Értem ezt a részét, de. Igazándiból azt szeretném elérni Hogy az RTC I2C-ből kinyert adat vagyis az idő pl.: 21 óra 22 perc és 41 másodpercet be tudjam küldeni a shift registerekbe 8bites adatként hogy azok a cd4028 IC-t megfelelően vezéreljék. pl.: a 41 sec az a shift registerbe "0b01000001" ként menjen be.
(#) kapu48 válasza chopper800 hozzászólására (») Feb 5, 2021 /
 
Itt le van írva: Bővebben: Link
(#) chopper800 válasza kapu48 hozzászólására (») Feb 5, 2021 /
 
Köszönöm a segítséget.
(#) kapu48 válasza chopper800 hozzászólására (») Feb 5, 2021 /
 
Vagy itt : Bővebben: Link
(#) tbarath válasza chopper800 hozzászólására (») Feb 5, 2021 /
 
Féloff: javaslom, hogy DS1307 helyett használj DS3231-et. Több kínai modult használtam 1307-ből, mindegyik botrányosan pontatlan volt.
(#) hajoskapitany válasza kapu48 hozzászólására (») Feb 5, 2021 /
 
Kipróbáltam azért amit ajánlottál, de sajnos nem változott.
A többi könyvtárat valószínűleg én nem tudtam rendesen inicializálni és ezért nem működött velük.
(#) kapu48 válasza hajoskapitany hozzászólására (») Feb 6, 2021 /
 
Esetleg hosszú kábeleket használsz azért zajos a kép.

Megnéztem a videódat és a programot.
Azt tapasztaltam, hogy a körök rajzolásánál zajosabb.
Valamennyit lehetne rajta gyorsítani, ha a sorozatos if() vizsgálatokat else if()-re cserélnéd.
Ilyenkor mikor igaznak talál egy feltétel azt végrehajtsa, és a többi lehetőséget már nem vizsgálja.
Igy képzelem egy pl.:
  1. void ERGFX::drawCircleHelper( int16_t x0, int16_t y0,
  2.                int16_t r, uint8_t cornername, uint16_t color) {
  3.   int16_t f     = 1 - r;
  4.   int16_t ddF_x = 1;
  5.   int16_t ddF_y = -2 * r;
  6.   int16_t x     = 0;
  7.   int16_t y     = r;
  8.  
  9.   while (x<y) {
  10.     if (f >= 0) {
  11.       y--;
  12.       ddF_y += 2;
  13.       f     += ddF_y;
  14.     }
  15.     x++;
  16.     ddF_x += 2;
  17.     f     += ddF_x;
  18.     if (cornername & 0x4) {
  19.       drawPixel(x0 + x, y0 + y, color);
  20.       drawPixel(x0 + y, y0 + x, color);
  21.     }
  22.     else if (cornername & 0x2) {
  23.       drawPixel(x0 + x, y0 - y, color);
  24.       drawPixel(x0 + y, y0 - x, color);
  25.     }
  26.     else if (cornername & 0x8) {
  27.       drawPixel(x0 - y, y0 + x, color);
  28.       drawPixel(x0 - x, y0 + y, color);
  29.     }
  30.     else if (cornername & 0x1) {
  31.       drawPixel(x0 - y, y0 - x, color);
  32.       drawPixel(x0 - x, y0 - y, color);
  33.     }
  34.   }
  35. }


Mivel itt mindig a cornername-et vizsgálja és természetesen annak csak egy féle értéke lehet.
A többit már felesleges vizsgálni.
A hozzászólás módosítva: Feb 6, 2021
(#) kapu48 válasza hajoskapitany hozzászólására (») Feb 6, 2021 /
 
Még ami szerintem teljesen felesleges idő húzás, ha csak egy eszköz van a SPI porton.
Ez a definiálás a TFTMI-1-cpp-ben:
  1. // If the SPI library has transaction support, these functions
  2. // establish settings and protect from interference from other
  3. // libraries.  Otherwise, they simply do nothing.
  4. #ifdef SPI_HAS_TRANSACTION
  5. static inline void spi_begin(void) __attribute__((always_inline));
  6. static inline void spi_begin(void) {
  7.   SPI.beginTransaction(SPISettings(8000000, MSBFIRST, SPI_MODE0));
  8. }
  9. static inline void spi_end(void) __attribute__((always_inline));
  10. static inline void spi_end(void) {
  11.   SPI.endTransaction();
  12. }
  13. #else
  14. #define spi_begin()             //      mivel nem csinál semmit
  15. #define spi_end()               //      Viszont az if() vizsgálatok húzzák az időt.
  16. #endif
  17.  
  18. ...
  19. // itt rengeteg pontot kel kirajzólni és feleslegesen van benne kettő if() vizsgálat.
  20. void GC9A01::drawPixel(int16_t x, int16_t y, uint16_t color) {
  21.  
  22.   if((x < 0) ||(x >= _width) || (y < 0) || (y >= _height)) return;
  23.  
  24. //  if (hwSPI) spi_begin();             KI SZEDNÉM őket sok kis nyereség, végül sok időt spórol.
  25.   setAddrWindow(x,y,x+1,y+1);
  26.  
  27.   //digitalWrite(_dc, HIGH);
  28.   *dcport |=  dcpinmask;
  29.   //digitalWrite(_cs, LOW);
  30.   *csport &= ~cspinmask;
  31.  
  32.   spiwrite(color >> 8);
  33.   spiwrite(color);
  34.  
  35.   *csport |= cspinmask;
  36.   //digitalWrite(_cs, HIGH);
  37. //  if (hwSPI) spi_end();                               KI SZEDNÉM őket sok kis nyereség, végül sok időt spórol.
  38. }

Ezt a if (hwSPI) spi_begin(); - if (hwSPI) spi_end();-et mindenhova be nyomták?
A magyar nyelvű kommenteket olvasd!
A hozzászólás módosítva: Feb 6, 2021
(#) chopper800 válasza tbarath hozzászólására (») Feb 6, 2021 /
 
köszönöm a tippet.
Üdv.
(#) chopper800 válasza kapu48 hozzászólására (») Feb 6, 2021 /
 
köszönöm a linket.
Üdv.
(#) hajoskapitany válasza kapu48 hozzászólására (») Feb 6, 2021 /
 
Köszi, kipróbáltam: a megjelenés módja nem változott, viszont gyorsult egy kicsit.
10 cm-nél rövidebb kábeleket használok, szerintem nem szed össze zavart, de azért valamilyen árnyékolást majd dobok rá.
Viszont nézegettem a panellel szerelt verziókat: szinte mindegyiken van pár kondi/ellenállás a led előtéten kívül is. Lehetséges hogy egy/több ilyen hiányzik a driver IC-nek?
Csak azért gondolok inkább hardveres hibára, mert a kijelző viselkedése változik, hol jobb, hol rosszabb, holott a kódot nem változtatom.
Jó hétvégét!
A hozzászólás módosítva: Feb 6, 2021
(#) Bakman válasza hajoskapitany hozzászólására (») Feb 6, 2021 /
 
Ilyenek általában akkor fordulnak elő, ha az SPI beállítása nem jó. Nem tudom, hogy Arduino alatt hogyan működik ez a dolog de PIC esetén négy üzemmód közül is lehet választani. A kijelző adatlapját kell megnézni, milyet vár.

Esetleg az SPI vezetékekre egy-egy 1 kΩ-os fel- vagy lehúzó ellenállás, hátha.
(#) hajoskapitany válasza Bakman hozzászólására (») Feb 6, 2021 /
 
Mivel az adatlapban nem találtam, hogy milyen SPI módra vár, ezért kipróbáltam mind a 4-et:
A .cpp és .h fájlokban átírtam a SPI_MODE0-át. Mindegyikbe ugyanúgy és ugyanannyira megbízhatatlanul működik.

Közben az Arduino GFX könyvtárral is sikerült szóra bírnom:
  1. #include <Arduino_GFX_Library.h>
  2. #include <SPI.h>
  3.  
  4. #define MISO     -1
  5. #define SCLK    13  
  6. #define MOSI    11  
  7. #define TFT_CS   10
  8. #define TFT_DC  9
  9. #define TFT_RST 8
  10.  
  11. Arduino_DataBus *bus = new Arduino_SWSPI(TFT_DC, TFT_CS, SCLK, MOSI, MISO);
  12. Arduino_GC9A01  *gfx = new Arduino_GC9A01(bus, TFT_RST, 0, true);
  13. void setup()
  14. {
  15.   gfx->begin();
  16.   gfx->fillScreen(0x0000);
  17.   gfx->fillRect(100, 100, 50, 50, 0xFF00);
  18. }
  19.  
  20. void loop()
  21. {
  22. }

Az eredmény ugyanaz.
A fel vagy lehúzó ellenállást kivétel nélkül minden SPI vezetékre gondolod?
(#) Bakman válasza hajoskapitany hozzászólására (») Feb 7, 2021 /
 
Igen, minden vezetékre. A MISO-ra, ha nincs használva, felesleges.
(#) kitartás hozzászólása Feb 7, 2021 /
 
Sziasztok!
Küzdök egy egyszerűnek tűnő pici progival és nem bírok vele.
A kód a következő lenne (leginkább a VirtualWire könyvtár legfapadosabb példaprogi alapján ):
  1. #include <RH_ASK.h>
  2. #include <SPI.h> // Not actually used but needed to compile
  3. #include <avr/sleep.h>//this AVR library contains the methods that controls the sleep modes
  4.  
  5. #define interruptPin 2 //Pin we are going to use to wake up the Arduino
  6.  
  7. RH_ASK driver;
  8.  
  9. char *msg;
  10.  
  11. void setup()
  12. {
  13.     Serial.begin(9600);
  14.     if (!driver.init())
  15.     Serial.println("init failed");
  16.  
  17.   pinMode(LED_BUILTIN,OUTPUT);//We use the led on pin 13 to indecate when Arduino is A sleep
  18.   pinMode(interruptPin,INPUT_PULLUP);//Set pin d2 to input using the buildin pullup resistor
  19.  // digitalWrite(LED_BUILTIN,HIGH);  
  20. }
  21.  
  22. void loop()
  23. {
  24.    int sensorValue = analogRead(A0);
  25.    float voltage = sensorValue * (5.0 / 1023.0);
  26.    if (voltage > 3.1) {msg = "2Jottek";}
  27.    else if (voltage < 3.1  voltage > 2.9 ) {msg = "1Jottek";}
  28.    else if (voltage < 2.9) {msg = "0Jottek";}
  29.    else {msg = "9Jottek";}
  30.  
  31.     driver.send((uint8_t *)msg, strlen(msg));
  32.     driver.waitPacketSent();
  33.     Serial.println("Csengettek!");  
  34.     Serial.println (msg);
  35.     delay(1000);
  36.  
  37.     Going_To_);
  38.    
  39. }
  40.  
  41. void Going_To_){
  42.     sleep_enable();//Enabling sleep mode
  43. /////////    attachInterrupt(0, wakeUp, LOW);//attaching a interrupt to pin d2
  44. attachInterrupt(digitalPinToInterrupt(2), wakeUp, LOW);
  45. ////////
  46.     set_sleep_mode(SLEEP_MODE_PWR_DOWN);//Setting the sleep mode, in our case full sleep
  47.     digitalWrite(LED_BUILTIN,LOW);//turning LED off
  48.     delay(1000); //wait a second to allow the led to be turned off before going to sleep
  49.     sleep_cpu();//activating sleep mode
  50.     Serial.println("just woke up!");//next line of code executed after the interrupt
  51.   //  digitalWrite(LED_BUILTIN,HIGH);//turning LED on
  52.   }
  53.  
  54.   void wakeUp(){
  55.   Serial.println("Interrrupt Fired");//Print message to serial monitor
  56.   sleep_disable();//Disable sleep mode
  57. //////  detachInterrupt(0); //Removes the interrupt from pin 2;
  58. detachInterrupt(digitalPinToInterrupt(2));
  59. ///////
  60. }

Arduino (persze hogy kínai) pro mini futtatná. Egy vezeték nélküli kapucsengő adó része lenne aksi + step up tápellátással (az aksit méri az analóg). A gondom az vele ha egymás után többször gyorsan nyomkodom az indító
kapcsolót a kis kütyü lefagy. A resettel vagy aksi ki-be ujra indítható de nem ez lenne az üzemszerű. Hol rontom el?
Következő: »»   675 / 845
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