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
Érdekes, hogy a MS Visual Studio elkeféli az AVR Studio programot.
Pedig hát abban írták... Szóval levettem az MS-t, újra telepítettem az AVR-t, és lőn csoda, megnyílnak a projektek. Ez van.
El tudsz képzelni olyan programot ahol a főprogram részben nincs is portbillegetés? Csak az állapotgép ami néhol változókat ír/olvas, amiken keresztül az időzítő közreműködésével eléri a hardvert?
És olyan alkalmazást ahol egy gombnyomás 50ms-os késleltetése már számít? És ha egy 100ms nyomvatartás után felengedem, azzal nem érzékel(het) lenyomást is? Idézet: El tudsz kepzelni olyan programot, ahol nincs olyan, hogy foprogram, mert multitask-os az egesz? Mert en ilyeneket irok husz eve. Marpedig ott baromira kell figyelni az eroforrasokra. Barmikor megszakithatja egyik process a masikat. Ezert a kozosen hasznalt dolgokat (resource - eroforras) vedeni kell. Erre sok modszer van.„El tudsz képzelni olyan programot ahol a főprogram részben nincs is portbillegetés? Csak az állapotgép ami néhol változókat ír/olvas, amiken keresztül az időzítő közreműködésével eléri a hardvert?” Szoval igen, el tudok kepzelni olyat, hogy a PORTB-t egy driver-en keresztul lehet elerni. Ennek a driver-nek a legegyszerubb fajtaja az, amikor te csak egy vagy tobb valtozot allitasz be, es mondjuk a billentyuzet kezelo megszakitas a valtozo(k) alapjan allitja be ugyanazon a porton a tobbi bitet is. Amiert en felhoztam ezt a PORTB peldat az az, hogy ha valaki megszakitasbol allitgatja, akkor meg fog lepodni, ha a foprogramjabol is allitgatni probalja. Csak felhivtam ra a figyelmet, azaz segiteni probaltam. Idézet: Az öt szazad masodperces nyomogomb reakcio szerintem akkor lehet problema, ha kifejezetten reakcióidő-mérő keszuleket epitesz. Mert egyebkent nem hiszem, hogy lenne jelentosege. Ettol fuggetlenul, a sajat munkaimban 20-25 millisecenkent szoktam mintavetelezni, de altalanossagban elfogadott a 10-50ms. A tiz feleslegesen gyors, az otven talan a hatar. De ettol meg a prellmentesitesnek ez a vilagon a legegyszerubb modja. „És olyan alkalmazást ahol egy gombnyomás 50ms-os késleltetése már számít?”
Hello!
Egy lcd kijelző (HD44780) meghajtásához mekkora órajel szükséges?
Hello!
A minimális frekvenciára tudtommal semmilyen megkötés nincsen. Akár 1 Hz-ről is hajthatod, ekkor persze értelemszerűen olyan sebességű is lesz a megjelenítés. Hogy mennyi a max. órajel azt nem tudom adatlapból szerintem kiderül. De nem sok esély van arra, hogy azt elérd vagy meghaladd.
Szerintem a többség nem driverekben, multitaszkban gondolkodik, inkább portlábakban meg célokban.
Az előzőhöz elfelejtettem hozzátenni: a PORTB |= 1; (AVR-nél) nagyon is atomi művelet, nincs benne olvasás! Ahogy a PORTB &= ~(1<<3) is az! Ezeket egy valamire való fordító sbi és cbi utasításra fordítja(most ellenőriztem: az enyém is). Más esetben lehet hogy hibás működés az eredménye egy (pl. PORTB|=3) műveletnek, ha közben a megszakítás szintén írogatja ugyanazt a portot. A fotó a legutóbbi munkámról készült. Ebben minden hardverspecifikus részt(kijelző, billentyűzet, játékost jelző LED-ek) az időzítő megszakítás kezel. A LED-es rész csak azért került oda, mert villogtatni is akartam, ehhez az állapotgépben nem elég egy portbillegetés. A cucc portkiosztása elég vegyesre sikerült(a hardverterv nem az én művem, ahogy a szkin sem), minden periféria legalább két AVR-es portot érint. Mondhatni, hogy a LED-es rész átrakása egy csomó szívástól mentett meg? A hozzászólás módosítva: Feb 6, 2016
Hogyan lehet ATmega328-al véletlen számokat generálni?
Egymás után kellene 6-ot. Viszont van DS1307-em. Esetleg csinálni egy unix timestamp-et (ezt elosztani valamennyivel...) és ezt beadni az srand-ba? Az a lényeg, hogy a 6 számot minél gyorsabban legeneráljam, abszolút maximum néhány másodpercem van rá.
Felhasználói beavatkozás(pl. gombnyomás) után kell generálni?
Tudom unalmas vagyok már,de akkor is megkérdezem
Gombnyomásra jól működik. forog jobbra ,balra 2-2 mp. De nem áll le a motor,ha a portlábak ismét ki vannak kapcsolva Valami megoldás erre? Tudom nem a legjobb az optós megoldás,de csak ez van
Ha ez a próbapanelon is így van bekötve, akkor be kellene tenni a processzor kimenetére (az optocsatoló LED elé) egy-egy áramkorlátozó ellenállást első sorban...
Némelyík opto, akár 1V feszültséggel is képes működni, így akár félig meddig nyitva van a tranzisztor, ha alacsony a jelszint akkor is. A relé meg általában úgy működik, hogy van egy behúzási feszültsége (ami magasabb) és egy tartási feszültsége. Tehát PL egy 5V-os relé meghúz 5V -nál, de ha csökkented a feszültséget, lehet még 3V -nál is be van kapcsolva. Az optocsatoló meg lehet átvezet annyit, hogy ez a feszültség a tartási feszültség fölött marad alacsony szintnél is. A hozzászólás módosítva: Feb 6, 2016
Azért nem áll le, mert egyenáramú áramkörben triakot használsz. Az csak akkor kapcsol ki, ha nem folyik rajta áram. A triak váltóáramhoz való, egyenáramnál úgy viselkedik, mintha beragadna, mint kapcsoló.
A hozzászólás módosítva: Feb 6, 2016
Mi lenne ha nem optoTRIAK-ot használnál egyenáramú cucc meghajtására?
A hozzászólás módosítva: Feb 6, 2016
Idézet: Sokan megszakitasbol akarnak teljes i2c muveleteket elvegezni (pl. az orat beolvasni), mikozben a foprogramjuk meg az i2c buszon eppen az EEPROM-ot probalja olvasni. Na, ezert szoltam en, hogy az ilyen eroforrasok kezelesenel korultekintoen kell eljarni.„Szerintem a többség nem driverekben, multitaszkban gondolkodik, inkább portlábakban meg célokban.” Lehet, hogy a PORTB |= 1; az atomi muvelet lesz, de a PORTB |= rows[nextrow]; mar biztosan nem. Es ha te minden megszakitasban a kovetkezo sort valasztod ki, akkor kezenfekvo, hogy egy tablazatban vannak leteve a portbitek.
Igen! És generálás után ellenőrizni, hogy van-e már ilyen elmentve az eepromban a többi 400db kód mellett. Ha van akkor újat kell generálni.
Véletlenszám generálás pszeudo-randommal megy. Néhány szorzás és összeadás, kiszedheted a java Random osztályából. Induláskor véletlen magot generálsz, amiből a véletlen szekvencia menni fog (kezdő véletlen értékre hasonlít).
Lehet igényes és igénytelen random mag (seed) generálás. - igénytelen: ADC-n lebegő lábat olvasol többször - igényes: a watchdog belső rc oszcillátort használ, ami frankó jó szórású véletlen mag készítéséhez Én igénytelenkedek: 256 ADC, összes csatorna olvasásával A hozzászólás módosítva: Feb 7, 2016
Ez nagyon jó. Akkor így szól a "véletlenszám-generátor": elindítasz egy számlálót valamilyen sebességgel. Ha megtörténik - valamikor - a felhasználói beavatkozás, akkor megnézed a számláló értékét és AZ lesz a generált érték. A számláló legyen elég gyors hogy bekapcsolás után "rendelkezésre álljon" az összes érték, de túl gyors se legyen: ha gyors akkor egyes értékek valószínűsége megnő, míg más értékek kiesnek a pörgetésből. Persze ezzel csak egy értéket lehet generálni, de a generált értéket bitenként szét is lehet szedni. Ha már benne van az EEPROM-ban az érték, akkor nincs más dolgod, mint az ellenőrzés után újra ránézni a számlálóra. Bár az EEPROM olvasás majdnem konstans idejű, mivel már előtte is "véletlen" volt az érték, a konstans+véletlen is véletlen érték lesz...
Egy PORTB |= rows[nextrow]; típusú művelet magában a megszakításban szokott lenni, azt pedig általános esetben nem szakíthatja meg más. Inkább a főprogram rész aminél figyelni kell, ott egy PORTB |= 1; nem okoz gondot a művelet atomi volta miatt.
I2C megszakításból? Soha nem mertem megcsinálni. Vegyesen (megszakítás+főprogram) főleg nem. A hozzászólás módosítva: Feb 7, 2016
Köszönöm a segítséget a moc3021 helyett a 2n1711 kellett és máris tökéletes amit csinál
Egy olyan kérdés ,hogy lehet azt megcsinálni,ha lehet, hogy a motor irányváltáskor azonnal megálljon. Gondolom nem használ a motornak,de azért megkérdem
A főkapcsoló relénél kösd be a másik érintkezőpárt is úgy, hogy kikapcsoláskor "rövidre zárja" a motor kimeneteit. Generátorüzemben üzemi fordulaton ez elég sokat fékez, de amikor már lassan forog nem sokat használ. A két relét meg kellene cserélni, hogy a fékezésbe az irányváltó kikapcsolása ne zavarjon bele.
Köszönöm a válaszokat! Még át kell gondolnom.
A számláló alatt timert értesz? Az csak egy számot generál hacsaknem többet különböző időben indítok. Csabeszq: A pszeudo random generátorra egy példát tudnál adni? Ezt a javasat nem értem honnan kell bekopizni. Esetleg ha van időd be tudnád másolni?
Sziasztok.
Mit tudtok az AVR jovojevel kapcsolatosan, erdemes-e uj aramkorbe alkalmazni, vagy inkabb valasszak mas uC-t ?
Második negyedévben zárul le a tranzakció,szóval nem tudni.Én is nézegetem már az Stm8-at,használta már valaki ?
Idézet: Ezt ugye te magad sem gondoltad komolyan!„Egy PORTB |= rows[nextrow]; típusú művelet magában a megszakításban szokott lenni,” Es ha valaki annyira zsilett programozo, hogy nem csak megszakitasban hasznal PORTB |= valtozo; muveletet, azzal mi van? Ne bosszants mar! En csak felhivtam a figyelmet egy olyan dologra, amivel sokat lehet szivni. Az, hogy ez a te post-oddal kapcsolatban jott elo, az egy dolog. Es mi van akkor, ha PORTB |= 3; mert mindket LED-et akarja bekapcsolni egyszerre. Az SBI csak 1 bitet tud egyszerre beallitani.
A 8 bites szegmensen évekig nem fog változni semmi. Az AVR-es termékpaletta max. annyiban szűkül hogy nem lesz m168+m168a+m168p+m168pa, hanem csak egy fajta m168 és így tovább.
Jó eséllyel kivezetnek pár népszerű típust amelyek helyébe visszafelé kompatíbilis, nagyobb tudású IC-k lépnek. Pl. lehet hogy a t2313 eltűnik, helyette csak t4313 vagy t8313 lesz. Az ATTiny2313-ból az ADC sokaknak hiányzik (csak ez miatt nem váltanak a halálra ítélt ATTiny26-ra), lehet hogy a kompatíbilis utód kap ADC kiegészítést is. Meg persze órajel emelés is bejöhet. Azt se illik elfelejteni hogy az Atmel nem csak mikrokontrollereket gyárt, ott van pl. az AT24Cxx sorozatú EEPROM, ezt sem állíthatják le egyik pillanatról a másikra, átcímkézik de ugyanaz lesz. A hozzászólás módosítva: Feb 7, 2016
Aztán rászállnak a Studio-ra és fizess érte,ha jó C fordítót akarsz.
Vagy azt is egységesítik és ingyenes lesz.
A WinAVR, és az Eclipse-IDE is eredetileg opensource kezdeményezés volt, ezért kerülhettek bele a szintén ingyenes AVR Studio-ba. A Studio4 ma is ugyanúgy használható mint 10 évvel ezelőtt, és amíg forgalomban vannak a "régi" IC-k addig nem változik semmi. Az AVRDUDE a mai napig opensource... A hozzászólás módosítva: Feb 7, 2016
Igen, beallitja ketszer, ha tudja, hogy kulonben baj lesz. Ezert szoltam. Hiaba is vitatkozol.
Megnéztem, hogy én hogyan csináltam pszedudo-randomot. Sehogy, az avr-libc-t használtam.
Egyetlen hátulütője, hogy mindig ugyanazokat az eredményeket adja (ahányszor elindítod, mindig 1,15,16,4,... lesz), ezért be kell állítani a random magot (kezdő véletlen).
A hozzászólás módosítva: Feb 7, 2016
|
Bejelentkezés
Hirdetés |