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
Sziasztok !
Segítséget kérnék.Asm-ben programoztam eddig,nemrég kezdtem a C-t.A következő problémám merült fel C-ben: bekérek SPI-n 3 byte adatot,amiknél a következő feltételeket kellene leellenőrizni:nem lehet az összes 0 a byte-okban és ha 1-es van,akkor csak egy lehet,valamint be kéne azonosítanom,hogy ez hányadik, 1-24-ig.(0-23)Természetesen nem az egész kódot kérném,csak valami frappáns ötletet,ha nem nagy kérés.Köszönöm !
Hát, a megfogalmazás elég pontatlan. Az 1-es az most byte, vagy bit?
Gyanítom, hogy bit, mert ellenkező esetben nem 1-24-ig keresnél, hanem 1-3 ig. Nem nulla ellenőrzése:
Hányadik helyen van az utolsó egyes bit?
Ez a feladat egyszerű frappáns megoldása. A generált assembly kódot viszont eszedbe ne jusson megnézni, mert amit a gcc az uint32_t-vel alkot, azt jobb ha nem látod. Működni fog, az a lényeg. A hozzászólás módosítva: Ápr 10, 2013
Kösz a segítséget ! Valóban kuszán fogalmaztam,a lényeg: a három byte-ot együtt nézve csak 1 darab bit lehet 1-es,(és egynek annak kell lenni)a többinek pedig 0-nak ,különben hibás a bejött adat. Ha jól értelmezem az első feltételedet,ez még nem zárja ki,hogy esetleg két bit is 1-re áll.
Nem zárja ki. A második eset pedig a legmagasabbat keresi meg.
A kód esetében 0-23, ha megtaláltuk, 24 ha nem a végeredmény. Ez már gyakorlatilag kettes alapú logaritmus egész számokra. Ha nem lenne egész a végeredmény, akkor 24-es hibát ad vissza. A hozzászólás módosítva: Ápr 10, 2013
Üdv!
SD kártyával szeretnék kommunikálni (adatokat írni/olvasni) egy AVR-rel. Még nem tartok ott, hogy az SD-vel kommunikáljak, így a kommunikációt egy 74HC595-esre kötött LED sor segítségével tesztelem. Így a kód lefut probléma nélkül:
A gondom a
Ha a 2.-at is kiveszem a kommentből akkor ezt a hibát írja: Idézet: „redefinition of 'CMD'” Ha kiveszem előle az unsigned char-t: Idézet: „expected expression before '{' token” Ha így írom be
akkor Idézet: „array subscript is above array bounds” Kifogytam az ötletekből... A hozzászólás módosítva: Ápr 14, 2013
64. sorban újradefiniálod:
unsigned char CMD[CMD_SIZE] = {TEST_DATA}; C ben nem lehet így újra megadni a tömbelemeket, hogy tomb[] = {1,2,3,4,5...}; (Ha jól tudom) Ennél pedig a tömb utolsó utáni elemére próbálsz valamit beírni, ami még szintaktikailag se lesz jó. CMD[CMD_SIZE] = GO_IDLE_STATE; Én így oldanám meg:
A hozzászólás módosítva: Ápr 14, 2013
Csinálj inicializált (konstans) tömböket és azt add át az SPI_WR()-nek.
const unsigned char CMD_TEST_DATA[] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20 }; const unsigned char CMD_IDLE_STATE[] = { 0x40, 0x00, 0x00, 0x00, 0x00, 0x95 }; . SPI_WR(CMD_IDLE_STATE, CMD_SIZE);
Sziasztok!
Szeretnék egy kis segítséget kérni. Egy Tav-IR MKII-vel szeretnék egy Attiny2313-ast felprogramozni,de sehogy sem sikerül. Avr Studio 4.19-el próbálkozok,de bárhogy állítom a fuse biteket (kivéve azokat amikre a program figyelmezett) mindenre OK-ét ír. A felprogramozásnál sem ír ki hibát,de mégsem működik,a 2x16-os lcd felső sorába csak kockák jelenek meg.Egyszer sikerült elérnem,hogy egy pillanatra megjelent a kijelzőn aminek kellet,de utána csak vibrált. Abban szeretném a segítségeteket kérni,hogy hogyan állítsam be a programot. Mellékelek pár print screen-t arról amit csináltam,és a fuse bits táblázatot ami a hex-fájlhoz járt. Az Attiny 5 voltról,és 20Mhz quartz-ról megy. A segítséget előre is köszönöm.
A progranozó akkor OK.
Az LCD-d bekötésével van hiba: - sebesség - tápszűrés - init kimarad Programkód? A nélkül igen nehéz megoldást találni.... CKDIV8 be vabn kapcsolva, azaz 1/8-d órajelen jár a chip. Itt 20/8 MHz-n... A hozzászólás módosítva: Ápr 14, 2013
Hello!
Köszi,hogy válaszoltál. Az LCD bekötését többször ellenőriztem az biztos jó. Milyen sebesség?Az ISP frekvenciára gondolsz? a tápszűrés 7805,100nf ellőtte-utána+100uf utána,9v-os elemről megy. Az init az nem tudom mi. Programkód?Csak egy hex fájlom van,ha arra gondoltál. Többféleképpen is próbáltam állítani a fuse biteket,mert nem tudom,hogy mi mire való. Azért tettem fel a fuse bits táblázatot,mert ez alapján nem tudom,hogy mit kell kipipálni,és ebben szeretnék segítséget kérni.A táblázat ráadásul elégé eltér a Avr Studio-étol.
Innen ez eléggé katyvaszközeli dolog lesz....
Sebesség : - kvarc illetve a belső 8-as osztó (DivCKLK). Jó lenne látni, hogy honnan van a hex/leírás. Ott írhatnak valamit. 9V-s elem eléggé határeset. Az LCD háttere igaz nem megy? Ha hex van, akkor abban is lehet baltázva valami. Bascom alatt tudok kódot küldeni, hogy T2313-ra legalább kizárd a hibát. Most ami lehet: - kvarc nem jó - Hibás az LCD - hibás a LCD bekötés - hibás hex - hibás T2313 - stb. Csak teszteléssel és szisztematikus kizárással lehetne hibát keresni. Bascom alatt teszt:
A hozzászólás módosítva: Ápr 14, 2013
A hex és a leírás innen van,a második az.
A geigercounter_v1 zip-be minden benne van. Az LCD-t programozás közben nem dugom a panelre(lehet kéne nem mertem.) Az Attinyt a "helyén"programozom. Már a negyedik ATtinyt nyúzom,kizártam magam az írásuk,olvasásukból.(van még 1 szűz). Az LCD nem hiszem,hogy rossz lenne mert egyszer már egy pillanatra megjelent rajta ami kell,de azt nem tudom hogy értem el még az elején volt. A bekötését is leellenőriztem. A hex is biztos jó,olvastam hogy sikeresen után építették. Amit a végére írtál az nekem kinai.Ez csak egy egyszeri programozás lenne a részemről. Köszönöm,hogy foglalkozol vele.
Hello.
Nem tudom, valószinű neked küldtem választ ezzel kapcsolatban. Páran már megépitették ezt az áramkört sikeresen. Szerintem a fuse bit beállitásánál vagy programozásánál lehet valami gond. Hagyhatod az eredeti gyári beállitást, csak tedd át külső quartz-ra. Jelöld be vagy ki az összes CKSEL-t, programozótól függően. Vigyázz, egyes programozóknál a fuse bitek bejelölése forditva működik. A SPIEN és a RSTDISBL fuse bitekhez ne nyulj, ezzel lekapcsolod a SPI-n keresztül történő programozást. Itt utána nézhetsz. Fuse bitek: Low: 0xFF High: 0xDF Extended: 0xFF Üdv. Csabi
Hello!
Megnéztem az oldalt amit linkeltél.Beírtam a fuse biteket alulra amiket megadtál,erre a fuse calkulátor kijelölte a SPIEN-t és legördíthető listából a Ext.Crystal Osc Frequency 8.0-MHz Start-up time: 14 Ck + 65 ms-et. Ugyanezt csináltam AVR Studioban is.A SPIEN alapból kivan jelölve,nem is lehet levenni a pipát. Alul meg is jelenik ez: Extended: 0xFF High: 0xDF Low: 0xFF Ezután rákattintok a program gombra,utána a Program fülön a flashnél kiválasztom a hex fájlt és rákattintok a program gombra. Alul közben az AVR Studio mindent leokéz. Először nem működött,de utána kicseréltem a quartz-ot erre,és újra programoztam.Nem tudom elhinni,hogy hibás volt a quartz,ugyan ez volt benne csak a normál kivitelű (HC49/U). Bekapcsolás után felvillan a felirat,a háttérvilágítás kikapcsol és halványan "kockák"vibrálnak,ezután megnyomom a reset gombot,és kezdi elölről de utána rendesen működik.Ezt mi okozhatja?Még mindig nem jó a beállítás?Vagy rosszul programozom fel? Üdv. Sanyi
Sziasztok!
Volt már dolga valakinek DHT-11 hőmérséklet és páratartalom mérő szenzorral? Konkrétan az a bajom hogy mindkét dekád(tizedes rész) helyén nulla van. Az ellenőrzőösszeg szerint is helyes a vételezett érték, tehát nem az adatátvitellel van probléma. Már csak arra tudok gondolni hogy gyárilag garantált+/- 2°C és +/- 5RH% pontosság mellett a tizedes résznek már nincs akkora jelentősége mint pl. egy DS18B20 vagy LM75 esetében. A kép máshonnan van, de az enyém is pontosan ennyit tud: a tizedes része nulla! A hozzászólás módosítva: Ápr 17, 2013
Köszönöm. Közben utánakerestem, a jóval pontosabb DHT-22 már már kiküldi a tizedes részt is.
Az adatátvitel miatt a két szenzor 100%-ig csereszabatos, ezért küldi ki a DHT-11 a nullákat is.
Egy rövid kérdésem lenne.
AVR-t csak működő oszcillátorral lehet programozni? Köszi a hasznos választ. jano36
http://www.hobbielektronika.hu/cikkek/seged_orajel_generator.html
Ezt, hogy kell használni, tehát ha rákötöm pl. egy atmega8a 9 es lábára meg áramot adok neki aztán hogy tovább? Az avr studióba mit kell állítani, hogy tényleg helyre is jöjjön a avr. Köszi!
Sziasztok!Olyanban kérnék segítséget,hogy a korábban vásárolt T bird panelen lévő kis programot nem tudja nekem ide felrakni vki?Az enyémről sikeresen töröltem ,viszont szeretném tanulmányozni mivel teljes mértékben kezdő vagyok a témában.Aki esetleg megmentette a saját paneljéről az tegye fel nekem legyen szives.KÖSZÖNÖM!
Felraktam az egyik programomat (logikai analizátor) a netre. A lényege a programnak, hogy képes egyszerre 4 digitális vonalat lehallgatni. A sógornak írtam, hogy könnyebben tudjon IO portokat kezelni, de rájöttem, hogy a 100kHz-es TWI lehallgatására mennyire tökéletes.
(2 us feletti változásokat tud érzékelni, kb 32 órajelciklus). Ha van egy kallódó Arduino-d (UNO javallott, de mással is megy), akkor egy automatikus beállítás után már azonnal használható is (feltölti a programot a bootloader segítségével). Bővebben: Link Természetesen a program magyarul is megy, de a doksit angolul írtam. Remélem nem probléma. Technikai érdekességek is vannak benne: - a kód képes kommunikálni az Arduino bootloader-ével, avrdude nélkül java-ban - automatikus beállítás (megnézi, hogy milyen sebességgel megy a bootloader, ellenőrzi a használható bitrátákat,...) - az AVR rész C és assembly keverék, 29 órajelciklus alatt befejeződő pin change interrupt - kiválasztható UART átviteli sebesség (baud rate) - emellett képes resetelni tetszőleges sebességű UART vonalat (első csatlakozásnál, egy 600 baudos 0x55 jelet küldök ki, ami az összes 9600 baud feletti ráta esetén periodikus 0x00 framing error-okat eredményez, ebből tudja a kód, hogy vissza kell állítsa a sebességet 9600-ra).
A poén az, hogy sourceforge-ra felrakni majdnem annyi idő volt, mint megírni.
- ne csak magyarul tudjon, hanem angolul is - legyen doksija - Linux mellett Windows-on is menjen - 64 biten is, ne csak 32-n - támogassa az összes 328P-s Arduino-t, ne csak az enyémet - legyen felhasználóbarát ...
Nem rossz.
Esetleg "arduino-mentes" kapcsolási rajzod is van hozzá? Csak ez miatt nem fogok venni, de jól jönne egy analizátor egy 43ms (elvárt) periódusidejű impulzussorozat mérésére. Egy ATMega168-at beáldoznék rá...
Sziasztok!
Tud valaki segíteni abban, hogy hogyan kell ATMEL Studio 6-al rendesen linkelni library-t? Amikor én csinálok magamnak ilyen .h könyvtárakat akkor csak simán beírom hogy #include "útvonal" De eddig egyetlen internetről letöltöttet se sikerült még életre keltenem. Google-n olvastam valami toolchain-ről de nem áll össze a kép. Ezt szeretném használni: Bővebben: Link Van itt egy main.c amit nem tudok lefordítani, mert nem látja az include-olt .h-ban lévő függvényeket az ATMEL studio 6 A hozzászólás módosítva: Ápr 19, 2013
Kicsit bővebben fejtsd ki mi a hiba/milyen hibaüzeneted van. A compiler szól, hogy ismeretlen symbol, vagy a linker nyavalyog, hogy unresolved external.
Amúgy a "library" az ".lib" előre le van fordítva, és azzal csak a linker foglalkozik. Neked forrás fájljaid vannak. Nincs most fent ezen a gépen az AVR stúdió, de szerintem ha az src mappát simán berakod a projekt mappádba, és "existing item"- ként az egészet hozzáadod, akkor mennie kell.
Szia!
Valóban ha minden egyes file-t hozzáadok, és a megfelelő könyvtárral akkor tovább tudok lépni. Igaz most se fordul le.
Erre a sorra kapok egy ilyen hibaüzenetet: operator '||' has no right operand. Igazából én csak ezt az MPU 6050-es giroszkópot akarnám működésre bírni, de ebben a forrásfájl csomagba rengeteg olyan utasítás van amit még sose láttam. Azért köszönöm szépen!
Sziasztok szeretnék egy rádió távirányítású relékártyát építeni. Elképzelésem az lenne hogy a távirányító 2 gombos lenne az egyik gomb nyomkodásával 1-6-ig váltogatnák a relék közt a másik gomb megnyomásával be ismételt megnyomásával ki kapcsolnám az épen kiválasztott relét. Természetesen minden reléhez tartozna egy két színű led ami vissza jelezné a relé állapotát ha piros ki ha zöld be kapcsolt állapotot viszont ha megnyomom a kiválasztó gombot akkor az adott reléhez tartozó led sárgán villog pár másodpercig ha nem nyomom meg a ki/be kapcsoló gombot akkor marad ahogy volt ha pedig igen akkor átvált a megfelelő állapotra. Kérdésem az lenne hogy ehhez az adóhoz ez a vevő megfelel e, és ha igen akkor a kimeneti lábon milyen jelet kapok ha megnyomom az adó egyik illetve másik gombját, és ez a láb egy AVR melyik bemeneti lábára kötendő rx soros porti bemenet vagy bármely bemenetként programozót lábra. Segítséget előre is köszönöm.
Hát, a program Atmega328-on megy jelenleg, szóval át kellene írnod, ami nem lesz triviális. Azért lesz problémás, mert kihasználja a nagyobb memóriát, 256 mintavételt képes eltárolni. Az átíráshoz az assembly részt is változtatni kellene, hogy csak 128-at tároljon.
A 43ms milliszekundum simán menne vele. Elvileg ha egy mezei Atmega328-at egy max-232-vel összekötsz és felrakod rá a bootloadert, azzal már mennie kell. 16 MHz-es kristály is kell hozzá. Szóval 16MHz kristály, MAX-232 soros portra, Atmega328P+optiboot bootloader és RESET gomb. Ennyi. Ami kicsit nehézkes lesz, hogy kézzel kell a RESET gombot nyomkorásznod, mert Auto-reset logika nem lesz benne. Ilyenkor a program feldob egy ablakot, akkor nyomod a resetet és amikor a mutató a maximumát eléri elengeded. Az időzítés fontos. A bootloaderrel max 1s-ig tudsz beszélni, utána kilép. A hozzászólás módosítva: Ápr 20, 2013
|
Bejelentkezés
Hirdetés |