Fórum témák
» Több friss téma |
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Sziasztok.
Egy kicsit elkeveredtem a Timer kusza ösvényén. Inicializálásnak ennyi a beállításom: TCCR1A = 0; TCCR1B = 0x01; Ezt követően ugye elindul a számlálás a TCNT1 regiszterben. Eddig érthető is. A problémám a TIFR1 OCF1A bitjével van. Mikor törlődik, illetve áll 1-be ez a bit/flag? Ha a TCNT1 = OCR1A-val? Arduino uno (Atmega328p), Arduino IDE keretrendszer.
Pontosan.
TIFR1 - Amikor esemény történik a bit egybe állítódik. - Amennyiben engedélyezed a megszakítást az eseményen (interrupt), akkor a megszakítás meghívódik és a bit automatikusan törlődik. - Amennyiben nincs megszakítás, a bitet neked kell törölni TIFR1 = _BV(OCF1A) -val - Amikor a regisztert írod, azok a bitek fognak törlődni, ahol 1-et állítottál be. A fenti utasítás kizárólag a OCF1A-t fogja törölni. Az egyes bitek jelentése: ICF1 - Input Capture flag - van egy komparátor is az Atmega328P-ben. A timer1-et rákötheted a komparátorra. Amikor a komparátoron felfutó / lefutó él esemény történik, akkor bekapcsol és TCNT1 beíródik az ICR1-be, amivel pontosan tudsz például periódusidőt mérni. OCF1B - TCNT1 eléri az OCR1B-ben tárolt értéket OCF1A - TCNT1 eléri az OCR1A-ban tárolt értéket TOV1 - a számláló túlcsordul. Ez attól függ, hogy milyen üzemmódban van, beállítástól függően 0xFFFF-nél, OCR1A elérésénél, vagy ICR1 elérésénél tud túlcsordulni A hozzászólás módosítva: Dec 10, 2013
Nagyon szépen köszönöm.
Így már érthetőbb. Akkor az alábbi kis kódrészletem is jó lesz: Legalábbis remélem.
(Ez a törlés, 1-be állítás zavar össze.)
Ezt nem így kell csinálni (bocs).
timer1_value = TCNT1 + PERIOD; Ez simán késik. Gondolj bele, hogy egy assembly utasítás 1-8 órajelet is igénybevehet. A leghalványabb fogalmad sincs ebben az esetben arról, hogy milyen időközönként jár le a timer. Ha meg még interrupt is van mellette (márpedig Arduinon van), akkor brutális késések lehetnek (>100 órajel). A WGM10-WGM11-WGM12 biteket állítsd 1-re (fast pwm mód), az OCR1A-t pedig PERIOD-ra. Ezután azt kell ellenőrizned, hogy a TOV1 bit beállításra került-e (overflow). Vedd észre, hogy a OCR1A (PERIOD) elérése és TOV1 beállítása után a timer magától azonnal! újraindul 0-ról. Teljesen független tőle, hogy az éppen végrehajtott utasítás 1 vagy 10 órajelet vett igénybe. Ha az aktuális TCNT1-hez igazítod az órát, akkor simán késhetsz vele, nem is keveset. Az átlalam javasolt megoldás garantálja, hogy a timer hajszálpontosan PERIOD órajel után fog újraindulni. Mintavételezéshez ezt javaslom. Ha 1000-re állítod a PERIODOT és 100 minavételezést szerentél, akkor a megoldás pontosan 100.000 órajelet fog igénybevenni. Se többet. se kevesebbet. Emellett rövid interruptok is lehetnek. A hozzászólás módosítva: Dec 10, 2013
Kösz, így már lassan világossá válik a Timer.
HMC5883L mágneses szenzorhoz ("iránytű") a Love Electronics honlapján találtam leírást és mintapéldát Arduino-hoz. Mivel a mintapélda kiterjesztése .pde volt, nyilvánvalóan régebbi Arduino környezethez készült. Emiatt a kódot aktualizálnom kellett az Arduino 1.05-höz (anélkül le sem fordult). Mellékelem, hátha valakinek kell.
A mintaprogam (HMC5883L_Example.ino) elején a
sort aktualizálni kell: az adott hely deklinációját kell megadni, radiánban. Az adott földrajzi hely deklinációja a http://magnetic-declination.com/ webhelyen tudható meg. A loop() függvény végére beraktam egy 2 másodperces késleltetést, mert nem győztem olvasni a terminálablakba kiöntött adatokat. Akinek nem kell, vegye ki! Nekem a képen látható kivitelű szenzorom van, ezen már rajta vannak az I2C busz felhúzó ellenállásai.
Sziasztok. Most érkezett egy kijelző modul kínából, de nem tudtam feléleszteni.
http://tronixstuff.com/2012/03/11/arduino-and-tm1638-led-display-modules/ Először fordítva kötöttem rá a gnd és 5v-ot. A hátulján van a jelmagyarázat de az eleje felől kell érteni. Amikor a helyes irányból kötöm rá az arduinora, akkor leáll az arduino is. Az on led elhalványodik majd kialszik. Rámértem a gnd és vcc bemenetekre és 10 k az ellenállás köztük. Ez már zárlat? Szerintetek hibás modul vagy én rontottam el? Csak hogy próbáljak-e reklamálni a forgalmazónál.
Ezt szerintem te rontottad el. Szegény forgalmazó nem tehet róla...
Ha nincs rátéve a modul, akkor megy az Arduinó? Miről táplálod őket? Nem lehet hogy csak a tápod nem bírja a terhelést? Idézet: „Please note that each module set to full brightness with every LED on consumes 127mA, so it would be wise to use external power with more than one module and other connections with Arduino boards.”
Ha nincs rátéve, akkor megy. Amint rádugom elhalványul az on led és kialszik. Mintha zárlatos lenne. Próbáltam 2A tápról is ugyanaz a helyzet. Alapból egyébként nincs bekapcsolva rajta semmi a terhelésnek is kisebbnek kéne lennie.
Egyébként ajánlom a modult. Nagyon olcsón lehet numerikus kijelzőhöz 8 kapcsolóhoz és 8 db két színű ledhez jutni, aminek a vezérlése csak 3 portot foglal. http://dx.com/p/8x-digital-tube-8x-key-8x-double-color-led-module-81873
Sikerült megoldani az eclipse-es dolgot?
Szerintem az 1-es ponttal lesz a gond.
Sziasztok
Adott egy egyszerű Webszerver arduino-val megvalósítva és egy ENC28J60 ethernet vezérlő. Az IP címe jelen esetben 192.168.1.10. Belső hálózatról a böngészőbe beírva az IP címet megjelenik a Webszerver által küldött információ. A hálózaton kívülről (Internet) hogyan tudom elérni a mikrovezérlőt? A routert sikerül elérnem, de hogyan jutok el az ENC28J60-ig? A routerben csináltam 'portforwarding'-ot a 80-as portra. Idézet: „A hálózaton kívülről (Internet) hogyan tudom elérni a mikrovezérlőt?” Ha a port forwarding megfelelően be van állítva, azaz aktivált/éles, akkor 2 módszer lehetséges. A router-ből kiolvasható, hogy a szolgáltatódtól milyen IP címet kaptál. Ezt az IP címet a világháló felől beírva, elvileg már látszódnia kell az Ethernet vezérlődnek. A másik lehetséges mód, amikor webcím alapján szeretnéd elérni az internet felől a vezérlőt; ekkor a vásárolt/ingyenes weblap DNS-beállításainál kell állítgatni, hogy ha a szolgáltatód új IP-t oszt ki neked, akkor az internet felől "követve" legyen a hálózatod / vezérlőd tartalma. Szóval elméletileg a port továbbítás funkció az jó irány. Esetleg tűzfal, ami még eredményezhet olyat, hogy nem látszik elérhetőnek a hálózatod az internet felől.
A portforwarding elvileg jó. DE mit kell beírnom a böngészőbe, hogy a 192.168.1.10-es belső IP-jű eszközt lássam. A router-re ugye több eszköz is csatlakozik (számítógép egy másik belső IP címmel)
Idézet: „DE mit kell beírnom a böngészőbe, hogy a 192.168.1.10-es belső IP-jű eszközt lássam.” A router-ből kiolvasható, hogy a szolgáltatódtól milyen IP címet kapott a router-ed, amikor a szolgáltatódhoz csatlakozni sikerült. Ezt az IP címet a világháló felől beírva, elvileg már látszódnia kell az Ethernet vezérlődnek. Pl. ilyesmi IP cím lesz, amit keresned kell a router hálózati státusz / diagnosztikai oldalán: 89.152.120.31, tehát valószínűleg 89-cel fog kezdődni... A hozzászólás módosítva: Dec 18, 2013
Az a baj, ha a szolgáltató dinamikus IP-t osztogat, akkor minden újracsatlakozáskor megváltozik az IP-d. Erre a problémára találták ki a myip.com, vagy a DynDNS.com oldalt, ahol regisztrálsz, és fix IP-t kapsz, és onnantól bármikor eléred a gépedet, vagy a routert.
Ha a router külső IP címét írom be, akkor megjelenik a router felhasználónév és jelszóbekérő ablaka. Ha beírom ezeket akkor pedig belépek a router kezelőfelületébe. De az ethernet vezérlőt így nem tudom elérni. Ha az ethernet vezérlőnek megadom, hogy mondjuk a 15000-es porton működjön, akkor a belső hálózatból a 192.168.1.10:15000-et beírva a böngészőbe elérem. Ha kívülről próbálom a router IP címével Pl: 87.97.x.x:15000 akkor nem. (portforwarding természetesen beállítva) Így kellene egyébként elérni?
A hozzászólás módosítva: Dec 18, 2013
Idézet: „Így kellene egyébként elérni?” Igen, elvileg ilyen módon kellene tudni elérni.
Plusz még, vagy a Windows tűzfalnál, vagy a vírusirtódban is engedélyezned kell a portot, hogy elérd "kívülről".
A windows-ban miért kell? Nem feltétel, hogy a számítógép bekapcsolt állapotban legyen.
Belső hálózatnál gondoltam. Nekem nem engedte a hozzáférést, míg a Windows tűzfalán nem engedélyeztem a port hozzáférését. (Win7x64)
Annyi lehet még a dolog hátterében, hogy lehetséges, hogy a szolgáltatód blokkolta a 80-as portot, azaz nem volt alapvetően engedélyezve saját, "otthoni" weblap működtetése. Ilyenről is hallottam már...
EEPROM írás/olvasási hibába ütköztem. rövid prg.:
A lényeg: minden új értékadás után mentem az "EEvalue" értékét az EEPROM-ba. (Értéket "kívülről /gombokkal/" adok a változónak, és a mentés is gombnyomásra történik.) A gondom az, hogy 2-3 mentés után, a kiolvasott érték 1. Ha pl. mentek decimális 10-et, és kiolvasom, akkor a kiolvasott érték 1 lesz. Mitől lehet ez? Írás előtt törölnöm kéne a kiválasztott EEPROM címen lévő bájtot?
Sziasztok! Itt a karácsonyi játékban egy olyan problémába futottam bele, hogy:
miért nem működik ez így? Soros porton küldök a kontrollernek a beállításhoz szükséges adatokat: RGB LED színe pl: L255,255,255 -> Ezzel tudom a LED-ek fényerejét 0-255 között változtatni, működik is. Viszont a T1388024810 kódot nem veszi be, csak akkor ha együtt küldöm L255,255,255T1388024810 ebben a formában! De mi a baj az if függvénnyel? Miért nem tudja eldönteni ha az L karaktert kapja akkor az rgb() függvényem hívja meg, és miért nem tudja ha a T karaktert kapja akkor a processSyncMessage() -et hívja meg?! Tipp? Miben van a hiba?! A hozzászólás módosítva: Dec 26, 2013
Idézet: Azzal semmi. A gondot a Serial.find() függvény használata okozza, ami a meghívásakor minden bejövő karaktert eldob, amíg egy 'L' karakter nem érkezik. A program tehát pontosan azt csinálja, amit előírtál neki.„De mi a baj az if függvénnyel?” Idézet: „Serial.find() reads data from the serial buffer until the target string of given length is found. The function returns true if target string is found, false if it times out.”
Értem! Köszi!
Viszont akkor nincs lehetőség ilyesmit megmondani neki, hogy ha L betűt kap akkor arra ezt csinálja, vagy ha T-t kap akkor azt. Idézet: Van lehetőség, csak másik függvényt kell használni. Például a Serial.available() mintapéldájából is ki lehet indulni:„Viszont akkor nincs lehetőség ilyesmit megmondani neki”
Kösz, így megoldva Mi a különbség a 'L' és "L" között? Idézet: Ugyanaz, ami a betű és a szó között.„Mi a különbség a 'L' és "L" között?” 'L' - egy darab karakter "L" - egy szövegkonstans (itt és most egybetűs, de lehetne több is), amelyhez többnyire hozzáértendő egy lezáró nulla értékű bájt is.
Szia!
Azt meg tudod mondani, hogyan lehetne egy karakter helyett szövegkonstans-t figyeltetni? "on" -ra kapcsoljon be a led, ne mondjuk 'L' -re. Előre is köszi. |
Bejelentkezés
Hirdetés |