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
Amikor az adatlap azt irja, hogy 0.7xVDD, meg azt is irja, hogy 0-70 fok, de neked a szobaban eppen az a peldany mukodik 3.2V-tal, attol meg egyaltalan nem biztos, hogy mindig, minden korulmenyek kozott is mukodni fog. Az adatlapot nem utolag irjak, hanem a tervezesi adatok vannak benne. Szoval a 0.7xVDD az nem szigorusag, hanem tervezett adat. Lehet, hogy mukodik alatta is, de ha jot akarsz, akkor nem leped tul azokat a hatarokat. Ez igaz a hatarfrekvenciakra, idozitesekre, feszultsegekre, mindenre.
Miert kell a BUSY-t visszaolvasni? A legegyszerubb dolog, ha van RAM-ban egy 2x16 byte-nyi tombod es onnan szepen mondjuk 1ms-onkent kiviszed a kijelzore a soron kovetkezo karaktert. Ha elertel a vegere, kezded elolrol. Igy neked csak egy valtozoba kell irni a betuket, szamokat, a kijelzon meg megjelenik. Ettol kezdve nincs szukseg a ketiranyu adatatvitelre es meginkabb a varakozo ciklusokra sem.
A timer() fuggveny a lenti peldaban egy szabadonfuto timer erteket adja vissza. Az US2CLK() makro pedig mikroszekundumokat szamolja at orajelekre.
Köszi, nem lenne rossz az sem, de végül rájöttem, hogy felesleges.
Valószínűleg beteszek egy 74HCT244-et ami már 1,6V-nál billen és rákötöm az 5V-tápra.Igazából csak a Busy Flag bitet kell olvasni azt pedig visszafelé megoldom úgy, hogy egy ellenállással összekötöm a buffer be-kimenetét a proci minden lábán van belső dióda a tápra az pedig majd megfogja kicsivel 3,3V felett ha az 5V jel jönne vissza az ellenálláson.
Nem atmegát használok hanem STM-et csak ide írtam, de végülis mindegy. A lényeg hogy ezer más dolgot kell csinálni és nem akarok várakozni. Arra gondoltam igazából, ha lehet amikor megvan az adat átküldés átállítom a lábat külső megszakításra felfutó élre és ha jön a jel akkor a megszakítás visszaállítja a bemenetet kimenetté és küldi a következő karaktert majd megint vissza bemenetté.
Legalábbis ez a terv majd meglátom megy e.
A fenti fuggveny meg LPC-n (szinten ARM) fut. Es pont az a lenyeg, hogy ezer mast is csinal, ezert nincs ideje varni. Meghivod, es ha letelt az elozo kuldes ota 1ms, akkor kiviszi a kovetkezo karaktert, ha nem telt el, akkor visszater. De sehol nem varakozik. Pontosan annyit fut, amennyit kell. Es mivel 1ms-onket visz ki egy byte-ot a kijelzonek, semmikeppen nem kell a BUSY-t figyelni, nem kell ra se varni, se mast csinalni vele. Ezert eleg az egyiranyu kommunikacio, ami csak 6 vezetek (RS, E, D4..D7). Nekem egy 74HCT245 illeszti a 3.3V-os uC-t a kijelzohoz ugy, hogy meg a kontraszt feszultseget is ez allitja elo PWM-mel. Es meg igy is maradt egy szabad vonal, arra esetleg ratehettem volna a hattervilagitas fenyeroszabalyzasat.
Minden főciklus lefutásakor meghívod a függvényt ellenőrizni letelt e az 1ms?
Most adtál egy jó ötletet. STM32F030F4P-t használok van benne 5 timer akkor akár azt is csinálhatom hogy valamelyiket belövöm 1ms-re és global interrupt-al automatikusan meghívja az LCD frissítés függvényt ha lejárt az 1ms periódusidő, és akkor még a számlálót sem kell figyelgetni.
Igen, meghivom, mert ez volt a legegyszerubb. Mert a fuggveny kb. 4 utasitas utan visszater, tehat idoben nincs semmi veszteseg. Interruptbol nem csinalok semmit, amit nem kifejezetten onnan kell csinalni. Ez hatareset lenne, mert maga a fuggveny gyorsan lefut, es nem hasznal semmi olyan eroforrast, amit masok. Vegulis mehet onnan is, ha nincs egy orokke korbejaro fociklus a programban. Nekem volt, ezert egyszerubb volt oda betenni.
GTL2003 az elég kétirányú, jobb mint a FET-es megoldások és csak 1 IC kell hozzá meg felhúzó.
De nem is értem miért használ valaki kétirányú kommunikációt LCD-hez...
Sziasztok!
Az lenne aszerény kérdésem (mint kezdő) Hogyan tudok arduino-val 12V és akár 18A hasonlóan növelni vagy csökkenteni mint egy potméterrel? Példa: fényerő csökkentés , növelés. Köszi!
pwm-el. Vannak rá példaprogramok, mintakapcsolások. Az a lényeg, hogy az Arduinó külön tápon legyen a szabályzotthoz képest. Mint ebben a megoldásban is..
Thx kameleon2.
Ehhez annyit hozzátennék hogy a FET gate meghajtásához kevés lesz az Arduino 5V
tápfeszültsége, még egy kifejezetten "low gate treshold" típussal is. 18A az nem kevés. A másik hogy folyamatos üzem esetén a FET-et többszörös áramra kell méretezni, hacsak nem akarsz méretes hűtőbordát rászerelni. A TO-220 tokot ebben az esetben felejtsétek el! Én IRFP064N típust rendeltem, eddig meg vagyok elégedve vele. A 8mOhm csatornaellenállás reális, de kell neki 10-12V gate feszültség is; másképp nem megy! 18A-es folyamatos üzem mellett 2.6W teljesítmény esik egy ilyen tranzisztoron, azaz kell egy kisebb hűtőborda vagy hűtőzászló. De két tranzisztor párhuzamosításával akár el is hagyható! Aztán kell védődióda is, ekkora áramnál egy lámpa is "visszarúg". 14A-es DC villanymotorhoz én MBR1645 diódát tettem bele, és közös hűtőzászlóra került 2 darab IRFP064N tranzisztorral. A vicces, hogy nem a tranzisztoroknak kell a hűtőborda, hanem a diódának, aminek hőjét a két MOSFET vezeti el. A FET gate feszültséget kettős(NPN+PNP) open-collector kapcsolással oldom meg. A hozzászólás módosítva: Feb 28, 2016
Sziasztok! Eléggé kezdő vagyok AVR programozásban, és akadt egy kis gondom. Adott egy attiny13a MCU, amire egy electret microfon, egy led és egy piezzo van kötve. Ha érzékel egy állathangot (pl kakas) akkor létre hoz egy 20khz feletti PWM jelet amit egy FET (jelen esetben IRFZ44N) kapcsolgat a piezzóra, felkapcsol egy ledet ami viszajelzi hogy épp ultrahangot generál, és vár pár egy kis ideig, majd kikapcsolja a ledet és a PWM dutty-t 0-ra állítsa, majd kezdődik az egész előről.
A probléma az hogy még a led sem villan fel, és azt sem tudom biztosan, hogy érzékel-e a mikrofonnal valamit.
A hozzászólás módosítva: Feb 28, 2016
Szia az OCR0B a PB1 porthoz van kapcsolva, ezt nem állítottad be kimenetre. Másrészt szerintem túllépted a delayt. A delayt a helyedben így csinálnám:
A jelenlegi hardver alkalmatlan a kondenzátor mikrofon jelének feldolgozására! Majd ha kijavította a videóban javasolt minimális hardverkörnyezettel, gondolkodhat a szoftveren.
Próbáltam mérômûszert dióda állásba rakni, gnd-re raktam a fekete szondát, a pirosat a bemenetre, és a LED bekapcsolt majd egy pár másodperc múlva elaludt, de viszont tényleg nemjó portbitet állítottam kimenetre a PWM-nek, a videót máris megnézem. Aki segített, mindenkinek küldök egy zöld kezet
A hozzászólás módosítva: Feb 28, 2016
Szia! Nekem IRF830-as FET-ről megy az 500W-os motorom - igaz 110V-ról. Egyetlen FET viszi és hűtés nélkül sem volt még langyos sem. 10cmx10cm-es hűtőkockára szereltem fel a tesztek után és 23 órát dolgozott végig a motor a cnc-n 1/3-ad fordulattal PWM-el. A hűtőborda szobahőmérsékletű. A meghajtás nem 5, hanem 12V-ról OC-ról megy (555 kimenete). Ha kevés 1 FET - többet kell párhuzamosan kötni, vagy IGBT.
Az 555 sajnos nem egyenlő AVR-el, ha programból akarja változtatni a PWM kitöltését akkor nincs mese, meg kell csinálni a 12V-os konverziót is. Itt egy kép az enyémről.
A 110V-os motorral vigyázz, mert ha tényleg 500W-ot (4.5A) vesz fel akkor egy 1.5Ohm csatornaellenállású tranyóval ez 13.5W maximális hőleadást jelentene 100% kitöltés mellett, 1/3 fordulattal 4.5W. Azért nem melegszik, mert a motoron az idő nagy részében nincs terhelés, jó csapágyazású motoroknál az áramfelvétel szinte nulla. Próbáld meg folyamatosan terhelni, pl. fúrj át vele egy 5mm-es acéllemezt. Lehet hogy a tranyó jobban fog melegedni mint a fúrófej. Idézet: Amikor a gép dolgozik - anyagban halad javarészt a fej. Nem robot aerobikozik. „23 órát dolgozott végig a motor a cnc-n” A hozzászólás módosítva: Feb 29, 2016
Szerintem elszámoltál valamit. 4,5A és 1,5Ohm esetén 30,375W-ot kell eldiszipálni 100%-os kitöltési tényező mellett. Persze a 1,5Ohm elég nagy, ennél sokkal kisebb ellenállások a jellemzőek a teljesítmény FET-eknél. Viszont ha nem 100% a kitöltési tényező, akkor oda kell figyelni a kapcsolási veszteségekre is.
Egy olyan FET-nek, aminek 5V-on garantaljak a minimum Rdson erteket, teljesen felesleges 12V gate feszultseget adni. Sot, ami azt illetei, csak ront a helyzeten, mert a lezarasa csak lassabb lesz, mert felesleges toltest kell kivenni a gate kapacitasbol. Hogy mennyire kell nagyaramu meghajtas a gate-hez az pedig a PWM frekvencia fuggvenye. Ahol a te 680 ohm-os passziv lezarasod elegendo, ott egy 5V-os AVR kimenet is az lesz, ha logic gate-ű a FET. Pl. IRL540. 10V a max Vgs... Gondolom, vannak nagyobb aramu peldanyok is ilyen gate-tel.
Idézet: „Építgetek egy termosztátot. Rádióval kellene kommunikálnia a Pi-n futó OpenHAB-bal, gateway-en keresztül. C-ben, Studióban programozom. Találtam egy csomó library-t a MYSensors projektben cpp-ben amit tudnék használni. Tudom használni a programomhoz vagy nekem is át kell állnom cpp-re?” Erre valaki? Nagyon hülyét kérdeztem? Még sohasem használtam cpp-t.
Talán ez a kisfilm segít neked!
Create a New C Project for GCC in Atmel Studio: Bővebben: Link Annyi a különbség, hogy a GCC C++ menüpontok közül választod valamelyiket. Alkalmazást vagy Lib-et akarsz fordítani. És hozzáfűzi a megfelelő lib.eket a projectedhez. Igaz 8bites AVR-eknél nem igen használjuk, mert pazarolja a memóriát! A hozzászólás módosítva: Feb 29, 2016
Akkor nem írtam világosan. Már majdnem kész a program C-ben.
Tudok C++-os lib-et használni, vagy a, újra kell írni az egész programomat C++-ban, vagy b, át kell írnom a lib-et C-ben?
Sziasztok!
Mondhatni erősen kezdő vagyok az elektronika terén, eddig csak ledeket, meg motorokat forrasztgattam ide-oda, tehát nincs nagy tapasztalatom. Viszont a C nyelv, közel áll hozzám és szeretnék egy Arduino-t. Viszont az úgy nem érdekes ha csak megveszem a boltban tízszeres áron, jó lenne összerakni egyet. Szóval: Adott, egy ATmega328-as IC. Elvileg, 16MHz-es sebességen 5V kell neki és kb 40-50mA. USB-ről szeretném működtetni, de elvileg zajos a PC-n lévő usb, illetve a telefontöltők is (4.8-5.2V között ingázik talán, de ez nem 100%). Hogy tudnám stabilizálni 5V-ra a feszültséget? Nem szívesen sütném meg az IC-t. Illetve problémás ezt a kis eszközt egy 800mA-es Sony telefontöltőről működtetni? Vagy csak annyi áramot vesz fel amennyi épp kell neki? A válaszokat előre is köszönöm! |
Bejelentkezés
Hirdetés |