Fórum témák

» Több friss téma
Fórum » AVR - Miértek hogyanok
 
Témaindító: pakibec, idő: Márc 11, 2006
Témakörök:
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
Lapozás: OK   447 / 840
(#) pluto válasza vtsoftware hozzászólására (») Máj 27, 2012 /
 
Szia!

Ha jól értelmeztem a problémád, talán ezt a cikket kellene tanulmányoznod.
(#) zbiro hozzászólása Máj 27, 2012 /
 
Ha már szóba kerültek a 32k-s kristályok
Egy órát építek, attiny25-tel, ami 32khz-en jár. Ehhez milyen kapacitást kell mellé kötni, hogy pontos legyen? Most 2x15pF van berakva, de így eléggé pontatlan az óra (napi kb 1 perc)
A doksi azt mondja, hogy nézzem meg a kristály adatlapján, de ott csak a saját kapacitása szerepel. Ebből hogy lehet meghatározni a szükséges értéket?
(#) sikolymester válasza zbiro hozzászólására (») Máj 27, 2012 /
 
A napi 1 perc, az csakugyan elég nagy hiba. De felhívom a figyelmed, hogy vannak egyéb fontos kritériumok is.

Rakd minél közelebb a kvarcot a lábakhoz, illetve a kondenzátor az AVR lába és a kvarc között legyen.

Egy adatlapot nem linkelsz esetleg a kvarcodról?
(#) zbiro válasza sikolymester hozzászólására (») Máj 27, 2012 /
 
Nem igazán van adatlapja, olyan, mint egy bárhol kapható 32,768 kHz kristyál Ahogy nézem, ezeknek 12,5pF általában a kapacitásuk.
Próbáltam közel rakni a kristályt, mondjuk a kapacitások mellé kerültek.
Az ilyen tervezési dolgok mennyire számítanak? És magyaráznának napi egy perc pontatlanságot?
(#) sikolymester válasza zbiro hozzászólására (») Máj 27, 2012 /
 
Nem tudom, hogyan néz ki a kapcsolásod. Próbapanelen van, vagy magad mart nyákon?

De ez a hiba óriási amúgy. A szokásos ppm mutatóval számolva ez 694ppm (a ppm ugye parts per million, vagyis milliomod).
Egy 50ppm-es kristállyal, aminél hirtelen rosszabbat nem is találtam a Farnellnál, ~4,3 mp hibát kellene kapnod egy nap alatt.

Nem lehet, hogy valami szoftveres bibid van?

Mutasd meg nekünk, hogy hogyan oldottad meg az időkezelést, hátha talál valaki hibát benne.
(#) zombee válasza zbiro hozzászólására (») Máj 27, 2012 /
 
32.768kHz-es kristálynál vajon kell kondi? Az AVR adatlapjában nincs benne, csak a nagy kristályoknál!
(#) sikolymester válasza zombee hozzászólására (») Máj 27, 2012 /
 
Ez alapján akkor nem kell, hogyha van RTC modul az AVR-ben, márpedig a tiny25-ben nincsen.
AVR134: Real Time Clock (RTC) using the Asynchronous Timer

Ez persze felveti a kérdést, hogy mennyire pontos vajon a sima óra bemenete az AVR-nek ilyen lassan oszcilláló kristállyal. Lehet hogy innen van a hiba?

Valami rémlik nekem az egyik AVR adatlapból, amiben van RTC perfiéria, hogy pont ezért érdemes azt használni RTC bemenetnek, hiszen az direkt a lassú kristályokra van kiélezve.

Érdemes átolvasni ezt az app note-ot, illetve egy RTC periféria leírást teszem azt az atmega8 adatlapjában.
(#) zbiro válasza sikolymester hozzászólására (») Máj 27, 2012 /
 
Ezt a pontosság részt nem turom követni: ha a kristály pontosan 32768Hz-cel ketyeg, akkor azt az avr nem tudja "elrontani", nem? Legfeljebb az oszcillátorlábak kapacitása/ellenállása befolyásolják a tényleges frekvenciát.
A doksi alapján nekem sem egyértelmű, hogy kell-e kondi oda, a Low-Frequency Crystal Oscillator
részben azt írja, hogy "To find suitable load capacitance for a 32.768 kHz crysal, please consult the manufacturer?s datasheet". Ráadásul a következő fejezetbe a 0.4-0.9Mhz-s kristályokhoz expliciten nem ír kondenzátort, ez alapján szerintem 32kHz-hez sem kellene.
Ő például nem használ. Nekem viszont nem indult el nélküle.
Az application note szerintem más konfigurációról szól, nekem a 32k-s kristály adja az órajelet is.
A programot kicsit leegyszerűsítettem, remélem, nem a hibát okozó részt vettem ki (ha van benne egyáltalán ilyen )

clock.c
    
(#) sikolymester válasza zbiro hozzászólására (») Máj 27, 2012 /
 
Atmega8 adatlapjából idézve a TOSC1 és TOSC2 lábakra vonatkozóan:
Idézet:
„The Oscillator is optimized for use with a 32.768 kHz crystal. Apply-ing an external clock source to TOSC1 is not recommended.”


Maradjunk annyiban, hogy egy kvarc rezonálása erősen nemlineáris viselkedésű. Egyáltalán nem mindegy, hogy milyen terhelést teszel rá. A terhelés jelen esetben ugye az AVR órabemenete.

Én tehát el tudom képzelni, hogy kevésbé pontosan képes csak működni egy 32kHz kvarc ott, ahol nem ő lett volna szánva elsősorban.
A legkisebb kvarc az ~1MHz körül van, amit úgy normálisan használni szoktak, a legnagyobb ~25MHz ez ~1 nagyságrend különbség.
A 32kHz ehhez képest ~2 nagyságrend.

Kérdés, hogy egy megfelelő kondi ezt képes-e pozitívan befolyásolni?
(#) kerdes10 válasza sikolymester hozzászólására (») Máj 27, 2012 /
 
kösz a választ,már csak 1 kérdésem lenne:

az Mfile-ban rámegyek a "Enable editing of Makefile" parancsra, és ekkor hova ,melyik sorba másoljam be az utasítást amit megadtál.
kösz
(#) sikolymester válasza kerdes10 hozzászólására (») Máj 27, 2012 /
 
Hát nem vagyok nagy makefile guru. Szerintem azt a parancsot futtasd le a command promptban, és akkor behányja neked oda válaszként a .asm tartalmát.

A jó kérdés az az, hogy command promptban ezt hogyan lehet egy file-ba irányítani. Linux alatt ugye | -val átpipeolod bárhova.

Ha más nem, akkor a cmd opcióiban beállítod, hogy a puffer teszem azt 20000 sor legyen és kimásolod copy paste-tel.
(#) zbiro válasza sikolymester hozzászólására (») Máj 28, 2012 /
 
Az idézet első fele szerintem pont azt mondja, hogy a 32-s kristályhoz van optimailázva a bemenet.
De találtam egy application note-ot, ami alapján úgy tűnik, hogy ha egy proci fel van készítve az alacsonyfrekvenciás krisályokra (ami a 32kHz-t jelenti), akkor van hozzá belső kapacitás is, így külső nem szükséges. Az attiny25-nél viszont nekem marha furcsa, hogy a két lábhoz különöző értékek vannak megadva belső kapacitásnak (16 és 6 pF). Ráadásul azt mondja, hogy "The crystal should be connected
as shown in Figure 6-5", és az ábrán ott vannak a külső kondik. Szóval nem értem én ezt!
Viszont kipróbáltam, és tényleg elindul kondik nélkül. Mondjuk várni kell 2-3 mp-et (nagyjából jogosan, mert a leghosszabb indulási várakozást állítottam be), lehet, hogy csak türelmetlen voltam a múltkor
Most már csak a pontosságot kell ellenőrizni
(#) sikolymester válasza zbiro hozzászólására (») Máj 28, 2012 /
 
Az idézet első fele tényleg azt állítja amit írsz, csak az atmega8-nak van dedikált 32kHz kvarc bemenete a TOSC1 és TOSC2 lábakon, az idézet pedig ezekre vonatkozik, nem pedig a XTAL lábakra.

Amúgy remélem nő majd a pontosságod.
(#) sgt válasza zbiro hozzászólására (») Máj 28, 2012 /
 
Végtelenül egyszerű a megoldás, bár ez a leghosszadalmasabb is. Addig-addig állítod timer-ben az értékeket, amíg nem lesz pontos . Először csak napi szinten ellenőrzöd, aztán hetente, stb...
(#) sikolymester válasza sgt hozzászólására (») Máj 28, 2012 /
 
Szoftverből nem oldható meg egy ilyen hiba. Ha tényleg igaz, hogy ~700ppm a pontossága így a rendszernek, akkor az pontatlan és kész.
Mert a hiba természetesen +-700ppm-ként értendő.

Könnyű is lenne atomórát építeni máskülönben.

Persze, ha kiderülne, hogy mégiscsak a szoftver volt rossz, akkor orvosolható kódból, de egyszerű, mint egy faék, amit linkelt a kérdező, én hibát nem találtam benne.

Igazából egy dolog miatt lehet érdekes a kód. a 32kHz-ről jár a rendszer is. Valamiért olyan beállítása volt, hogy nem mp-ként ébred fel, hanem 4Hz -ként. Mivel lassú az órajele, ezért sokáig tart, amíg levezérli az interruptot (már ugye lépésben ugyanannyi, mint bármilyen frekvencián, csak éppen 32kHz-en ketyeg a rendszerórajel is), nem lehet, hogy emiatt akkumulálódik fel nagy hiba?

Ennek mondjuk ellentmond az, hogy a szimulátorban megnéztem és azt állítja, hogy amint beugrik interruptba, kezdi elölről a számolást a timer. Én mondjuk úgy emlékeztem, hogy az interrupt végén csinálja ezt meg.

Tehát ez a nagy kérdés: Az overflow interrupt meddig várakoztatja az számláló újraindítását 0-ról? Mivel mp-ként négyszer lép be ide, ez egy nap alatt 345600 alkalom, ha csak 1 lépésig tart, amíg a számláló újraindul, akkor az 10,5 mp-nyi idő az alacsony rendszerórajel miatt (32.768kHz pontosan). Az 1 perc simán összejöhet, hogyha 6 órajelet vacakol addig, amíg az számláló újraindul.
Ha egy szokásos órajelen járna, mondjuk 1MHz-en, akkor a 6 lépés miatt a kiesett idő csak 2mp lenne, ami már egy sima 50ppm-es kristály hibatűrése körül van.

Lehet, hogy itt van elásva a kutya?

Könnyű kipróbálni: állítsd át az előosztót úgy, hogy 1Hz legyen az overflow ideje és vedd ki a feleslegessé vált részt akkor az overflow interruptból, hogyha 1/4-re csökken a hiba, akkor tádám

Ez viszont akkor tényleg javítható szoftverből, hiszen ez egy kalkulálható fix hiba.
(#) Hooligan01 válasza sikolymester hozzászólására (») Máj 28, 2012 /
 
Interruptban is ugyanúgy fut a timer, próbáld ki.
(#) sikolymester válasza Hooligan01 hozzászólására (») Máj 28, 2012 /
 
Tudom, mint írtam is kipróbáltam szimulátorban.

Véleményem szerint az overflow interrupt csakugyan úgy játszódik le, hogy a számláló pörög körbe és alkalomadtán bedob egy interrupt flaget.
A gondolatkísérlet csak próbálta megmagyarázni a szokatlanul nagy hibát. Az egész könnyen igazolható/cáfolható majd a módosításokkal, amiket mondtam.

Habár most nem is tudom, hogy honnan vettem, hogy a rendszer órajel is 32kHz?
(#) zbiro válasza sikolymester hozzászólására (») Máj 29, 2012 /
 
A rendszerórajel is 32kHz, szóval jó a gondolatmenet.
Lassan egy napja megy az óra, és pár másodpercen belül van a hiba (ami nagyjából megegyzik a mérési hibával, szóval mondatjuk azt, hogy egyelőre pontos)
Az a baj a kisérletezéssel (mármint jelen esetben), hogy sokáig tart. Mert jó, hogy átírom, de sok óra (akár nap), amig kiderül, hogy javított vagy rontott a kód.
De szerintem annyi azért kiderült, hogy ilyenkor nem kell külső kapacitás, mert a proci megoldja a dolgot.
(#) kerdes10 válasza sikolymester hozzászólására (») Máj 29, 2012 /
 
és ez a command promt a mfile-ből,vagy a programmers notepadból jön elő?
(#) sikolymester válasza kerdes10 hozzászólására (») Máj 29, 2012 /
 
Start menü, futtatás, majd beírod, hogy cmd , és entert ütsz rá.
(#) sgt válasza sikolymester hozzászólására (») Máj 30, 2012 /
 
Az oké hogy 700 ppm a hiba, de az rendszeres vagy véletlen? Ha rendszeres akkor lásd amit írtam korábban (és a leírásodból ítélve erről van szó), ha véletlen akkor pedig csere az egész, mert arra nincs gyógyír.
(#) bzolti hozzászólása Jún 1, 2012 /
 
Hali! kicsit túlvásároltam magam ATMega8 16PU-ból így egy pártól megvállnék 750Ft-s áron. Ha valakit érdekel keressen meg privátban.
(#) mzozo95 hozzászólása Jún 1, 2012 /
 
Sziasztok!

Egy atmega8 PORT lábra egy IRFZ 48N-t vagy IRFZ24N-t rá szabad kötni "direktben"? (persze a gate lábat, és az AVR el vezérelném, hogy ki vagy be legyen kapcsolva)

Ha jól olvastam, akkor ezeknek a bemeneti ellenállása közel "végtelen", mivel feszültségvezéreltek...

Vagy esetleg kell közbeiktatni valami kondit, vagy ellenállást a gnd-re kötve?

Előre is köszönet!
Zoltán
(#) zombee válasza bzolti hozzászólására (») Jún 1, 2012 /
 
Én a helyedben nem adogatnám el, sok-sok érdekes cucc van a hálón amit ATMega8-al építettek meg.
A másik hogy szerintem egy kicsit drága helyen vehetted...
(#) zombee válasza mzozo95 hozzászólására (») Jún 1, 2012 /
 
Soros ellenállást azért szoktak tenni hogy védje az AVR lábát. Párhuzamosat meg pont a végtelen bemenő
ellenállás miatt: azért, hogy "lebegő" módban ne kapcsolja be véletlenül sem!
(#) mzozo95 válasza zombee hozzászólására (») Jún 1, 2012 /
 
Mekkora ellenállást ajánlasz? vagy gyakorlatilag mind1? Jobban megérné egy optocsatolóval elválasztani az AVR-től?
(#) zombee válasza mzozo95 hozzászólására (») Jún 1, 2012 / 1
 
Leválasztani általában felesleges. Az AVR lábára egy 4.7kOhm lehúzó és egy 100Ohm soros ellenállás kb. jó.
(#) zsolti002 hozzászólása Jún 2, 2012 /
 
Sziasztok. Meg szeretném építeni a főoldalon található 500Mhz-es frekimérőt, csak az a baj hogy véletlenül smd-ben rendeltem meg az ATMEGA48-at, és abban szeretnék segítséget kérni hogy valakinek nincs-e véletlen ehez a tokozáshoz nyákrajza?És hogy milyen progival lehet programozni ezt. Segítséget előre is köszönöm.

schb.jpg
    
(#) zombee válasza zsolti002 hozzászólására (») Jún 2, 2012 /
 
Elsőre azt mondom hogy cumi van, egyrészt át kell tervezni az egész áramkört(pl. Eagle),
másrészt még pluszba bele kell tervezni a programozólábak kivezetéseit is.
De használhatsz ATMega8-at is, ha a forrás rendelkezésre áll akkor egyszerűen újrafordítod m8-ra!

Felprogramozásra AVR Studio vagy PonyProg, attól függ hogy milyen programozóadaptert használsz.
A legegyszerűbb és legolcsóbb ha nyomtatóportosat építesz és PonyProg-al égeted fel a kódot.
(#) Fery hozzászólása Jún 3, 2012 /
 
Sziasztok...Egy kérdésem lenne. Az AVR Doper kimeneti csatlakozóján a Miso, Mosi, Sck, Reset kimeneteket használjuk égetésre. Mellette van van még egy RXD, TXD, CLK....

Ezek tulajdonképpen AVR-nél mire használhatók ?
És miért vannak kivezetve, gondolom valami oka van...
A másik, hogy van egy USB-HID nevü jumper vagy kivezetés nem tudom...
Ez mire jó....?

Fery
Következő: »»   447 / 840
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem