Fórum témák
» Több friss téma |
WinAVR / GCC alapszabályok: 1. Ha ISR-ben használsz globális változót, az legyen "volatile" 2. Soha ne érjen véget a main() függvény 3. UART/USART hibák 99,9% a rossz órajel miatt van 4. Kerüld el a -O0 optimalizációs beállítást minden áron 5. Ha nem jó a _delay időzítése, akkor túllépted a 65ms-et, vagy rossz az optimalizációs beállítás 6. Ha a PORTC-n nem működik valami, kapcsold ki a JTAG-et Bővebben: AVR-libc FAQ
Üdv mindenkinek!
Elkezdtem az arduino nanoval foglalkozni, A kérdésem az lenne , hogy egy SPI TFT kijelzőt hogyan lehet feliratozni? Gondolok itt menü dobozokra funkció gombokra. Ez nem érintő képernyős TFT. Létezik ehhez valamilyen TFT maker vagy valami hasonló ? Nem nagyon értek ilyesmihez de jó lenne ha a kijelzőn azok jelennének meg grafikusan amiket látni szeretnék és nem azok amiket mások látni akarnak. Érdekesnek találtam a BAR funkciót is amit feszültség változásával kúszik egy sávban de ebből kéne nekem legalább 4 sáv és csatorna mérésekhez. Előre is köszönöm a segítségeket UTF könyvtárról már hallottam vajmi keveset de még számomra tabu. TFT_display Üdvözlettel simonsen!
Megrajzolod pl. Corel, powerpoint,stb és képként rakod ki.
Szerintem az Arduino fórumon több segítséget kapsz ezzel kapcsolatban. AVR =/= Arduino
Sziasztok !
Kb 3 hónapja kezdtem el foglalkozni az Arduino programozással Belekezdtem egy erősítő átalakításába azért , hogy távkapcsolóval lehessen működtetni a hangerőszabályozást és a ki-be kapcsolást. A távkapcs vevő mintaprogi melyet a netről bányásztam elő működik szépen , (a program files könyvtárban kellett garázdálkodni picit érte ) . Igazából nem is vagyok elakadva csak valamit nem értek . A megjegyzésben van a kérdéses sor lentebb /*......*/ között. #include <IRremote.h> int RECV_PIN = 8; int RELAY_PIN = 7 ; IRrecv irrecv(RECV_PIN); decode_results eredmeny; void setup() { pinMode(RELAY_PIN, OUTPUT); irrecv.enableIRIn(); // Start the receiver } int on = 0; unsigned long last = millis(); void loop() { if (irrecv.decode(&eredmeny)) { irrecv.resume(); if (millis() - last > 250) { on = !on ; /* A net-ről "begyűjtött" mintaprogiban ez található : digitalWrite(RELAY_PIN, on ? HIGH : LOW); Ha átírom erre : digitalWrite(RELAY_PIN, on ); Ugyanaz történik , legalább is ua.-t látom. Kérdezném , hogy mi szükség van a " ? High:low" kifejezésre ? Mi az a többlet (hatás) amiért ezt így oldották meg ? */ //digitalWrite(RELAY_PIN, on ? HIGH : LOW); //digitalWrite(RELAY_PIN, on ); } last = millis(); } } Nem pontosan az amit a netről leszedtem , mert közben elkezdtem kigyomlálni és átalakítani a saját elképzelésem szerintire. A mellékletben van az eredeti.
Első körben lásd a hozzászólásom közvetlenül a tied felett.
A válasz viszont az, hogy a helyes megoldás a példabeli. A te kódod ugyan működik, de ha bármi megváltozik a digitalWrite kezelésében az Arduino keretrendszerében, akkor működő képtelenné válhat a kódod. A "hivatalosan" elfogadott értékek ugyanis jelenleg a HIGH és a LOW, de bármikor behozhatnak vmi újat (pl. HighZ vagy hasonló).
Az if else rövidített formálya:
Idézet: formája„Az if else rövidített formálya:” Nem egészen. Az if-else az utasítás, vezérlési szerkezet. A ?: pedig operátor. A kettő egészen más dolog. A hozzászólás módosítva: Okt 21, 2016
Jogos az észrevétel , legközelebb jobban figyelek hova írjak.
lyaly. Egyébként köszönöm a segítséged.
Neopixel-ről érdeklődnék (WS2812b).
A szalag 30 LED-es, amikor beállítom a színét halvány lilára, a LED-ek villódznak. Más színeknél is előjön a villódzás, de főleg alacsony intenzitás mellett. Gondolom ilyenkor válik láthatóvá. Még mikrovezérlő sem kell, szimplán felprogramozom a szalagot, megszakítom az adat vonalat, úgy is előjön a villódzás. Jelenleg a kapcsolás breadboardon van, nincsenek forrasztások, 4700 µF-os kondenzátor simítja a tápot, 330 ohm-os a DATA leválasztása a mikrovezérlőről. A táp 1A-es mobil töltő. Miért vibrálhat a színe 20% intenzitásnál? Kevés a 4700 uF? Amikor kikapcsolom a szalagot, látni ahogy elhalványodik, de csak pár tized másodpercig marad életben. A hozzászólás módosítva: Okt 25, 2016
Ezt az adatlapot találtam: Bővebben: Link, de ez semmit nem ír a teljesítmény igényéről, maximális áramfelvételéről. Próbáld meg nagyobb terhelhetőségű tápról, vagy próbálj csak egy darabot meghajtani, hogy a többi ne okozzon fogyasztást.
Szerintem nem kevés a 4700uF, talán sok is (a kapcsolóüzemű tápok, főleg az ilyen kicsik nem nagyon szeretik a nagy kondit a kimeneten), szerintem gerjed tápoldalon a cucc. A WS2812 LED-enként 17mA-el hajtja a LED-eket. Ha kész szalagot használsz, akkor ott egységenként szokott (volt) lenni 1-1 100nF-1µF a tápon, tapasztalataim szerint bőven elég a normál működéshez. Nálam 144-es csík 2.5A-es kapcsolóüzemű tápról jár 220µF kimeneti szűrőkondival (igaz, nincs is kihajtva "fehérre" mind, mert az 6-8A lenne, de tökéletesen működik).
Sziasztok!
Az AtmelStudio által kijelzett "Data Memory Usage : 1440 bytes 70,3 % Full" mit jelent pontosan? Ha felmegyek 89% környékére, akkor újraindul menet közben az AVR, és furcsán viselkedik. Azt hinné az ember, hogy minden változónak a maximális helyigényét számolja, de nem. Talán az induláskori memóriafelhasználást? Mert amint belelépek a függvénybe, ami sok memóriát igényel, újraindul szegény, tehát ilyenkor elfogy a memória. Köszi. Ismerem a pgm_space-t, nem azzal van baj, hanem azzal, hogy fejlesztés alatt először összeraknám a projekt fő alkotóelemeit, aztán ha kész, ráérek majd szépen áthelyezgetni a dolgokat a program memóriába. Plusz van, amit nem tudok áthelyezni máshova: egy duplán bufferelt, 6 ADC csatorna értékeit tartalmazó 32 elemű int tömb, ami már magában is 768byte. Most megfeleztem, csak 16 mintát tárolok.
Szia,
Idézet: „Mert amint belelépek a függvénybe, ami sok memóriát igényel, újraindul szegény, tehát ilyenkor elfogy a memória” Amit nem tud megmondani a Build fordítási időben, az a stack mérete futásidőben. Nem lehet hogy a függvényed túl sok local változót használ, amik a stack-en tárolódnak, és felülír egy globális változót? Vagy éppen fordítva? A hozzászólás módosítva: Okt 28, 2016
Tehát a stack méretét nem tudjuk, ami ha betelik, problémát okoz. Akkor ez az oka a problémának. Köszi.
Csak egy tipp volt, de könnyen lehet hogy ez a baj. Próbáld meg debuggolni hogy a kritikus függvénybe belépéskor hova mutat a StackPointer. Ha ráadásul közben a program beugrik egy megszakítási rutinba az további területeket írhat felül, és ha az interrupt vagy a te függvényed pont azt a globális változót módosítja ami ezen a területen van, akkor akár a függvény/interrupt visszatérési értékét is elronthatja. Ilyenkor szoktak előjönni nagyon érdekes és érthetetlen bugok.
Igazából nagyon könnyű előidézni. Ha egy char tömbbe pár karakterrel több betűt írok, akkor előjön a hiba. Eltárolom ezeket inkább a program memóriában.
Köszi. Más szalaggal is kipróbáltam, azzal megy. Érdekes.
Akkor cseréld ki próbából az első WS2812B-t. Szokott úgy meghalni, hogy furimányokat csinál és mivel ha az első zizi, akkor a többi is az lehet. Nekem 144-es szalag 1. LEDje haldoklik (alapban halvány fehér) és ez attól van, hogy tápfesz nélkül kapott bemenő jelet. (nem volt soros védő ellenállás sem).
Sziasztok, egy nagyon egyszerű példával kapcsolatban szeretnék segítséget kérni, ami biztos nagyon triviális, de egyszerűen nem jövök rá.
Össze kell adni a számokat 87-ig assemblyben. Ezt hogy tudom úgy megtenni, hogy a helyes eredményt kapjam? Vagyis ne a 8 bites regiszterekben, hanem X, Y, Z valamelyikében kéne nem? Vagy valami másik módszer kéne rá? A hozzászólás módosítva: Okt 30, 2016
Sziasztok,
AVR Studio 7 tel kapcsolatban kérdezném, valóban igaz az, hogy nem lehet futtatni ill. debugolni programot benne hardver debugging tool nélkül? Pl. ATMEL-ICE vagy hasonló tool ok nélkül? Gondolkodom hogy az AVR Studio 6 ost le kellene váltani 7 re. Előre is köszi.
Gondolom, erre gondolsz:
Bővebben: Link Atmel AVR 8-bit Instruction Set 7. ADIW – Add Immediate to Word
Szia! Nem igaz. Egyébként gyorsabb és kisebb a helyigénye, mint a 6-osnak. Az AVR32 és ASF elhagyható telepítésnél, ha nincs rá szükség.
Sziasztok!
Olyan programot írok, ami részben kommunikál egy másik AVR-rel is. Egyelőre egy darab AVR-em van. Próbák idejére beköthetem a TX lábat közvetlenül az RX lábra?
Probák idejére bekötheted.
Én így szoktam tesztelni a MAX232-t.
Rendben, nagyszerű.
Tudomásom szerint 64 byte az AVR-ben található UART puffermérete. Így ha adatot küldök, akkor nem is muszáj azonnal kiolvasnom Serial.read-del.
Elméletileg így kellene legyen, de a gyakorlatban majd kideríted.
Az eredményre én is kiváncsi leszek. |
Bejelentkezés
Hirdetés |