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
Van itthon hozzá minden alkatrész, amibe egyszer már belefektettem. Egy kis extra belefektetéssel (program megírása) nem lepi a por itt őket. Meg hát a kihívásról nem is beszélve.
Ha engeditek, én válaszolnék.
Az input capture egység a Timer1-hez kapcsolódó eseményregiszter. A TCCR1B regiszterben ehhez 2 dolgot állíthatsz be. Egyik az ICNC ami egy 4-órajeles "zajszűrő", a másik az ICES, ezzel azt állítod be hogy felfutó vagy lefutó élre történjen a regisztrálás. Van még az ACIS bit az ADCSRA-ban, ezzel az input capture forrását állítod be. Alapesetben ez az ICP1 láb, beállított ACIS esetében az analóg komparátor. A regisztrálás úgy történik, hogy az esemény(tehát felfutó vagy lefutó él) bekövetkeztekor a TCNT1 értéke átmásolódik az ICR1 regiszterbe ami szintén 16 bites. A TIMSK-ban interruptot is állíthatsz az eseményre! Csak egy kis fantázia kell hogy belásd, miért jó ez kis frekik(<10Hz) pontosabb mérésénél!>
Eszem ágában sincs lebeszélni anno az egyiket én is magam épitettem a másikkal meg megleptek .
Ime 2 modern projekt:. Frekimérö AVR Freki Nemrégen viszont alkalmam volt egy szoftwares berendezéssel dolgozni - sajnos össze sem lehet hasonlitani gyorsaságban az anno céláramkörökkel megépitett müszerekkel. De ez már a modern kor kinja.
igen nagyjából értem, de én ennek mi hasznát veszem?
Vagyis elindítom a 16bites timer1-et és mikor az ICP lábon felfutó élre van egy impulzus(1 periódus kezdete) akkor a timer1 értékét átmásolja az ICR regiszterbe, miközben a 16bites timer1 ugyanúgy számol tovább. Ezen akárhogy logikázok, az ICP láb sem tud nagyobb órajelet feldolgozni mint az AVRclk/2 pl 16 megás kavics órajelnek, osztás nincs, tehát a timer 1 tulcsordulása FCPUclk 65536/16000000 4,096msec..... mind1 már belekavarodtam teljesen. Kiváncsi lennék hogy sikolymester mire gondolt,hogy gondolta.
Itt egy 50Mhz frekimérő: Bővebben: Link
Semmi nincs benne csak egy PIC. Ezek szerint a PIC lába nagyobb frekit is fel tud dolgozni mint cpuclk/2? Ezt AVRel is meg lehet oldani szerintem. Még turkálok az adatlapokban...
Itt a counter rész. Elvileg semmi köze sincs a cpu órajelnek hozzá. A külső órajel direktbe lépteti a számlálót.
Nos.
Van egy 50MHz -es frekvenciád. Legyen a külső leosztód 128, akkor ~390kHz-es jeled lesz a kimenetén, amit rákötsz az AVR timer capture-re. Legyen továbbá a timer capture modul leosztója mondjuk 2, az AVR-ed órajele 16MHz. Tehát a timer capture modul 8MHz -cel működik. Tegyük fel, hogy van egy olyan t időpont, amikor a 390kHz-es jeled pont akkor vált, amikor a timer capture modul elindul 0-ról (később belátjuk, hogy szinkronizálni lehet). A 390kHz jeled vált, a timer capture modul interruptba lép, ahol automatikusan feltölti az ICR1 regisztert. Te az interruptban ha úgy tetszik gyorsan nullázod a timer számlálóját (ezzel szinkronba hozod a 390kHz-cel). Aztán, hogy az ICR1 regisztert még az interruptban írod be egy bufferbe, vagy később, az rajtad múlik. Az, hogy pontosan milyen órajeleket mondtam az a véletlen szüleménye, mert csak a hasamra ütöttem. De az elv szerintem ez. És hogy miért nem csak egy sima interrupt lábra kötöd? Azért, mert szoftveresen itt többet hozhatsz ki belőle, miután már jól megismerkedtél a modul működésével. Továbbá itt van egy beépített digitális zajszűrő. Ha másért nem, akkor az utóbbiért ezt a megoldást választanám a sima interrupttal szemben.
Igaz, úgy néz ki ennek más a modulja mint az atmega16-nak, de kezdetben nem tudtuk még, hogy mit szemeztél ki magadnak.
Sziasztok! Eredetileg így irok ki egy karaktert a 3310es kijelzőmre:
../pcd8544.c:181: error: lvalue required as unary '&' operand Hogy tudnám megoldani, amit szeretnék? Előre is köszi!
Valójában az Input Capture interruptban azt kell csinálni hogy az ICR1 értékét letárolod egy pufferbe.
A következő interruptban az új ICR1 értékből kivonod a régit, az eredmény a két lefutó él közti idő lesz a számláló léptékeiben mérve. 390Hz-nél nem biztos hogy szerencsés mert 8MHz-es IC-vel ez nem mérhető elég pontosan, túl nagy frekiknél könnyen előfordulhat hogy mire odaér az interrupt, már jön a kövi jel... Szóval: - nagy frekinél számláló(Tn) és időmérés másik timerrel - kis frekinél input capture(ICP1) A műszered pontosságát döntően meghatározza hogy hová teszed a határvonalat.
Pontosan. Ezt a dilemmát meg fel lehet oldani, hogyha futási időben változtatjuk a timer előosztóját.
Hát ez bizony Linux.
A Saleae GUI sokkal szimpatikusabb. Node most az "ez usb logic analyzer" google első találat megadta a választ. (Tegnap már igencsak ma volt.)
Hat ez bizony platform fuggetlen(Linux, Solaris, Mac, Win), mert java-ban van. Ott van a forrasa is, ugyhogy olyanra alakitod at a kinezetet, amilyenre csak szeretned.
De attol meg, hogy az egyik csilivili, meg nem lesz semmivel sem jobb, a funkcionalitas a lenyeg. Amugy az ugyen felbuzdulva azt hiszem itt az ideje csinalnom egy nagysebessegu analizatort.
Szia!
Igen, figyeltem a polaritásra, a cikkes program sem működik(pedig az enyém egyszerűbb ) Egyszerűen nem állítja egyetlen bitjét sem logikai "1" re a "makacs" avr... Próbáltam letiltani a watchdog-ot is, de semmi javulás... Mellékeltem az általam használt beállításokat... Valaki tudna segíteni a hiba kijavításában? (avr: atmega48A-pu) Előre is köszönet! Zoltán
A forditonak jol van beallitva az AVR tipusa? Biztos, hogy a megfelelo elf fajlt programozod be es az sikeres?
Ha jól sejtem valami ilyesmire lenne szükséged:
Köszönöm, közben megoldottam így:
A problémát az okozta, hogy nem ismertem a pgm_read_byte(& funkcióját, de már utána olvastam, hogy a FLASH-ben tárolt konstansokat keresi elő. Köszönöm a segítséget!
Van valami -akár gagyi- multimétered? Rámérnél az AVR valamelyik lába (14-15-16-17-18-19-9-10) és a GND között van feszültség?
A programodba volt pár felesleges sor, elég ennyi is:
atmega48 lábkiosztása A programnak működnie kellene...
Ugye így van beközve (melléklet) ? Az eltéréseket jelöld be kérlek, ha még mindig nem működik! Üdv
Én az AREF-t nem kötném a tápra... Rossz beállítás esetén baj lehet belőle, "összeakadhat" a belső 2.56V-tal. Ha a tápot akarom referencianak, akkor azt valasztom ki az ADMUX-ban.
Megszokásból kötöttem be, de a #1182640 hozzászólásban levő progi fog futni a kütyün, ami igencsak nem használ ADC-t, tehát ennek a veszélye csekély de köszi!
Mint olvashatod mzozo95, a 21-es lábat ne kösd tápra a biztonság kedvéért...
De meg mindig nem tudom, mit jelent nalad az a PIN betuharmas.
PIN (tü) az az IC, konektorok stb. lábát jelenti.
A mozgásérzékelö az PIR (Passive Infra Red) szenzor.
Kerámia nyákra forrasztási felűletett hogy an lehet vissza varázsolni?
Hat, meglepodnek, ha csak ez az egy jelentese lenne, ugyanis lehet akar rovidites is. Es gyanus, hogy csupa nagy betuvel irta.
|
Bejelentkezés
Hirdetés |