-
Mobilarena
Arduino hardverrel és szoftverrel foglakozó téma. Minden mikrovezérlő ami arduinoval programozható, és minden arduino program, board, és hardverrel kapcsolatos kérdések helye.
Új hozzászólás Aktív témák
-
Janos250
őstag
válasz
fpeter84 #20364 üzenetére
Korábban én is terveztem ilyet csinálni, de - mint sok más - ez is csak terv maradt. A fő ok az volt, hogy sikerült Aliról olcsón olyan csatit beszereznem, ami legálisan működik a laptopra tett szoftver ingyenes verziójával. A legfontosabbakat kiírja, de egy részének csak a kódját, szövegben nem, de az meg a neten megtalálható.
Így elült a projekt, de érdekel, mire jutsz vele! -
válasz
fpeter84 #18184 üzenetére
Isten tudja, ez biztosan valami hardveres bibi lesz... Azt írtad, hogy lehúztad róla a külső hardvert a feltöltés idejére, ugye?
Próbáld már meg, hogy a fordítás közben (vége felé) kézzel reseteled a mega boardot (a rajta lévő reset gombbal), lehetőleg próbáld meg kiszámítani, hogy a reset és a feltöltés kezdete közt ne teljen el 1mp-nél hosszabb idő (asszem ennyit tartózkodik a bootloader download módban, mielőtt elkezdi futtatni a rajta lévő kódot). Esetleg reset helyett húzd ki és dugd vissza jó ritmusérzékkel (
).
Ha így sem megy, akkor próbáld meg ISP-n keresztül felprogramozni, ha az nincs, egy UNO segítségével.
Olyan nincs, hogy nem sikerül
-
-
Janos250
őstag
válasz
fpeter84 #17678 üzenetére
Van egy "tanító" oldal, ahol kipróbálhatod, mi mit csinál. Itt ugyan printf van, de ha sprintf-et használsz, bármire kiírathatod.
https://en.cppreference.com/w/cpp/io/c/fprintf
Az Example résznél van olyan, hogy "Run", és láthatod az eredményt. Hogy teljes legyen az élvezet, bármit javíthatsz is a programkódban, a Run hatására a megváltoztatott program fog futni!
Astd::printf("Rounding:\t%f %.0f %.32f\n", 1.5, 1.5, 1.3);
jól mutatja, hogy mit csinál. Ehelyett ott az oldalon átírogathatod próbára a Te tetszőleges adataiddal, és látod, mi az eredmény.Ezt az oldalt egyébként másnak is ajánlom, aki nem profi a témában!
-
válasz
fpeter84 #17674 üzenetére
a példában szereplő 2284.9 mbar a kerekítés szabályai szerint 2.28 bar lenne, a kód meg 2.29-re hozza ki
Mert úgy kezded, hogy
round(tmp)
, ami a 2284.9-t felkerekíti 2285-re, ez osztva 10-zel 228.5, ami kerekítve 229.Ez csak a magyarázat a jelenségre, a megoldást már megírták.
-
ekkold
Topikgazda
válasz
fpeter84 #17674 üzenetére
Általában fixpontos változókat használok, ez formázható sprintf() függvénnyel hogy az utolsó néhány számjegy tizedesként jelenjen meg. Illetve írtam saját függvényt is ami egy fixpontos változót ír ki úgy, hogy adott utolsó néhány szánjegy tizedesként jelenjen meg.
Lebegőpontos szán esetében a kerekítés úgy oldható meg a legegyszerűbben (és végülis fixpontos esetén is), hogy osztás előtt, hozzáadjuk a számhoz az osztó felét - így pont a kerekítés szabályai szerint alakul az osztás eredménye.
-
válasz
fpeter84 #14471 üzenetére
Megnéztem az assembly kódot, azt elég könnyen tudnám módosítani úgy, hogy egynél több címre is reagáljon, de az összes lehetőséget hardcode-olni kellene a programban, tehát megmondod, hány db. i2c címet szeretnél, és aszerint módosítom. A címeket utána tudod magadnak módosítani, de a darabszámot nem (illetve látni fogod a kódot, aztán copy-paste tudod bővíteni).
Egyébként köszi a linket, pont kerestem i2c slave assembly kódot, így nem kell nekem megírnom.
-
Atamano
csendes tag
válasz
fpeter84 #10893 üzenetére
Ha Alu által linkelt cikket figyelembe vesszük,akkor lehet kelleni fog az az ellenállás,mert kb 50-60 cm hosszúak lennének azok a kábelek.
DHT22-vel szeretnék mérni pár dolgot és a menü eléréshez,adattároláshoz szükséges lesz pár gomb.
Egy mezei LCD 2004 I2C lenne a kijelző. -
Alu
senior tag
válasz
fpeter84 #10888 üzenetére
A belső felhúzóellenállással kapcsolatban kis érdekesség.
-
zsolti_20
senior tag
válasz
fpeter84 #10859 üzenetére
Valószínűleg ezeke az elektromos cigibe való 18650akkumlátort fogom választani, mert kapni hozzá foglalatot is arduinohoz. 2-2párhuzamba majd ezeket sorosan, így megkapom a kb 7.4v-ot ami mehet a vin lábra. Ez a láb 5-12v között bármit képes szabályozni úgy hogy 3.3v lábon fixen jöjjön ez a feszültség?
-
Janos250
őstag
válasz
fpeter84 #10859 üzenetére
Az ebay-en vett mindenféle kék, piros akkuk felét, negyedét, tizedét tudták, mint ami rájuk volt írva.
Viszont ebből a szériából vettem már háromszor is:
https://www.banggood.com/4PCS-NCR18650B-3_7V-3400mAh-Protected-Rechargeable-Lithium-Battery-p-90989.html?cur_warehouse=CN
Legalább 3200 mAh-t mind tud, mérve, és protected. Nem olcsó, de nekem bevált. -
zsolti_20
senior tag
válasz
fpeter84 #10855 üzenetére
Ez így egy nagyon jó járható út, ha több mint 5v fesz esetén a VIN lábra köthető. Ha sajnos csak ennyit tudnak akkor fölösleges megvenni. Lehet joban járnék két db telefon akkumulátorral, amik tudnak 3000mah-t. Igen jó lett volna tölteni USB-ről de ez most csupán opcionális lehetőségként szerepel.
A nyák egy oldali és csak úgy férne be a TP4056 modul ha "lógna" a levegőben. Bepakoltam már elég sok alkatrészt, így csak újra tervezés esetén férne el. Nincs túl terhelve a nano 3.3v lába, csak azért kaptam 2.5v-os, mert tesztelés képpen 3.3v feszültséget az 5V lábára csatlakoztattam, ekkor mértem a 3.3v lábnál 2.5-öt. Gondolom mivel nem 5v-ot kapott a 5v lábon, ezért ennyivel kevesebbet is tudott kihozni a 3.3v lábon.
Most látom ez a TP4056 modul nem is furatszerelt alkatrész. Akkor ez így simán megoldható, elférne az akkumulátor mellett.
-
-
zsolti_20
senior tag
válasz
fpeter84 #10840 üzenetére
Sajnos kikell hagynom a TP4056 modult, met akárhogy próbálom nem fér már rá a nyákra, mert kicsit kicsi lett.
Így az eredeti tervhez vissza térve, mondjuk 3xAA akkumulátort ha az 5V lábra csatlakoztatok, a többi fogyasztó mehet a 3.3v-ra? Igazából már a 4xAA sem fér el sajnos.
-
-
-
Teasüti
nagyúr
válasz
fpeter84 #10736 üzenetére
Csak hangosan gondolkodom:
Működne vajon a futás közbeni Serial inicializáció? Egyes lapoknál lehet mux-olni a gpio lábakat (esp32), ott futás közben váltogatni melyikre írjon ugyanaz az UART periféria.
Arduino lapokon nincs Mux úgy tudom, ott Software Serial-lal lehet befogni más gpio lábakat erre. Nem tudom a könyvtár tud-e kezelni több virtuális portot is.
Esetleg külső hardver jöhetne még szóba vmilyen shift regiszteres módon, ami az SPI-hez hasonlóan váltogatja az eszközöket. -
Tankblock
aktív tag
válasz
fpeter84 #9839 üzenetére
Hello,
Találtam itthon egy Wemos D1 hez tartozó SD kártya foglalatot, sztem ezzel fogok protozni.
A problematica ott van, hogy amit találtam pédát ott vagy 6+2 láb kell ezen meg 4+2 táp van.....Minden vonalat kézzel kell 10k val felhúzni.. Meglássuk... ma sem értem rá...
-
-
fpeter84
senior tag
válasz
fpeter84 #9812 üzenetére
okkk, rá is jöttem hogy hol néztem be a dolgot... A reset az RTC-t is nullázza, tehát reset után normális ha nincsen idő tárolva... Viszont a deep sleep-ből visszatérve van: összeollóztam a SimpleTime és ExternalWakeUp példákat, így egy külső triggerre ébredve már egyből rendelkezésre áll az idő - bár még valami bogár van, valószínűleg a timezone beállítást akkor is elveszti mert -2 órával éled, de a másodperc/perc egyértelműen mutatja hogy nagyvonalakban rendben van, működik az RTC hardver deep sleep módban...
szerk: ez is megvan... az esp32-hal-time.c-ből át kellett ollózni a setTimeZone-t a tesztprogramba és meghívni ahogy a configTime is teszi: setTimeZone(-gmtOffset_sec, daylightOffset_sec);
Failed to obtain time
Connecting to xxx .. CONNECTED
Tuesday, October 16 2018 00:16:35
Going to sleep now
ets Jun 8 2016 00:22:57
rst:0x5 (DEEPSLEEP_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:808
load:0x40078000,len:6084
load:0x40080000,len:6696
entry 0x400802e4
Tuesday, October 16 2018 00:16:42
Connecting to xxx .. CONNECTED
Tuesday, October 16 2018 00:16:43
Going to sleep nowugyan arra még nem jöttem rá hogy miért minusz a gmtOffset_sec miközben mi a GMT+1 időzónában vagyunk, de kicsire nem adunk, nagy meg nem számít
-
-
-
DrojDtroll
veterán
válasz
fpeter84 #9763 üzenetére
A robot beállítása és futtatott program alapján nagyon pontosan kiszámolom a koordinátákat. Mozgás közben folyamatosan mérem és logolom az elfordulást és a lineáris gyorsulást. A mért adatokból kiszámolom azt hogy ténylegesen, hol is van a fej, és ezt hasonlítom az elvártakhoz.
Ezt szeretném megvalósítani.
-
cont
újonc
válasz
fpeter84 #9771 üzenetére
Nem, ezt a beállítást a szerző javasolta, mert kompatíbilis az SSD1963-mal. De az SSD1963-at is beállítottam a programban, ugyanaz a jelenség.
A legutolsó próba ezzel a beállítással futott:
// UTouch_ButtonTest (C)2010-2014 Henning Karlsen
// web: http://www.henningkarlsen.com/electronics
//
// This program is a quick demo of how create and use buttons.
//
// This program requires the UTFT library.
//
// It is assumed that the display module is connected to an
// appropriate shield or that you know how to change the pin
// numbers in the setup.
//
#include <UTFT.h>
#include <UTouch.h>
// Initialize display
// ------------------
// Set the pins to the correct ones for your development board
// -----------------------------------------------------------
// Standard Arduino Uno/2009 Shield : <display model>,19,18,17,16
// Standard Arduino Mega/Due shield : <display model>,38,39,40,41
// CTE TFT LCD/SD Shield for Arduino Due : <display model>,25,26,27,28
// Teensy 3.x TFT Test Board : <display model>,23,22, 3, 4
// ElecHouse TFT LCD/SD Shield for Arduino Due : <display model>,22,23,31,33
//
// Remember to change the model parameter to suit your display module!
//UTFT myGLCD(ITDB50,38,39,40,41);
UTFT myGLCD(SSD1963_800,19,18,17,16);
// Initialize touchscreen
// ----------------------
// Set the pins to the correct ones for your development board
// -----------------------------------------------------------
// Standard Arduino Uno/2009 Shield : 15,10,14, 9, 8
// Standard Arduino Mega/Due shield : 6, 5, 4, 3, 2
// CTE TFT LCD/SD Shield for Arduino Due : 6, 5, 4, 3, 2
// Teensy 3.x TFT Test Board : 26,31,27,28,29
// ElecHouse TFT LCD/SD Shield for Arduino Due : 25,26,27,29,30
//
UTouch myTouch( 6, 5, 4, 3, 2);
// Declare which fonts we will be using
extern uint8_t BigFont[];
int x, y;
char stCurrent[20]="";
int stCurrentLen=0;
char stLast[20]="";
/*************************
** Custom functions **
*************************/
void drawButtons()
{
// Draw the upper row of buttons
for (x=0; x<5; x++)
{
myGLCD.setColor(0, 0, 255);
myGLCD.fillRoundRect (10+(x*60), 10, 60+(x*60), 60);
myGLCD.setColor(255, 255, 255);
myGLCD.drawRoundRect (10+(x*60), 10, 60+(x*60), 60);
myGLCD.printNumI(x+1, 27+(x*60), 27);
}
// Draw the center row of buttons
for (x=0; x<5; x++)
{
myGLCD.setColor(0, 0, 255);
myGLCD.fillRoundRect (10+(x*60), 70, 60+(x*60), 120);
myGLCD.setColor(255, 255, 255);
myGLCD.drawRoundRect (10+(x*60), 70, 60+(x*60), 120);
if (x<4)
myGLCD.printNumI(x+6, 27+(x*60), 87);
}
myGLCD.print("0", 267, 87);
// Draw the lower row of buttons
myGLCD.setColor(0, 0, 255);
myGLCD.fillRoundRect (10, 130, 150, 180);
myGLCD.setColor(255, 255, 255);
myGLCD.drawRoundRect (10, 130, 150, 180);
myGLCD.print("Clear", 40, 147);
myGLCD.setColor(0, 0, 255);
myGLCD.fillRoundRect (160, 130, 300, 180);
myGLCD.setColor(255, 255, 255);
myGLCD.drawRoundRect (160, 130, 300, 180);
myGLCD.print("Enter", 190, 147);
myGLCD.setBackColor (0, 0, 0);
}
void updateStr(int val)
{
if (stCurrentLen<20)
{
stCurrent[stCurrentLen]=val;
stCurrent[stCurrentLen+1]='\0';
stCurrentLen++;
myGLCD.setColor(0, 255, 0);
myGLCD.print(stCurrent, LEFT, 224);
}
else
{
myGLCD.setColor(255, 0, 0);
myGLCD.print("BUFFER FULL!", CENTER, 192);
delay(500);
myGLCD.print(" ", CENTER, 192);
delay(500);
myGLCD.print("BUFFER FULL!", CENTER, 192);
delay(500);
myGLCD.print(" ", CENTER, 192);
myGLCD.setColor(0, 255, 0);
}
}
// Draw a red frame while a button is touched
void waitForIt(int x1, int y1, int x2, int y2)
{
myGLCD.setColor(255, 0, 0);
myGLCD.drawRoundRect (x1, y1, x2, y2);
while (myTouch.dataAvailable())
myTouch.read();
myGLCD.setColor(255, 255, 255);
myGLCD.drawRoundRect (x1, y1, x2, y2);
}
/*************************
** Required functions **
*************************/
void setup()
{
// Initial setup
myGLCD.InitLCD();
myGLCD.clrScr();
myTouch.InitTouch();
myTouch.setPrecision(PREC_MEDIUM);
myGLCD.setFont(BigFont);
myGLCD.setBackColor(0, 0, 255);
drawButtons();
}
void loop()
{
while (true)
{
if (myTouch.dataAvailable())
{
myTouch.read();
x=myTouch.getX();
y=myTouch.getY();
if ((y>=10) && (y<=60)) // Upper row
{
if ((x>=10) && (x<=60)) // Button: 1
{
waitForIt(10, 10, 60, 60);
updateStr('1');
}
if ((x>=70) && (x<=120)) // Button: 2
{
waitForIt(70, 10, 120, 60);
updateStr('2');
}
if ((x>=130) && (x<=180)) // Button: 3
{
waitForIt(130, 10, 180, 60);
updateStr('3');
}
if ((x>=190) && (x<=240)) // Button: 4
{
waitForIt(190, 10, 240, 60);
updateStr('4');
}
if ((x>=250) && (x<=300)) // Button: 5
{
waitForIt(250, 10, 300, 60);
updateStr('5');
}
}
if ((y>=70) && (y<=120)) // Center row
{
if ((x>=10) && (x<=60)) // Button: 6
{
waitForIt(10, 70, 60, 120);
updateStr('6');
}
if ((x>=70) && (x<=120)) // Button: 7
{
waitForIt(70, 70, 120, 120);
updateStr('7');
}
if ((x>=130) && (x<=180)) // Button: 8
{
waitForIt(130, 70, 180, 120);
updateStr('8');
}
if ((x>=190) && (x<=240)) // Button: 9
{
waitForIt(190, 70, 240, 120);
updateStr('9');
}
if ((x>=250) && (x<=300)) // Button: 0
{
waitForIt(250, 70, 300, 120);
updateStr('0');
}
}
if ((y>=130) && (y<=180)) // Upper row
{
if ((x>=10) && (x<=150)) // Button: Clear
{
waitForIt(10, 130, 150, 180);
stCurrent[0]='\0';
stCurrentLen=0;
myGLCD.setColor(0, 0, 0);
myGLCD.fillRect(0, 224, 319, 239);
}
if ((x>=160) && (x<=300)) // Button: Enter
{
waitForIt(160, 130, 300, 180);
if (stCurrentLen>0)
{
for (x=0; x<stCurrentLen+1; x++)
{
stLast[x]=stCurrent[x];
}
stCurrent[0]='\0';
stCurrentLen=0;
myGLCD.setColor(0, 0, 0);
myGLCD.fillRect(0, 208, 319, 239);
myGLCD.setColor(0, 255, 0);
myGLCD.print(stLast, LEFT, 208);
}
else
{
myGLCD.setColor(255, 0, 0);
myGLCD.print("BUFFER EMPTY", CENTER, 192);
delay(500);
myGLCD.print(" ", CENTER, 192);
delay(500);
myGLCD.print("BUFFER EMPTY", CENTER, 192);
delay(500);
myGLCD.print(" ", CENTER, 192);
myGLCD.setColor(0, 255, 0);
}
}
}
}
}
} -
Bazs87
tag
válasz
fpeter84 #9756 üzenetére
elég hülye hibába futottam:
az esp8266 mintaprojekt blink mintaprogramjával próbálkoztam. A videón szereplő beállításokat használva.
A gond, h valamiért a lábkiosztás nem passzolt és nem villogott a led (mert hát mire is vár ilyenkor az ember)feltöltötte hiba nélkül, csak ugye nem villogott szerencsétlen
a videó után rámértem a lábra...persze, hogy megyköszönöm a felhomályosítást
-
csubuka
addikt
válasz
fpeter84 #9756 üzenetére
Nekem ugyanilyen board-om volt kb. És alapból ment Arduino IDE-vel. Persze lehet, hogy más FW-t küldtek, de a hátulján ugyanez a 9600 baud rate felirat volt, azzal meg aztán hibát dobott az Arduino IDE. A jó baud rate-el meg azonnal ment további mókolás nélkül.
*Bocsi persze a boards manager-es állítgatások kellenek igen a működéshez.
-
csubuka
addikt
válasz
fpeter84 #9745 üzenetére
Értem, köszönöm a kiegészítést!
Hmm, nekem van felhasználóm a fizetős browsercalls-ra. Az elérhető neten. nem tudom, hogy mennyiben lehetne használni ezen megoldáshoz... Nem kell, hogy ingyenes legyen, elvégre a pár dolláros keretem havi egy riasztással (3 helyre küldött SMS-el) évekig kitart.
-
csubuka
addikt
válasz
fpeter84 #9740 üzenetére
Köszönöm szépen!
"Az említett modulok mind tudják a hanghívást, sms fogadást és küldést, a többi csak extra ezen felül a jövőre nézve!"
Szuper, egy olyat lehet, hogy beszerzek akkor.
"Nekem egy MR3220 V1 a routerem (egyelőre, bár egy Xiaomi MIR3G már be van tárazva hogy leváltsa), és nálam is extroot-al pendrive adja a tárhelybővítést. A szépséghiba, hogy a mai openwrt már túl kövér, a 4MB-ba épp csak cipőskanállal fér bele és már nincsen hely az USB támogatás utólagos telepítéséhez, de szerencsére ImageBuilder-el előre belerakva még éppen elvan minden ami kell az extroot-hoz..."
Ettől az image builder-es dologtól féltem kissé.
"De ha van net a router alatt és csak ezt a vezérlést végzi, akkor erre sincsen szükség! Minimál rendszerrel bebootol, GPIO lába van elég (IO kártya se kell), egyszerűen crontab-ba beütemezhető hogy kapcsolgassa a GPIO lábait és kész!"
Ezt a crontab-ot úgy érted, hogy a routeren futó Unix-szerű akármilyen rendszer tudná a router kimenetét kapcsolgatni? Szóval ennek a routernek van kapcsolható kimenete?
(#9742) fecske13:
Köszönöm szépen az ismételt választ!
Értem, szuper! Viszont akkor a riasztó kimenetének felprogramozása is egy kihívás lesz, végig kell nyálazni a leírását...
-
Cool Face
aktív tag
-
csubuka
addikt
válasz
fpeter84 #9689 üzenetére
Köszönöm szépen az elemzést!
Mélyebben beleásom magam majd a rendszer működésébe, hogy mi is a valós tényállás. De ez alapján legalább tudok majd keresni, hogy hogyan kéne mégis.
(#9695) Janos250: Köszönöm szépen Neked is! Eddig ott vagyok, hogy megállapítottam a típust. A vezérlő egy DSC PC1616H. Azt kéne, hogy ha eldönti, hogy riaszt, akkor SMS-t küldeni. De mondjuk, ha a beltérinek meghal az akksija (és áramszünet van), akkor is riasztás van amúgy, ami miatt meg begerjednek a szomszédok, ha pl nyaral az ember. És ilyenkor is jó lenne erről tudni, hogy egy segítő embert beszervezhessünk ennek elhárítására. Így lehetséges a legjobb lenne a sziréna megszólalására triggereltetni az SMS-küldést.
Belenéztem ugyan a dokumentációjába egyelőre a vezérlőnek, de elég hosszú
Egyelőre erre nem biztos, hogy lesz időm, hogy átrágódjak rajta és kiderítsem hogy a legcélszerűbb sima "digital input"-ra valamilyen módon bevinni azt, amikor megszólal a sziréna.
*Kicsit okosodnom kell még, hogy a vezérlő panelon mi történik azért, mert ahogy fpeter84 írta a 12V-os szirénához több hardveres építés kell, hogy az Arduino/(ESP vagy akármi más) oda kapcsolódhasson.
-
MrChris
nagyúr
válasz
fpeter84 #9688 üzenetére
Áram nélkül se lehet elforgatni. Éppen azt próbálgatom, hogy vajon kihagy e lépéseket a motor. Arduinóról kapja az 5V-t, pont így ahogy a képen van. Ok, akkor majd valahogy közvetlen a powerbankról fogom táplálni, mert lehet, hogy NANO lesz beépítve.
aryes: Gondot most nem jelent, csak olyan furcsa, hogy ennyire meleg, kézbe azért lehet venni.
34ms-onként léptetem egyet, így jött ki a matek. Ezt pedig most találtam, épp ilyesmit készítenék. Méretétől függ a mozgatás sebessége.Hogyan lehet a hosszú, vagy béna gombnyomást kikerülni? Ez a delay-es késleltetés nagyon nem tetszik, főképp, ha elkapom a ritmust.
-
ecaddsell
aktív tag
válasz
fpeter84 #9675 üzenetére
A kulcs az amit korábban is írtam:
GPIO.out_wlts = <set for lower 32 pins>
GPIO.out_wltc = <clear for lower 32 pins>
GPIO.out1_wlts = <set for higher pins>
GPIO.out1_wltc = <clear for higher pins>Persze ügyesen is kell maszkolni, hogy csak azokat a pineket módosítsd amit kell, ill. ha jól értem két írás kell a set ill. clear miatt (közte meg kizáró vagy/bit invertálás).
-
ecaddsell
aktív tag
válasz
fpeter84 #9637 üzenetére
"azt keresem hogy egy adott LCD-t mivel tudnék a létező leggyorsabban meghajtani"
HW referencia regiszterekkel:
https://www.espressif.com/sites/default/files/documentation/esp32_technical_reference_manual_en.pdfMivel az EP32 nem tartalmaz kijelzőt (a kijelzős board-ok is tipikusan valamilyen soros protokollal vannak hozzákötve tip. SPI) ezért soros protokol esetén HW SPI-t kell használni, vagy ha direktbe van a GPIO pinekhez kötve a kijelző akkor a pineket írva.
A direct GPIO-ra meg ezt a fórumbejegyzést találtam, szóval mennie kellene.
Most, hogy látom, így esetleg több pint is lehet írni (remélhetőleg tökéletesen egyszerre), lehet engem is fog érdekelni a dolog...
Viszont ha jól látom ennek a sebessége a HW SPI alatt van (valamiért), szóval a soros protokolhoz képest nem biztos, hogy akkora a nyereség.
Még 1 link:
GPIO.out_w1ts = (1 << TogglePin);
GPIO.out_w1tc = (1 << TogglePin); -
Janos250
őstag
válasz
fpeter84 #9637 üzenetére
Na, a gyanúm beigazolódni látszik:
gpio_reg.h file
#define GPIO_ENABLE_W1TC_REG (DR_REG_GPIO_BASE + 0x0028)A soc.h fájlban vannak a base címek:
#define DR_REG_GPIO_BASE 0x3ff44000Vagyis a GPIO_ENABLE_W1TC_REG a 0x3ff44028 egy CÍM.
Tehát:
*((volatile uint32_t *) (GPIO_ENABLE_W1TC_REG)) = .... ;
vagy:
*((volatile uint32_t *) (DR_REG_GPIO_BASE + 0x28)) = .... ;Próbáld ki!
Egyébként, ha már használtuk a rendszerben az adott perifériát, akkor a "mindenfélék" be vannak állítva, lehet közvetlenül írni, olvasni a regisztereket, minden faxni nélkül.
-
Janos250
őstag
válasz
fpeter84 #9637 üzenetére
Mégegyszer átfutva a kérdésed:
a GPIO_ENABLE_W1TC_REG gyanúm szerint egy adott regiszter CÍME. Általában úgy szokták az ilyesmit definiálni, hogy egy base + az offset. Próbáld kiíratni a GPIO_ENABLE_W1TC_REG-et, és megvan a címed, próbálj oda a számmal megadott címre írni, a követlen memória írásra szokásos módon. -
Janos250
őstag
válasz
fpeter84 #9637 üzenetére
Itt is megy a közvetlen regiszter írás. A dolog annyival macerásabb, hogy ugyanaz a regiszter több mindenre is használható, ezért van egy mátrix, amiben meg kell adni, hogy mire akarjuk használni. Egyes funkciók (pl. UART) "közvetlenül" (bypass) érik el a regisztereket, mások meg egy mátrixon keresztül. Pl. a közvetlen eléréshez ha nem jelöljük ki, órajelet sem kap az a hardver rész, ami az adott funkciót végzi, és a regisztereket sem tudjuk írni, illetve olvasásánaál fals értéket kapunk. Valamikor tavaly bütyköltem vele, akkor néztem, használtam. Ha jól emlékszem, a kulcsszavak GPIO matrix, és IO_MUX. Pontosan már nem emlékszem, valahova leírtam, de hirtelenjében nem találom, és a héten nagyon el vagyok havazva.
Egyébként ez a mátrixos dolog teszi lehetővé, hogy bármelyik GPIO-t bármelyik lábra teheted. -
-
fpeter84
senior tag
válasz
fpeter84 #9613 üzenetére
Addig vadásztam a regiszterek előtte-utána állapotát hogy sikerült megfejtenem a hiba okát, és biztos vagyok benne hogy ez valamiféle bug lehet... A PIO Status Register-ből (PIO_PSR) kiderült hogy az RX láb újra inicializáláskor átvált PIO letiltott / peripheral active módba, de a TX láb valamiért PIO módban ragad... A PIO Controller PIO Disable Register (PIO_PDR) manuális átbökésével peripheral active módba ismét tudja használni az USART a TX lábát is!
-
vargalex
félisten
válasz
fpeter84 #7454 üzenetére
Én is gondolkodtam a deep-sleep-el megvalósított energiatakarékos hőmérő megoldasomnál, hogy a DS18B20-nak valamelyik GPIO-ról adok VCC-t, de egyrészt egyébként is minimális a fogyasztása, másrészt időm nem volt még utánaolvasni/tesztelni, hogy mennyivel kellene előbb feszt adni neki, hogy a mért érték kinyerhető legyen belőle. Ez utóbbi idő bármekkora is, sokat vesztenék azzal, hogy ezalatt nem deep sleep-ben van az ESP8266. Így én ennél a projektnél elvetettem.
Persze, ha nem a minél alacsonyabb fogyasztás a cél akkor abszolút korrekt megoldásnak érzem én is, ha az esp8266 által biztosított áramerősség elegendő. -
gyapo11
őstag
válasz
fpeter84 #7285 üzenetére
OK, majd egyszer eljátszok ezzel, annyira nem vészes. Meg az az érdekes, hogy csak akkor panaszkodott a sebességre, amikor az impulzus szélesség figyelését állítottam be triggernek, ha le- vagy felfutó élet, akkor semmi baja nem volt a 24 MHz-cel.
27 éve még én írtam programot a c64-re, amivel egy pc billentyűzet jeleit nézegettem, hogy egy z80 panelre rá tudjam kötni. Azért mennyivel könnyebben boldogulnak a mai barkácsolók. -
-
gyapo11
őstag
válasz
fpeter84 #7281 üzenetére
Usb3-as hubon volt, más forgalom nem volt azon a porton. Hmm, azért majd kipróbálom, van két usb2-es portja is a notebooknak, hogy melyik root melyik nem azt nem tudom.
Nekem úgy logikus adott szélességű impulzus keresése, hogy addig át se töltök semmit az usb-n, amíg a keresett impulzus be nem érkezik az eszközbe. Először átküldöm a szélességi és szint adatokat, aztán figyelje a kis processzor. De lehet, hogy átszív mindent az usb-n, és a pc-s program dönti el, hogy kezdődhet-e a rögzítés. És mivel ez a képesség csak az újabb programban van, ez arra utal, hogy utóbbi történik. -
-
válasz
fpeter84 #7156 üzenetére
Tápfeszültség témához off: nemrég teszteltem, hogy lefelé meddig lehet menni. Kínai klón UNO lap +5V-ra két ceruzaelemről vidáman üzemel, sőt, két közepesen töltött ceruzaakksiról is, ami 2,8V.
On: szeretnék egy UNO és egy Wemos d1 mini lapot összekötni, i2c-n megy majd a kommunikáció. A Wemos az UNO +5V-ról kapja a tápfeszültséget, de ugye az esp 3,3V-ról üzemel, amit a wemos onboard regulátorral állít elő magának az 5V-ból. Van értelme a 3,3V-ot is közösíteni a két lap közt? -
dave0825
őstag
válasz
fpeter84 #7152 üzenetére
Köszi. Fix 5V-ot szeretnék használni (nem autóba lesz). Nem eredeti, eBay-es. Több helyen is láttam, hogy mehet a +5V-ra és megnéztem, oda kötöttem én is még régebben.
"The Arduino Nano can be powered via the Mini-B USB connection, 6-20V unregulated external power
supply (pin 30), or 5V regulated external power supply (pin 27). The power source is automatically selected
to the highest voltage source."Írják egyébként a hivatalos oldalon, hogy 5V a működési feszültség, 6-20V a limit, 7-12V az ajánlott, szóval ezek alapján szerintem mehet a +5V-ra a fix. 5V-os táp. Igaz, nem írtad, hogy nem.
Új hozzászólás Aktív témák
Hirdetés
- BESZÁMÍTÁS! HP ZBook 15 G6 munkaállomás - i7 9850H 16GB DDR4 RAM 512GB SSD Quadro T2000 4GB WIN10
- Telefon felvásárlás!! iPhone 15/iPhone 15 Plus/iPhone 15 Pro/iPhone 15 Pro Max
- HATALMAS AKCIÓK! GARANCIA, SZÁMLA - Windows 10 11, Office 2016 2019 2021,2024, vírusírtók, VPN
- Telenor 5G Indoor WiFi Router (FA7550) + töltő (bolti áruk 100.000Ft)
- Beszámítás! Apple Watch SE 2024 44mm Cellular okosóra garanciával hibátlan működéssel
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged