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
Szia!
Két dolgot csinálhatsz: 1., Az egész programod c++ fordítóval eteted meg. Lehetnek olyan dolgok amiken kiakad, akkor azokat átdolgozot picit. Elvileg ha nem barbárkodtál nagyon, akkor nagy munkát nem kell végezned. 2., Minden c++ függvényhez amit meg akarsz hívni c kódból, ahhoz kell írni egy köztes függvényt, ami "c paraméterek kap", és ezeket átgyúrmázod olyanra, ami a c++ fügvényeddel kompatibilis. Itt megtalálsz mindent ami csak kellhet. Amúgy van külön topikja a raspberry pi-nek (gondoltam szólok mielött valaki leharpja a fejed ) A hozzászólás módosítva: Feb 29, 2016
Nem a tápnál kellene elkezdeni az okosítást! Én így kezdtem: adott egy régi Nokia töltő (LINK) ami a ráírt értékekkel(3.7V, 355mA) ellentétben jóval nagyobb feszt (kb. 8V) ad ki terhelés alatt is. Erre rákötsz egy 7805 stabilizátort, és kb. 200mA-el terhelheted. Az AVR-ed soha nem fog ennél több áramot felvenni!
Ha nem arduinozol akkor egy programozó is kelleni fog(persze erre arduino-t is használhatsz). Én nyomtatóportossal kezdtem, amit natúrba bekötöttem(erősítő IC nélkül) és jó is volt. PonyProg és Bascom kezeli. Lásd: kép. Ja és ajánlott nagyobb(pl. ATMega16) IC-vel kezdeni, kezdőknél hamar elfogynak a lábak. És amit elsőként megépítenék az egy Fusebit Doctor. Hamar rájössz miért... A hozzászólás módosítva: Feb 29, 2016
Hatásos (ohmos) terheléssel teljesen igazad lenne, ez viszont egy DC motor. Motornál én mindig induktív terheléssel számolok(tudom, terhelve nem tisztán az). PWM esetén a motortekercs induktivitása, a kapcsolótranzisztor és a schottky-dióda egy kapcsolóüzemű tápot alkot, a motortekercsben majdnem folyamatos áram folyik. Én pedig így számolok a méretezésnél: R_dsOn*(max. áram * kitöltési tényező)^2 = 1.5Ohm*(4.5A*0.33)^2=3.375W. Üresjárásban a motor a maximális áramának töredékét veszi fel, ha ezt PWM-el szaggatja akkor még ennek is csak az 1/3-át. Valószínűleg azért nem melegszik az IRF830, mert a CNC az 500W-os marómotorral túl van méretezve, a motor szinte üresen jár.
Konkrét adat a mostani projektemben szereplő motorról: 12V, 14A (168W), üresjáratban 1A-t vesz fel 100% kitöltés mellett, terheléssel 3A-t. PWM esetén a kitöltési tényezővel arányos az áramfelvétel üresjárásban és terhelve is. A túlméretezés azért kell mert így terhelve is közel azonos fordulatszámon jár a motor ami CNC-nél sem utolsó dolog. A hozzászólás módosítva: Feb 29, 2016
Ezzel csak az a baj, hogy nincs 7V feletti töltőm sajnos. A 7805-ös megoldásra én is gondoltam, de egy új táppal ,,drágabbra" jönnék ki, mint egy igazi arduinoval. Szóval semmiféle megoldás nem létezik erre az 5V dologra? Angol fórumokon 100 és 220 µF-os kondenzátort írnak, hogy azt kéne a táp földje és az 5V közé kötni. Ez a megoldás célravezető lehet?
Túlbonyolítod. Az Atmega328 max. 6V-tal táplálható, tehát a 4.8-5.25V tökéletes neki.
A hozzászólás módosítva: Feb 29, 2016
Én is így számoltam mint te, csakhogy 100% kitöltésnél 1,5*4,5^2 = 30,375W és nem 13,5W , amit te írtál (te 2-vel szoroztál és nem négyzetre emeltél).
Egyébként pedig illik maximum terhelésre méretezni a hűtést.
A régi Nokia töltőt gombokért adják. Egyébként ipari környezetben működő áramköreim vannak, 5V-os kapcsolóüzemű (stabil) tápokkal. Persze ezek a tápok terheletlenül is 5V-ot adnak...
A probléma a nagy kondikkal az "in-rush" áram (az elején a tranziens nagy áram, amíg a kondik töltődnek). Ez nem probléma ha külső tápot használsz, ha azonban a számítógép USB-jét is szeretnéd (arduino COM port), akkor letilthat a védelem (az USB szabvány max 10µF-t engedélyez, áramkorlátozás védelem nélkül, ráadásul a max áramfelvétel is csak 100mA lehet, amíg le nem tárgyalta az USB-n keresztül, hogy több kéne).
Igazad van, a hűtést 100%-os kitöltési tényezőre és a motor maximális terhelésére kell tervezni. Kérdés hogy ezt minden gyártó megteszi, vagy kicentizik az előforduló legnagyobb motorteljesítményhez. Márkás frekvenciaváltó kapcsolótranyóit láttam már elégni papírvastagságú hűtőbordán, és "túlterhelés" miatt a garanciális javítást sem vállalták.
Nem akarok vitázni a tapasztaltabb emberekkel, ezért OFF-ba teszem: az én képletemben négyzetre emelés van, és 3.375W az eredmény abban a speciális esetben, amikor 33% a kitöltési tényező és a motor maximális nyomatékát adja le. Ez a 30.375W-nak pontosan az 1/9 része. A hozzászólás módosítva: Feb 29, 2016
Sziasztok!
Vettem régen egy ilyet de még nem használtam, valamire emlékszem hogy használat előtt kell vele valamit csinálni, de nem emlékszem hogy mit. Tud valaki segíteni? Köszönöm!
Ezzel semmit nem kell csinálni, a driver-ét kell feltelepíteni, és kell hozzá a programozó MCu hoz való foglalat összekötve egy ICSP foglalattal, vagy tüskesorral.
A hozzászólás módosítva: Márc 2, 2016
Libusb kell hozzá és csakis eszközkezelőből kell hozzárendelni és utána felismeri a windows.
Parancsolj.
A PWM egyáltalán nem akar működni, kicseréltem a mikrofont, egytranzisztoros erősítő van neki, azt érzékeli ha tapsolok. 25khz körüli PWM re volna szükségem, 50% kitöltéssel ha a mikrofon veszi a jelet, egy kis késleltetés utánna kitöltési tényező 0%. Próbáltam 100%-ra rakni a kitöltési tényezőt, de a mérőműszer mindig 2v körüli értéket mutat.
A hozzászólás módosítva: Márc 3, 2016
De ez sem helyes (nem fog tökéletesen kikapcsolni):
Inkább valami ilyesmi (példa):
A hozzászólás módosítva: Márc 3, 2016
Az ADC rész sem valami szép. Ott mi is a cél pontosan?
Az egyik barátom kért meg, hogy csináljak neki egy "kakasriasztót". Egy régi telefonból bontott mikrofon szolgál az ADC-n, kb. 1khz és 10khz közötti frekvenciákon kellene bekapcsolja a PWM kimenetet (25khz, 50% dutty). Bővebben: Link a mikrofont így illesztettem, a PWM kimenetre valami 5V ról kapcsoló logic FET-et szeretnék tenni (amit találok itthon), mert egy piezzót kapcsolgatna. Bővebben: Link ennek a videónak a hanganyagát megvizsgálva kell majd optimalizálni a mikrofont, lehet változtatok a harwdare-n és kap egy bandpass filtert. Hogy van-e PWM vagy nincs, a LED jelzi vissza.
A hozzászólás módosítva: Márc 3, 2016
Köszönöm szépen, ez volt a probléma. A példában mutatott módszerrel kódoltam a PWM kitöltési tényező állítást, most minden működik.
A 25kHz PWM az 25kHz-es hangot is fog kiadni.
Annak a példaáramkörnek is van rendesen baja (gyakorlatilag azon kívűl, hogy valami zajt fogott a mikrofon, másra nem jó az érzékelés). A bandpass filter jó ötlet, de ne felejtsd el, hogy vagy folyamatosan nagy sebességgel mintavételezel az ADC-vel (freerun mód megszakítással) és így keresed meg a csúcsértéket szoftveresen (nem lesz tökéletes de ha mondjuk 10x nagyobb a mintavételezési frekvenciád, mint a vizsgált frekvenciatartomány maximuma, az már lefogadható értéket produkálhat) vagy a filter után be kell tenni egy csúcs érzékelést is és hardveresen megoldani ezt. A jelenlegi ADC kezelésed nagyon sok fals érzékelést eredméynez majd.
Sziasztok!
az lenne a kérdésem, hogy 328-as atmegából ha arduino-t építek, a 2 GND láb összeérhet? Illetve a 2 VCC és az AREF? Vagy az AREF pin elé kell valami hogy beköthessem a VCC-be?
A két GND-nek természetesen közös potenciálon kell lennie. Az AREF-et nem kell bekötnöd, kivéve ha külső feszreferenciát szeretnél használni (pl. TL431). Azonban a pontosabb mérés kedvéért, szokás egy kondit kötni az AREF és a föld közé (pl. 100nF), mivel az aref lábat mindig összeköti az uC a kiválasztott referenciafeszültséggel, legyen az belső vagy külső (AVCC).
Fontos még, hogy mindegyik VCC és AVCC láb saját 100nF-es kondit kapjon (láb és hozzá közeli föld láb közé), mivel a portok kapcsolgatásakor nagyon rövid időkre akár 100mA-t vagy nagyobb áramot is felvehet a mikro, ezért az áramutaknak rövidnek kell lennie (így csökkenthető a kiadott nagyfrekis zaj, illetve kondik nélkül instabil is lesz az uC).
Az AVCC láb tápját érdemes megszűrni a pontosabb analóg mérések kedvéért legalább egy ferritgyönggyel + 10µF kondival is (ez egy LC szűrőt eredményez, ami csökkenti a digitális portok által keltett nagyfrekis zajt), illetve igazán igényes kivitel esetén kiegészítve egy további lowpass LC szűrővel is a uC tápellátását (pl. 10uH +10uF), ez különösen hasznos DC-DC tápok esetén.
Példa (picit más értékekkel, mivel a konverterre méreteztem a szűrőt, illetve ez egy ATXMEGA-t táplál [azért a 3.3V], ahol viszont már 12bites az ADC).
Sziasztok!
Az alábbi program miért nem hajtja végre az interruptot?
Sziasztok. Van egy USBasp programozóm, J1, J2 és J3 csatlakozással. A J1 5V-ra van állítva, a többi nincs összekötve. Win XP SP3-at használok illetve Arduino IDE-t. Feltettem a drivert (libusb 0.1.12.1) és a gép ki is írja hogy az USBasp-t csatlakoztattam, illetve hogy megfelelően van telepítve. Egy Atmega328-ból építettem ,,Arduino-t". Kapott a 16 megás kristályt, 22pf-os kerámiakondit, meg egy 10µF-os kondit az 5V és a GND közé. Viszont, amikor Arduino IDE-ben miután beállítottam hogy Arduino Uno és usbasp a programozó, a bootloader égetési kísérlet után ezt kapom vissza:
ezzel mit tudok kezdeni? FW-t lehet updatelni Raspberry Pi-vel? vagy valami egyszerűbb eszközzel? nem akarok még egy programozót venni, ha nem muszáj.
A legsúlyosabb hiba hogy az SREG-et nem mented a megszakításrutinban. A munkaregiszter(eke)t is szokás push-olni, de itt elhagyható mert máshol nem használod.
Én a TIFR-t sem piszkálnám, ha már egyszer interruptot használok. A flag-et amúgy is törli egy megszakítás puszta meghívása(csak nem ezé!), ezért nem is értem. Amúgy sem így szoktak flag-et törölni, hanem SBI-vel.
Üdv!
A fuse biteket is átállítottad külső kristályra? Az atmega328-ban van már beégetett Arduinos bootloader? ISP-s (SPI) kapcsolattal próbálkozol vagy UART-ossal?
Köszi a választ!
Lehet, hogy nem fogalmaztam meg egyértelműen a problémát. Ez egy leegyszerűsített példa akart lenni arra a problémára, hogy ha akkor jön egy megszakítás, aminek a jelzőbitje ugyanabban a regiszterben van, amelyikben éppen törlök egy másik jelzőbitet, akkor nem hajtódik végre a megszakítás. Igaz, ezt eddig csak szimulátorban próbáltam, kipróbálom majd, hogy a valóságban is így van-e. SBI-t jelen esetben nem lehet használni, mivel a TIFR regiszter az atmega162-ben a 0x38-as címen van, az SBI viszont csak 0x1F-ig használható. A hozzászólás módosítva: Márc 10, 2016
|
Bejelentkezés
Hirdetés |