Fórum témák
» Több friss téma |
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Serial.println(double(Thermister(analogRead(1)))); helyett:
Serial.println((signed int)((Thermister(analogRead(1)+0.5)))); A +0.5 a kerekítés miatt kell. Mennyire pontos a számított érték 20 és 90fokC környékén? Valahogy jó hőkontaktusba kellene hozni mondjuk a multi hőmérőjével. Egy pici alu bordát melegíteni, aminek a furatába kellene bedugni a multi hőmérőjét és az NTC-t is. Ha van kedved. A hozzászólás módosítva: Márc 23, 2020
Bakman a konkrét kérdésedre válaszolt, de az F() résznek is van jelentősége, valamint a backslash sok más dolgot is jelenthet. Javaslom a "60 nap alatt Arduino ingyenes tanfolyam" elvégzését (google-ba mehet az idézőjel közötti rész), valamint a konkrét témában az "escape sequence"-nek nézz utána.
Az F azt jelenti, hogy ne a RAM-ba tárolja a szöveget, hanem a progmem-et használja fel (mindig csak az a szöveg lesz a memóriában tárolva, ami éppen kell). F nélkül a programodban levő összes Serial.print és hasonló függvényeknek átadott szöveg a RAM-ban tárolódna, és az gyorsan elfogyna.
Mivel a Serial.print függvény bemeneti paramétere szabályozva van, ezért a kiírandó szövegnek " (idézőjelek) között kell lenniük. Akkor van gond, ha pont idézőjelet akarsz kiiratni. Ilyenkor a speciális karakter párt használjuk, ami visszaper (\), és utána az idézőjel ("). Így: Serial.print("\"");. Tehát az idézőjelek között található: \" , amiből csak ez marad: ". Ugyanez vonatkozik a ' (felsővonás)-ra is, a visszaperre önmagára is. Tehát Serial.print("\\"); -> \ Serial.print("\'"); -> ' Ez a Serial.print logikája. Lehetséges, hogy panaszkodni fog a fordító, mert ezek csak egy karakterek, egy karaktert pedig felső aposztrófok közé (') kell írni. Tehát Serial.print('\\'); -> \ . Ki kell próbálni. Magyarul nem hiszem, hogy találsz segédletet. Én is google segítségével frissítettem fel az emlékeim, ezekkel a keresőszavakkal: "arduino serial print how to print special characters". A hozzászólás módosítva: Márc 24, 2020
Este lemérem hogy mennyire pontos.
Így módosítottam, most jó:
Sziasztok!
Adott egy ébresztőóra, aminek a kijelzését egy shift regiszter vezérli, a kód pedig Timer1 megszakításban kb. 2ms-kénk fut le. Az időmérést a Timer2 végzi aszinkron módban óra kvarcról. Az ébresztés során kiadott hangot pedig egy a főprogramból meghívott “void beep()” hivatkozás generálja, ami a főprogramban fut le. A probléma az, hogy ahogyan változtatom a kijelző frissítési frekvenciáját, változik a kiadott hang magassága, illetve a főprogram futási sebessége. Konkrétan, ha a Timer1 megszakítás 1ms-ként érkezik, akkor csökken a hangmagasság és lassul a program. A frissítési frekvencia csökkentésével fordítva. Órajelnek a belső 8MHz van beállítva. Az én gondolatom erről a problémáról az, hogy túl gyakran érkezik a megszakítás ahhoz, hogy a főprogram megfelelő sebességgel tudjon futni és a lassabb futási sebesség okozza a frekvencia csökkenést, de erősítsetek meg vagy cáfoljatok meg benne. Illetve, ha nem ez a gond, akkor mitől áll elő ez a jelenség? Köszönöm előre is a válaszokat.
Egy kérdést csak egyszer, egy helyre teszünk fel!
Kerekítés kimaradt. Így 27.95fokC-ra 27-et fog kiírni!
Ha megszakítás érkezik, akkor értelemszerű hogy megszakítja a főprogram futását! Minél többször érkezik, annál jobban észrevehető ez. Ahogy én látom, egyszerűen tedd hardveressé a beep-et (csipogóval), vagy kezeld azt is megszakításból! Itt ugyanis már tudod szinkronizálni az eltelt időhöz, nem fog a futástól függeni! Fontos, hogy minden megszakítás minél rövidebb ideig tartson, és csak annyiszor hívd meg ahányszor az tényleg szükséges! A főprogram a vesztese a megszakításoknak, szóval időkritikus kódot ide nem teszünk!
A hozzászólás módosítva: Márc 24, 2020
A hardveres csipogóval az a gond, hogy van más funkciója is az órának, ahovam más hangmagasság kell. Összesen 5-6 külömböző frekvencia megy a csipogóra. Megszakításból nem igazán tudom, hogyan tudnám vezérelni. Timer0 - delay, timer1 - kijelző, timer2 - időmérés. Több számlálóm meg nincsen. A timer2 megszakítás másodpercenként egyszer fut le. A timer1-nek meg minél gyakrabban kellene, hogy a kijelző ne villogjon.
Csak ötlet: Ha a timer2 másodpercenként fut, akkor vedd el tőle a feladatot, és a timer1-ből ki tudod számlálni hogy mikor telt le az a másodperc! Így a timer2 felszabadult, lehet csipogtatni!
Szerk.: Hogy hogyan azt ne kérdezd, kód nélkül nem tudok többet segíteni A hozzászólás módosítva: Márc 24, 2020
Ez is felvet egy két újabb problémát, de ötletnek nem rossz. Bár eszembe jutott, hogy teljesen újraépítem a hardvert és a kijelzést nem shift regiszerrel, hanem TM1637 ic-vel hajtom meg. Ezt is megszakításból kellene vezérelni, mert a főprogram sok while és for ciklust tartalmaz, ami megakasztaná az egészet, de a megszakításban levő kód jelentősen egyszerűsödne.
A hozzászólás módosítva: Márc 24, 2020
Esetleg ha nem túl bonyolult a főprogram és van rá idő, akkor ott is csinálhatja a képfrissítést.
A timmer1 8Mhz kvarcról nem fog olyan pontos lenni, mint egy órakvarcról menő időalap. Amúgy a főprogramban azt figyelheted, a timmer2 mikor vált valamelyik bitjén, Kevésbé időkritikus időzítésekhez jó lehet. ( Szegmensek közötti váltogatás) A timmer1 megmarad hang előállításhoz.
Pic esetén csináltam olyat, felprogramoztam PWM-nek, Így két megszakítást is ki lehet belőle csikarni. Egyet mikor letelik, egyet meg mikor szintet vált. A szintváltós jó lehet a szegmensek közötti váltogatáshoz. Mindig újratöltve a hasonlító regisztert a következő váltási időtartammal, a letelik meg jó az óra időalapjának változatlanul. Az hogy ezt arduinón hogy kell megcsinálni, ne kérdezd. A lehetőség szerintem benne van. Ezen a nyomon továbbmenve, ha minden kijelző léptetésnél egy/több számlálót léptetsz, ezek delaynak is tökéletesek. Késleltetés kell? Akkor beírod a számlálóba a kívánt értéket, a kijelző rutin elrendezi a csökkentést, ha nulla, akkor egy biten jelzi, csak azt kell figyelni, a főprogram mehet folyamatosan. A kijelző kezelés/gomb kezelés /késleltetés a timmer2 megszakításaira bízható, ha a PWM-es dolog működik.
Üdv!
Hogy tudom legegyszerűbben kiíratni TM1637-re egy RTC-ben tárolt időt? Csak óra és perc kellene, ha lehet 1db nyomógombbal jó lenne ha állítható lenne.
Usane arra gondolt (csak fél kérdezni ), hogy ide "pár dolog" még kellhet.
Valamilyen programozási tapasztalatod van? Ugyanis ezt a feladatot pl. mikrovezérlő segítségével lehetne a legjobban megoldani (lásd: Arduino). A hozzászólás módosítva: Márc 24, 2020
Nagyon kezdő vagyok a témába, de természetesen arduinoval gondoltam, egy nano-t gyomrozok most nonstop Az RTC-be sikerült beálltani az időt, próbáltam több kódot is módostani(hogy megjelenjen a TM1637-n), mert pont olyat nem találtam amilyen kellene, de már nem nagyon van ötletem.
Hány számjegyű a kijelződ? Annyiszor 100-150 Hz kell frissítési frekvenciának. Akkor elvileg nem igazán látszik a villogás. Az alatt villog, az felett meg felesleges erőforrás pocsékolás, melegedés.
Akkor bizony itt most olvasni kell! (Jellemzően angolul...)
Mivel az eszközt nem ismerem, legalább a programot mutasd, ami szeretné kiíratni a kijelzőre az adatot!
Igen, többek között arra, is mennyire tudod az arduinot programozni. Csak a kijelzőt nem tudod, vagy a teljes program kellene?
Aztán pl. milyen RTC? Pontosan hogy képzeled a működését, stb. Gondolatébresztőnek: Bővebben: Link Szerk: A kijelzőhöz könyvtár is van. Arduinora lassan már atombombához is van könyvtr csak meg kell keresni. Látom közben az RTC-t már bűvölöd. A hozzászólás módosítva: Márc 24, 2020
A csipogót miért nem hardveres pwm-el hajtod?
Szia!
Idézet: „Hány számjegyű a kijelződ? Annyiszor 100-150 Hz kell frissítési frekvenciának.” Dehogy kell ! Ha a képfrissítési frekvencia 50 Hz, akkor már nem villog zavaróan ( pl. régi TV-k!)! Azaz egy 4 számjegyes kijelző 1 teljes frissítése 20ms, ami kijelzőként 5 ms-ot jelet, azaz 200 Hz-et! Adott esetben még ennél lassabbal is lehet, ami a kijelzőtől, dobozolástól és a felhasználó érzékenységétől függ, de az 50 Hz egy jó érték és nem igazán terheli meg a processzorokat ( ha nem csinál más hülyeséget ! ) !
Nem nagyon tudom programozni, azért próbáltam módosítani a neten talált kódokat. Az RTC egy DS3231. A kijelzőhöz van könyvtár. Annyit tudtam elérni, hogy az RTC be van állítva, amit soros porton látok is(óra, perc), meg annyit hogy vagy a percet vagy az órát mutatja. A nyomógomb részével nem próbálkoztam, nem is tudom hogy kezdjek hozzá. Működését úgy képzeltem, hogy 5 másodpercig nyomva tartom a gombot, akkor elkezd villogni az óra. Ekkor tudnám léptetni. Ha pl 3 másodpercig nem nyomom meg a gombot, akkor a perc kezd villogni és léptethető, újabb 3 másodperc nyugalom után alaphelyzetbe áll. Mellékelem a legközelebb áll kódot, de így soros porton működik. (Remélem jól mellékeltem )
Sziasztok. Volna egy nagy problémám, a nagy arduinozásokban és probálgatásokban valamit sajnos tehettem az arduino unommal.Fel tudom írni rá a programokat, világít minden rendeltetés szerüen, semmi hiba a szoftver kliensben de sajnos a pwm kimeneteken nem jön ki semmi. Probáltam Atmegát cserélni de ugyan az a hiba. A 13 lábon lévő led villogtatása megy hogy ha szeretném ,de azon kivűl semmi. Ötleteket előre is köszönök szépen.
Idézet: Ha DS1307-hez kell, akkor Itt találsz egy leírást.„Hogy tudom legegyszerűbben kiíratni TM1637-re egy RTC-ben tárolt időt?” Ha DS3231 az RTC, akkor nálam találsz mintaprogrmot (Avishay Orpaz TM1637Display programkönyvtárát használtam a kijelzőhöz). Ha jól csalódom, Arduino IDE-ből is telepíthető. Letöltések: Előadásvázlat és Mintaprogramok (ZIP) "1db nyomógombbal jó lenne ha állítható lenne." Ezt majd neked kell megcsinálni hozzá...
Ám legyen, az alkotó majd eldönti. Nekem a 100Hz vált be, az alatt fejforgatáskor, mozgáskor néha néha látszott a vibrálás. A régi monitorokon is inkább a 75Hz mint az 50Hz volt ami nem zavart. Amit építettem órákat azokon is azt tapasztaltam, 80-100Hz a minimum szegmensenként. A TV-k nagy előnye az utánvilágítás volt, ezért nem zavart az 50Hz.
Én általában változtatható programozom, hogy ha vibrál a kijelzés, tudjam a frissítést gyorsítani. Annál zavaróbb nincs, ha fejforgatásra látszik a frissítés. Ha a proci tudja, inkább legyen "túl gyors", mint lassú.
Köszönöm, ezekre voltam kíváncsi. (bluetooth-os kapcsolaton dolgozok Nextionnal)
Ha csippet cserélve sem működik jól, akkor nem valószínű, hogy a csippen belül a láb driver leégése a probléma, tehát programhiba lesz. Ha megosztod a programot, akkor lehet rá bármit is mondani. Vak tippem szerint a lábat nem állítottad outputba.
|
Bejelentkezés
Hirdetés |