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 a 16 azt jelenti hogy 16 Kbit, vagyis 2048 Bájtot tárolhatsz. 2KB címezésére 11 bit szükséges (8 bit word adress + 3 bit block adress).
Szia köszönöm a választ. Végül is sikerült letöltenem egy szoftveres I2C portot, így nem kell a hardvereset használnom, ráadásul bármelyik portot használhatom.
Nem teljesen tiszta még...
A 2048 bájt azt jelenti hogy 2048 karaktert tárolhatok? Az atmega32-ben 1024 bájt eeprom van, abban 1024-et? És 0-1023-ig címezhetem?
Sziasztok. Van egy DS1307 RTC-m. Ha kiolvasom belőle a dátumot és az időt és elmentem, majd később ismét kiolvasom, hogy tudom kiszámolni, hogy mennyi a két dátum és idő különbsége? Mert bejátszik ugye a szökőév, meg minden. Van erre valakinek ötlete? Egyszer volt hozzá egy kódom, de az istennek nem találom, pedig ma egész nap kerestem.
Idézet: Egy nap alatt meg is irhattad volna, kb 10 sor „Egyszer volt hozzá egy kódom, de az istennek nem találom, pedig ma egész nap kerestem” ![]() Az a legegyszerubb, ha a dataum/ido adatodat atalakitod linearis ido formatumra (UNIX time). Ez kb. annyit teszt, hogy egyetlen szammal abrazol egy idopontot, megpedig ugy, hogy megmondja, hogy hany masodperc telt el 1970 januar 1. 0:0:0-tol a megadott idopontig. Ha mindket datumot atalakitod ilyen formatumra, akkor csak ki kell oket vonni egymasbol es megkapod a kulonbseget masodpercben. Itt egy hevenyeszett megoldas, nem garantalom, hogy jo, de kiindulasnak jo lehet. Az egyszeruseg kedveert nem 1970 az EPOCH hanem 1984, mert az szokoev volt. Ha ennel korabbi datumokkal akarsz dolgozni, akkor valassz egy korabbi szokoevet kiindulasnak. Ez a modszer 32 bites eredmenyt ad, es ezzel nagyjabol 136 evet lehet atfogni.
A hozzászólás módosítva: Jún 19, 2014
14. sor hibas, helyesen:
Köszönöm, ez hasznos volt!
![]() Amúgy a table tömb milyen adatokat tartalmaz? Honnan jönnek ezek a számok?
Közben rájöttem
![]() Amúgy nekem bőven jó 2000-től kezdeni a számolást, az évszámnak meg amúgy is csak az utolsó 2 számjegyét tárolom (2014 esetén 14-et) tehát én ezt az EPOCH-os dolgot ki is hagyhatom, ugye? És akkor így fog kinézni a kód:
És még annyi, hogy a
napok = ev * 365 + (ev + 3) / 4; sor helyett lehet írni napok = ev * 365 + (ev + 3) >>2; ezt is, nem? Elvileg ugyanazt jelenti és a shiftelést valószínű gyorsabban végrehajtja mint az osztást.
Akkor jelenti ugyanazt, ha bezarojelezed:
ev * 365 + ((ev + 3) >> 2); A muveleteknek kulonbozo precedenciaja van. Amugy egy rendes fordito magatol is tudja, hogy neggyel osztashoz nem osztorutint hiv, hanem shiftelest. Idézet: „Elvileg ugyanazt jelenti és a shiftelést valószínű gyorsabban végrehajtja mint az osztást.” A XXI. században a legtöbb fordító képes automatikusan megállapítani, hogy /4 helyett shiftelni is lehetne, sőt amikor 256-tal osztasz egy 16 bites számot, akkor nem is shiftel, hanem a felső byte-ot veszi. 16-tal való osztásnál meg az alsó és felső félbájtot cserélgeti. ![]() A hozzászólás módosítva: Jún 20, 2014
Sziasztok!
Szükségem lenne ATmega32-t tartalmazó projektemben óra kijelzésre. 16MHz-en fut. Azt számoltam hogy 1024-es előosztó (TCCR1A, B-ben beállítom) és OCRH,L=15624. Jól számoltam? Így az ISR(TIMER0_OVF_vect); 1 másodpercenként fog lefutni?
Az (ev % 4) helyett meg irhatod azt, hogy (ev & 3).
Miért nem használod ?
![]()
Sziasztok!
Roland: köszi, leellenőriztem. Olyan problémával állok szemben, hogy egy gsm modul adatait szeretném feldolgozni. Hogy érdemes megcsinálni? Arra gondoltam hogy az uart isr-ben dolgozom fel. Tök jó lenne de 19200 baudon kommunikál és sok feltétel, lcd kiírás lenne benne, ami idő. Van rá korrekt megoldás?
Üdv. Egy egyszerű kérdésem lenne. AVR-el szeretnék 7 szegmenses kijelzőt meghajtani. Egy mintaprogramot szeretnék kérni basic nyelven ha lehetséges. Most tanulgatom a nyelvet és nem tudom miként lehet ezt megvalósítani.
Én még nem is hallóttam AVR + Basic IDE megoldásról?
De holtig tanúl az ember, irhatnál valami linket róla!
Üdv!
Egy fura és bosszantó probléma megoldásában kérném segítségetek. Egy ATmega8-as timer2-vel vezérlek egy servot. Amíg a Topi-féle programozóról kapja a tápot, tökéletesen működik (az usb-ről 5,18Volt jön). A probléma akkor kezdődik amikor 9voltos elemről 5v stabic-n keresztül táplálnám (4,98V). A servo akadozva elfordul, majd az egyik végállásban megáll és zúgó hangot ad ki. Az avr 8Mhz-es külső kristályról fut, 256prescaler a timer2-n, így ~8ms a servo vezérlőjele. (nem hinném hogy ez a gond mert egyik esetben működik így is) Kipróbáltam másik M8-al is de ugyanezt tapasztaltam. Minden ötletet, segítséget előre is köszönök! Üdv: Iván A hozzászólás módosítva: Jún 21, 2014
Mekkora puffer kondi van a stabilizator elott es utan? Van 100nF az m8 labahoz minel kozelebb?
Szia! Előtte 100nF, utána 1µF adatlap alapján. Az m8 lábainál a kristály mellett 22pF illetve az adc Aref-nél 10nF szintén adatlap szerint. Az egész egy kisméretű próbapanelon van (dugdosós).
Kipróbáltam a plusz 100nF-t közvetlen a 7-8as láb mellett, de sajnos nem változott.
Szia!
megránthatja a tápot, bezavarodik a vezérlő. Induláskor megrántja a tápot szervó motorja és a 7805 "lassan" reagálhat rá. Próbáld ki, hogy külön 5V-os stabilizátort adsz a szervónak és külön a vezérlőnek. Illetve nincs merülőfélben az elem ? A hozzászólás módosítva: Jún 21, 2014
BASCOM-AVR programot használok, úgytudom az basic nyelvű. Még csak most tanulgatom ezt, lehet hülyeséget írtam.
Üdv!
Igazad volt, a táplálás volt gyenge. Nem csak az elem de az első hálózati táp is kevés volt. Találtam egy másik régi tápot is, ami 1,3A-t tud leadni, ezzel jól működik. (az első táp 170mA-t adott, gondoltam annyit csak nem fogyaszt a uC és a szervó, de úgy látszik mégis kevés volt). Köszönöm a segítséget! Üdv: Iván
Akkor ide regisztrálj: avr.tavir.hu
És olvasd a: Tavir honlap > régi oldal > bascom könyvet. Az alapokat meg tanulhatod.
Nekem LM2596-tal lesz megoldva a táplálás, ami 3A-t tud, szintén szervo fog menni az AVR mellett róla. A szervó elvileg nem vesz fel 2A-nél többet, ha berakok a szervó elé egy 2,5A-es biztis, akkor nyugodtan mehet egy tápról az uC-vel, nem? Mert ha elakad a szervó vagy ilyesmi 2,5A-nél úgyis leold a bizti és nem resetel az AVR, jól sejtem?
Szia!
Biztosítéknak mindig van értelme (jobb félni mint megijedni) de egy tápfesz megrántás tizedmásodpercek alatt következik be, amitől újra indul a vezérlő (és keresed a programodban a nemlétező hibát), de a biztosíték még fel se fogta, hogy csinálnia kellene valamit. Sajnos láttam már több olyan biztosítékot ami megfelelően volt méretezve, de a hirtelen rövid nagy áramlökéssel nem tudott mit kezdeni és inkább az érzékeny félvezető ment tönkre, mint a biztosíték. Egyébként ökölszabályként ajánlhatom, hogy a teljesítményigényes dolgokat és a vezérlést legjobb külön tápfeszültségről járatni. Az induktív terhelésekben az a jó, hogy tudnak visszalökni a táphálózatra, ez ellen viszont a stabilizátor IC nem véd és tönkreteheti az vezérlőt. Legjobb a teljesen külön áramforrás, de már az is sokat jelent, hogy ha egy akkuról megy, de külön stabilizátora van.
Rendben, akkor külön rakom, bár ez nem a legjobb hír, mert így két kapcsolóüzemű táp kell (35V bemeneti fesz. miatt nem használhatok 7805-öt).
|
Bejelentkezés
Hirdetés |