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
Hello!
Ilyen nincs! Én mindig csak memóriákat találok? Nagyon köszönöm a válaszokat. Meg fogom nézni azt az adatbázist, köszönöm. Most néztem a panelt, amin volt ez a memória, és van mellette egy UA8560D (40lábas). Most nem kerestem hozzá adatlapot. Bocsi a hülye kérdésekért, de az se lehet vezérlő?
L8560 az különben egy Low-Power SLIC with Ringing
és 44 lábas PLCC tokozásban üldögél mindenféle ISDN termiál adapterekben fellelhető cél ic. Telefon kisközpont .. Meg számodra van még egy jó ötletem: AllDAtaSheet Amit itt nem találsz az nem létezik vagy esetleg olyan cél ic amit külön megrendelésre gyártottak és nem került közforgalomba ergo nincs adatlapja. Aztán alul ami van egyezést fogod és bemásolod a webforditas -ba és megnyomod a fordít gombot.(pdfet azt hiszem még nem tudnak fordítani weben)Ebből kiderül hogy nagyábból milyen icvel állsz szemben.
Affene, és épp most felejtettem el arabul
Egyébként nagyon jó, köszi, elteszem ezt az oldalt! Vettem egy atmega8-at, nem összeg, meg egy alfanumerikus kkijelzőt, csinálok a számoláshoz egy kis effektet Parasztvakítást
Atmega8 pc6-os lábát nem bírom rávenni a működésre... Mint átírom pl a pc5-re, egyből megy a program. Kimenetként szerepel, mint a többi is.
Ez miért lehet? Több procival is próbálkoztam
Azért mert az a Reset láb is egyben...
Ha a fusebiteknél beállítod, máris használhatod I/O-nak, de ezzel a lépéssel megszűnik az ISP programozási lehetőség. Ezután csak párhuzamos programozóval tudod programozni a kontrollert. (persze ha visszaállítod a fusebitet, ismét működik majd ISP módban is.)
Hello!
Ebből nem sokat értettem, de annyit kivettem, hogy ez se jó semmire. (max a szekrény lába alá, hogy ne billegjen ). Köszi azt az adatlapos oldalt, el is mentettem... "amit itt nem találsz az nem létezik" ez jó, ezt megjegyzem. Webfordítást szoktam használni, jó oldal. Már csak egyet szeretnék kérdezni. (ha nem baj) Ilyen AVR-t, vagy PIC-et lehet találni bármilyen bontott elektronikai alkatrészben? Vagy csak rendelni lehet ezeket? Mert ha nem, akkor asszem egy ideig nem fogok álmodozni az égetésről, meg hogy vezérelni fogok valamit... Köszi , üdv: JĐ
szerintem kisebb elektronikai boltban is pár száz
forintért lehet már kapni
Köszönöm, ezt jó tudni. Erre nem gondoltam volna
Még egy Atmega8-as kérdés: programozás előtt be kell állítani AVRStudióban a frekvenciát, majd meg kell adni a processzornak is, hogy belső X megahertzes oszcillátort használjon. Én beállítottam mindkettőre 1MHZ-t, de ekkor egy 10ms-os időzítés 1másodpercként hat. Ez miért van, illetve hogyan állíthatom be, hogy ~valós delay-t kapjak? Köszi!
Gyárilag az Atmega8 1Mhz -es RC Oszcillátorra van konfigutrlálva, így ezzel nem sok tennivaló van. Ami szerintem neked elrontja az időzítéseket, az a kód optimazálás. Kapcsold a kód optimalizálást a projekt tulajdonságoknál "-O0" -ra. Ez minden optimalizálást kikapcsol. Ezáltal ha ciklusokkal akarsz késlelteni, akkor valóban anyi lesz e delay, amit előzőleg kiszámoltál. Bár jobban belegondolva, az optimalizáció általában röviditi a program futási idejét, így a szépen kiszámolt delayek rövidülni szoktak. Nállad meg hosszabb lett a delay... Mindenesetre egy próbát megér.
Ahhá, köszönöm, ezt nem is tudtam, hogy mire való. Sajnos csak "-Os" optimalizációval fér bele a program az atmega8-ba
Kicsit túlbonyolítottam. Alfanumerikus kijelzőn minden egyes segmenst definiáltam egy kimenethez, és minden egyes betűt-számot definiáltam az előzőleg definiált segmensekkel. Lehet ezt egyszerűbben is? Tömbökre gondoltam, de azt nem tudom hogyan kell, pedig azt lehetne léptetni is for ciklussal is, és nem kéne mindet beírni, amit meg akarok jeleníteni Ha valaki nagyon ráér, belekukkanthatna. Egyedül az időzítés lenne a lényeg. ami jelenleg minden lefordításnál kicsit változik, illetve csak saccolható, és utólag kell "kalibrálni".
Valóban nagyon túl bonyolítottad, mivel egyenként kapcsolod be minden egyes szegmentet. Ezt úgy kéne megoldanod, hogy az 1 Porthoz tartozó szegmenseket egyszerre kapcsolod be. Mivel B,C,D portot is használod, így 1db karakter eltárolásához kell 3db byte ha jólszámoltam 34 különféle karaktered van így összesen 34 * 3 byte = 102 byte kell az összes karakter eltárolásához. Mivel minden karakterhez 3 byte tartozik, így könyen tömbbe lehet őket rendezni és csak azt kell tudnod, hogy az adott karakterhez melyik az első byte. Akár az EEPromban is lehet ez a táblázat és akkor nem foglal semmi helyet a flash-böl.
Portos megjelenítésre gondoltam én is, jelenleg csak 1.0 jelleggel ment a dolog, viszont jelenleg epromhoz még nem kostoltam hozzá, így az még sok-sok olvasást vár el tőlem. Na meg a tömbök is.
Jól hangzik amit írtál, meg egyszerűnek, remélem hétvégére már meg is értem majd
Valami ilyesmire gondoltam:
Ez nagyon jó
Köszönöm!
Nem tudja valaki véletlenül, hogy az AVRDUDE-al hogyan lehetne úgy programozni a FLASH memóriát, hogy mellette ne törölje az EEPROM-ot. A -D azaz a törlés megakadályozása esetén nem töröl semmit, így csak akkor jó, ha a program nagyobb. Azaz jónak lehet jó, csak nem tudhatom pontosra hogy sikerült e a programozás.
Nem az AVR-ben lévő egyik fuse bit mondja azt az AVR-nek, hogy a törlés az EEPROM-ra ne vonatkozzon?
Helló!Megcsináltam Topi cikkében lévő villogót, de nem igazán úgy megy, ahogy kellene. Villogni villog, de vagy 5 másodpercenként vált a led. Ez mitől van? Mindent úgy csináltam, ahogy a cikkben van.
Dehogynem, a "Fusebit High G" .
Ha "0", akkor megörzi az eeprom tartalmat. Ha "1", akkor törli.
Megoldottam! A ponyprogban a config biteknél a clkdiv8-ból kivettem a pipát és megy is rendesen. Gondoltam, hogy valami az időzítéseknél lesz, de a lényeg, hogy rájöttem.
Pedig írva vagyon, hogy azt ki kell venni... Dehát hiába
Üdv.
Volna egy kérdésem, hátha valaki látott már ilyet. Egy vezeték nélküli szobatermosztáton ügyködök, haladgat a dolog de most kicsit megakadtam. atmega8. az időmérés egy 32.768khz-s kvarcról megy, mégpedig a timer 2 asynchronous módjában, másodpercenként összegyűlik egy interrupt, közbe meg power save módban alszik az uc. Az lene a gondom, hogy ha a timer 2 interruptot kikapcsolom akkor nagyon szépen bealszik és uAeket vesz csak fel. ha a sleep módot kiveszem akkor nagyon szépen méri az időt, ahogyazt kell. viszont ha bekapcsolom a sleep-et is meg a timer 2 interruptot is akkor megbolondul.. ekkor az áramfelvétel szerint nem altatja el magát, illetve még annyira jöttem rá hogy egyszer belép az interruptba, aztán utána "semmit" nem csinál, mintha megfagyna, nem reagál nyomkodós interrupra sem, semmi.. Valakinek vmi tippje? csatolom a forrást, hátha az segít.
Üdv!
Kérdés: hogyan lehetne megoldani a rövid-hosszú gomblenyomás szétválasztását egyetlen nyomógomb esetén? Próbálkozok jelenleg is egy kóddal, de még nincs kész, esetleg van már valaki, aki próbált ilyet?
hát én valahogy így csinálnám, lehet h fapados, de akkor majd írnak jobbat
Válasz magamnak :
Az interrupt eljárás a program optimalizálatlansága miatt túl hosszú ideig fut, hosszabb ideig mint 2 interrupt meghívása közti idő, így sosem tudott elaludni és mindíg az interrupt közben jött az újabb interrupt.
Nah úgy tűnik korai volt az örömöm
félreértelmeztem a jelenségeket, nem a timer2 és a power save volt a fő felelős, hanem a power save és a i2c busz. most hogy visszaraktam az i2c-s hőmérést megint ugyanúgy megáll az élete. ha nincs power save-be lépés akkor megy rendesen az i2c, ha nincs i2c kommunikáció akkor megy rendesen a Pow. s., viszont ha elmegy aludni és utána vmikor kiszeretnék olvasni egy hőt az i2c-n akkor vége a dalnak. Esetleg valaki ilyennel találkozott?
Válasz magamnak :
Úgy tűnik ez egy bug az avr i2c-jében. ha valaki hasonlót tapasztalna a megoldás a következő linken van: http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=22549 (legalsó hozzászólás) idemásolva brberie hozzászólását: I reported this problem to ATMEL.. Taylor Cox ATMEL AVR Technical Support ------------------------------------------------------------------------------- AVR Support E-Mail mailto:avr@atmel.com My solution is:
---- ergó ezt minden sleep mode után el kell játszani. (ez volt 2004-be, úgy tűnik azóta se sikerült javítaniuk atmeléknek ezt a bugot. eh)
Nagyon egyszerü kell egy timer ami mondjuk 100msec -enként lép 1-et. A program ciklikusan lekérdezi a gombot és ha az le van nyomva akkor elindítja a timert. Ha már fut a timer és lenyomva van a gomb akkor nem indítja ujra el a timert. Viszont ha fut a timer és nincs lenyomva a gomb, akkor a program leállítja a timer-t. A timer értéke fogja tartalmazni hogy hányszor 100msec ideig volt lenyomva a gomb. És azt már a te döntöd el milyen timer érték fölött számítod hosszú gombnyomásnak az eseményt. Remélem értehtő volt.
Köszönöm válaszaitokat, ez gyógyír problémámra.
Öröm boldogság
Nem lenne egyszerűbb így csinálni?
1. A timer mindig jár, s minden órainterruptnál ránéz a nyomógombra. 2. Ha a gomb le van nyomva, akkor megnövel egy számlálót. Ha pedig fel van engedve, és a számláló nm nulla, akkor nullázzuk a számlálót. 3. Nullázás előtt azonban megnézzük, hogy mennyi is a számláló értéke, s ennek megfelelően küldünk egy eseményjelzőt (vagy beállítunk egy jelzőt) a főprogram számára, ami tugadtja, hogy rövid vagy hosszú nyomás történt. (A rövid nyomásnak is kellene egy limitet szabni, aminél rövidebb nyomás pergésnek számít és eldobandó) 4. A főprogram pedig figyeli az eseményjelzőket, s teszi, amit tennie kell.
Természetesen amit leirtam, az csak az alap elv. A te megoldásod már egy jobban kidolgozott koncepció. Ha én fognék neki a konkrét megvalósításához valószínű én is megszakításos rendszerben csinálnám, hogy a főprogramnak minél kevesebb gondja legyen ezzel.
|
Bejelentkezés
Hirdetés |