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
Két akksiról akarom egyszerre táplálni, de nem maszek párhuzamban mert az úgy ugye nem jó.... Lényegében nem pontosan ide illik a topik, most épp AVR-es eszközhöz merült fel ez a kérdés. Lényeg annyi, hogy ez a dupla dióda akkor elvileg azt csinálja, hogy amelyiknek nagyobb a feszültséges, azt terheli, plusz fontos hogy megadott ideig ne maradjon táp nélkül a berendezés.
Tehát akkor menet közbeni akksi cserét is megenged táp kimaradás nélkül ez a megoldás.
Esetleg tudnál mutatni FET-es kapcsolást erre, nem diódásat ?
Hát, most már nem vagyok teljesen biztos benne, hogy ez a korrekt megoldás erre.
De Reggie kolléga hacsak nem mond valamit, akkor valszeg csak jó lesz ez. A FET-es kapcsolásra nem tudok hirtelen semmit linkelni, de annyi a lényeg, hogy kivezérled a teszem azt N csatornás FET-et nyitásra, és akkor szépen folyik rajta az áram. Ha ugye fixen bekötöd a GATE -jét, akkor lebutítod egy diódára.
Nem inkább P csatornás kell? Persze jó az N is ha a negatív oldalt akarod kapcsolni.
Egyébként a FET nem használható diódaként, mivel a drain és source feszültségviszonyai nem cserélődhetnek fel! Márpedig diódaüzemben ez történik. Ezért is van védődióda a legtöbb FET-ben a source és drain között, hogy ezt megakadályozza! Apropó, védődiódás FET: ez olyan mintha fogsz két diódát, antiparalel módon bekötöd mindkét akksira! Szóval, két akksinál vagy elem+táp esetén a megoldás, ha 1-1 schottky-diódával "közösíted" őket. Azért jobb a schottky mert kisebb a nyitófeszültsége, de mezei diódával is menni fog! A hozzászólás módosítva: Szept 15, 2012
Nem a FET-et kell hasznalni diodakent, hanem a diodaval parhuzamosan kell kotni. Ezt akkor szoktak alkalmazni, ha a diodan nagy lenne a vesztesseg(nagy aram vagy a dioda nyitofeszultsege jelentos a feszultsegforrashoz kepest. A ket oldal feszultsegviszonyabol hatarozzak meg, hogy melyik FET-et kell bekapcsolni.
Ket iranyu energiaaramlas eseten szoktak ket FET-et alkalmazni ellenparhuzamosan vagy sorosan kapcsolva. Ekkor ki lehet azt hasznalni, hogy a FET-ek drain-source vedodiodai is egy ellenparhuzamos dioda part alkotnak, igy nem kell tovabbi diodat felhasznalni. Soros kapcsolas eseten pedig ki is lehet kapcsolni az aramkor. Soros kapcsolasra pelda: Bővebben: Link A hozzászólás módosítva: Szept 15, 2012
Hmm,
sosem voltam olyan penge analógból, úgyhogy hiszek neked.
Ez igy ebben a formaban nem igaz. A MOSFET-eknel a dioda alapvetoen azert van jelen, mert a substrat-ot hozzakotik a source-hoz, igy a drain-substrat (mivel ellenkezo adalekolasuak) egy parazita diodat hoz letre. Ha a substrat nem lenne sehova se kotve, felcserelheto lenne, mint peldaul a JFET. Tehat a feszultsegviszonyok felcserelodhetnek, csak korlatozottak technologiai okokbol, de a nyitofeszultseg alatti source-drain feszultsegnel nincsen gond.
A hozzászólás módosítva: Szept 15, 2012
Sziasztok!
A Sleep móddal kapcsolatban kérdeznék. Én eddig csak azt láttam, hogy Sleep módban leáll az oszcillátor. Viszont nekem ez nem jó mert akkor megáll az óra is az viszont kell, hogy menjen. Lehet valahogy Sleep módot bállítani úgy, hogy az óra menjen tovább? TIMER1 megszakításban léptetem az időt és figyelem van-e az adott időponthoz esemény. Ha van akkor felébreszteném az AVR-t.
Persze, az adatlap felsorolja az adott AVR alvási lehetőségeit.
Ott van, hogy mitől tud felébredni, mit kapcsol le, stb. További olvasmány: avrlibc sleep A hozzászólás módosítva: Szept 15, 2012
Elnézést! Elkerülte a figyelmem a táblázat az AVR adatlapján.
Megtaláltam azt a két lehetőséget ami kellhet nekem.
Ahogy érzed. Azért köszönöm a felvilágosítást! Párhuzamos bekötésnél N és P típusú van,
vagy mindkettő azonos? Itt az a cél hogy kb. olyan legyen mint egy rendes, analóg kapcsoló. Ettől függetlenül - szerintem - a legegyszerűbb úgyis a diódás megoldás lesz, profi áramkörökben is. Tarol az üres szöveg? Lesz még itt több is, ha továbbra sem engedi törölni... A hozzászólás módosítva: Szept 17, 2012
Igen, a diodas a legegyszerubb. Ettol elterni akkor szokas, ha annak valami kulonleges oka van. Parhuzamosnal barmilyet lehet hasznalni, csak tudjad vezerelni a tranzisztort es a belso diodak polaritasa megfelelo legyen.
El kell, hogy keserítselek, mert a jelenlegi multithreading alapja a 80-as években született meg. Ha az interneten megnézed a setjmp / longjmp C metódusokat, interrupt segítségével magad is tudni fogsz schedulert csinálni. Egy ilyen scheduler max. 512 byte.
A Citizen-120d nyomtató a stacket négy 64 byte-os rész-stackre szedte szét és interrupttal mozgatta a stack pointert. 4 szál futott a 8 bites procin és átadták egymásnak a szálak vezérlést, ha épp nem volt munka. Rendes ütemező volt benne. setjmp/longjmp-n alapuló ütemezőket találsz fenn a neten.
Mar 1959 korul a Lincoln Labs TX-2 tudod 33 szalat...
Amugy amit leirtal az nem multithread, hanem multitask. A hozzászólás módosítva: Szept 18, 2012
A kérdés szempontjából lényegtelen, hogy hogyan hívják.
Párhuzamosan futó feladatokat lehetséges AVR alatt megoldani. Vagy interruptból (gyakori), vagy ütemezővel. Szórakozásból írtam már ütemezőt, de sehol sem kellett. Elég ritkán van szükség független szálakra. Jelen problémánál sincs szerintem: - SPI kiír (cím) -> befejezés interrupt - SPI beolvas (memória) -> befejezés interrupt - Adat elküld UART -> befejezés interrupt - SPI kiír (cím) ... Az interruptok bizony 15-20 órajelciklusig is eltarthatnak, annyira bonyolult a benne lévő logika. Szóval szerintem ide sem kell scheduler. Persze az UART vár az SPI-re (és vissza), ami nem optimális, mert mehetne párhuzamosan is, de alapvetően interruptokkal kezelhető. A párhuzamos megoldás kicsit bonyolultabb lesz. A hozzászólás módosítva: Szept 18, 2012
A kerdes szempontjabol hivhatnank a mikrovezerlot hajszaritonak is, mert nem szamitana, de azert megis az elobbi a celszeru.
Amit most irtal, az se nem multitask se nem multithread, hanem esemenyvezerelt feladatvegrehajtas. Ehhez valoban nem kell utemezes. Viszont ha multithread/multitask rendszered van, abban mindig van utemezo, ugyanis az felelos a vezerles atadasaert.
Sziasztok, a következő problémára keresem a megoldást:
Van egy teljesen új, gyári ATMega128-as kontrollerem. Építettem hozzá egy tesztpanelt, de hiába adok neki tápfeszültséget, a programozó nem látja, még az eszköz ID-jét sem tudom kiolvasni. - A programozót kipróbáltam, másik AVRt azonnal felismer, programoz, így az biztosan jó - A PEN lábát az ICnek próbáltam szabadon hagyva is, illetve földre húzva is, a probléma így is, úgy is fenn áll - A vezetősávokat ellenőriztem, elkötés, szakadás, zárlat nincsen a panelen, az áramfelvétel is normális - Egyelőre semmilyen külső periféria nincs is bekötve, ami esetleg okozhatna gondot - Az SPI-hez tartozó lábak szintén a levegőben lógnak, csak a programozó van rákötve Van ennek valami trükkje? Vagy elképzelhető, hogy a gyári állapotú 128-as külső oszcillátorról vár órajelet?
Közben kipróbáltam egy külső, 10 MHz-es oszcillátorról bevinni az órajelet, de sajnos így sem történik semmi.
Nem az SPI labakat kell hasznalni, hanem a PE0 es PE1 labat. Lasd doksi 300. oldala.
A programozót melyik lábakra kötötted?
"Szokásosan" MISO-MOSI-ra, vagy a PDI-PDO -ra? Atmega128-nél csalóka módon a PDI-PDO párosra kell kötni. Olimex schematic
Mindkettőtöknek köszönöm a gyors választ, valóban ez volt a probléma. Legalábbis az egyik fele. Ugyanis én a MISO-MOSI lábakra kötöttem a programozót, viszont átkötve az általatok is írt PDI-PDO lábakra sem ment a dolog. Végül úgy sikerült, hogy a külső oszcillátort rá kellett kötnöm, utána át tudtam állítani belső oszcillátorra.
Szóval még egyszer köszönöm a segítséget, már elég sokat szenvedtem vele.
Szeretnék ebbe a kérdésbe beszállni. Én is atmega128-ra tervezek és én a MOSI/MISO lábakra tettem a programozó tüskéket. Még csak terven. Ezek szerint ez nem fog menni. Programozni csak a PDI-PDO lábakon tudom?
Ha igen akkor bajban vagyok mert itt van az RX0/TX0 is és itt az RS232 IC van. RX1/TX1-en meg RS485. Akkor MOSI/MISO lábról nem lehet programozni. De akkor mi lesz az RS232-vel?
Peldaul rakjal jumpert vagy 0 ohmos atkotest, amit el tudsz tavolitani. A masik megoldas, hogy a MAX232 es mikorkontroller koze rakjal ellenallast es a programozot kozvetlen a uC labara csatlakoztasd. (3. oldal 3. abra szerint)
Jelenleg atmega168-at használok így.
A MOSI/MISO lábakon van egy shift regiszter is. Itt van soros ellenállás 10k. Ettől függetlenül programozáskor a shift regiszter lábai vígan "perecelnek".
A 15-20 órajelciklus kb. az amikor az interrupt éppenhogy nem csinál semmit:
Egy interrupt meghívási ideje emlékeim szerint 2 órajel(addig áll a proci is), ha ugró utasítást szakít félbe akkor 3 vagy 4. A visszatérés 2 órajel. Stack pointer és munkaregiszter(ek) elmentése-visszatöltése szintén 1-1 órajel szóval nem egyszerű. ![]() Az se mindegy, hogy egy interrupt végrehajátsa közben a többi tiltva van, kivéve ha az interruptban sei-t adsz ki. Ez persze veszélyes is lehet, ha ugyanaz az interrupt közben újra meghívódna...
ASM-ben programozva azert meg lehet oldani.
Egyedül az Rx-el lehet probléma, mert "szembemegy" a MAX232 IC Rout kimenetével.
Erre ellenállás a megoldás az AVR és a MAX közé, a programozót az AVR oldalára kötöd. Az ellenállás megválasztása nem mindegy, pl. ha gyári STK500-ad van akkor 1k nem jó oda. Mivel az AVR CMOS technológiás, jóval nagyobb(pl. 4.7kOhm) is mehet oda. A programozóimat pl. úgy építem hogy 1kOhm is jó, mert a kimeneti ellenállás ennél kisebb. A Tx-nél nincs ilyen gond, hiszen a Tin nagyimpedanciás bemenet. Viszont ha programozás közben is él a kapcsolat, a vevő(pl. PC) fals adatokat kaphat. 1: vagy széthúzod a kábelt, esetleg "disconnect"-et tolsz a progiban 2: ellenállás+PNP-tranzisztor kombóval tilthatod a MAC IC Tin bemenetét ha a RESET aktív.
Sziasztok, a segtségeteket szeretném kérni! Mivel itthon már "marékszám" gyűlik a rossz fuse bit beállítások miatti AVR-em, ezért megépítettem a AVR Fusebit Doctor-t, ami nem akar működni, valószínűleg, mert ebbe is valamelyik fusebit-et rosszul állítom be (Ponyprog-ot használok, a programozóm stabil)
Légyszíves, valaki be tudna linkelni egy jó ponyprog-os fusebit beállítási ablakot az AVR Fusebit Doctorhoz? Egyébként nem értem, hogy miért nincs leírva szájbarágósan pont a fuse bitek beállítása, úgy, hogy minden hüle megértse (gondolok itt magamra); pont egy olyan áramkörnél, ami pont a hüléknek készül! ![]() A hozzászólás módosítva: Szept 18, 2012
Szerk: Bocsi! Most látom, hogy te is erre jutottál "A 15-20 órajelciklus kb. az amikor az interrupt éppenhogy nem csinál semmit"
Na legalább itt van láthatóan akkor ![]() Hát én most megnéztem ezt az interrupt dolgot. Itt van az lss -ből az idevágó részlet:
Amint látni ez 10 órajel. WinAVR-rel fordítottam Atmega16a -ra -Os beállítással. És akkor még nem is lett elmentve az SREG regiszter, amit manuálisan kellene elmenteni. Azzal együtt így néz ki:
Így máris 14 órajel. Aztán nem is kellett minden regisztert lementenie. Ebből fordult:
A hozzászólás módosítva: Szept 18, 2012
|
Bejelentkezés
Hirdetés |