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
Ha megnezed lathatod hogy csak egy-egy ciklust irtam, es az altalad emlitett fv-eket hasznalom, es kozel sem pontos.
Az F_CPU meg a Makefile-ban be van allitva.
Elgondolás eleve hibás. Ugyanis a _delay_ms() max delay az 65.536 ms lehet.
A 100 már tartományon kívül eső érték.
Egyébként hogy sikerült befordítanod a delay.h -t az ATtiny2313 alá? A delay.h float számításokat használ direkt kipróbáltam az elöbb Ha csak azt a 2 fügvényt rakom be amit az elöbb bemásoltál és az optimalizálást -Os -re rakom akkor "Program: 2796 bytes (136.5% Full)
"már be sem fér a flash -be
Ezt nem ertem.
Nalam OPT = s -el forgatva siman belefer, pontosan nem tudom mekkora helyet foglal a ket fv. onmagaban, mert a driverrel egyutt forgattam. Idézet: „A 100 már tartományon kívül eső érték.” De a fv.-nel _delay_us-t hasznalok, az miert nem mukodik?
_delay_us-nek is a max értéke 65.536 uS. Tehát a 100uS már nem fér bele.
De nincs is 100 us, a delay_ms() a delay_us() -t hivja es az utobbi hasznalja a _delay_us(1.0) -t.
Én ezt találtam a libc leírásában a _delay_ms és _us rutinokra vonatkozó részben:
The maximal possible delay is 262.14 ms / F_CPU in MHz. illetve: The maximal possible delay is 768 us / F_CPU in MHz. Akkor miért a 65.536 a max?
Hello!
Szép munka és gratulálok az eredményhez! Először nekem is a tükrös lézerkapu jutott eszembe, de nehéz belőle hordozható készüléket csinálni. Másik ötlet, hogy egy infra led, és szembe vele 6 fototranzisztor egymás mellett. Így már kb 2cm-t lefed. Erről vázlatot csináltam, remélem érthető. Kérdésem az lenne, hogy ez így működhet-e az alábbi kapcsolással? 8 bemenetes NOR kapu (6 használva, maradék 2 testre kötve)) fototranzisztorok fényt kapnak >> kimenetük 0 >> kapu kimenete 1 Ha valamelyik fototranzisztor előtt elhalad a lövedék >> kapu kimenete egy pillanatra 0 (amit már egy pin change megszakítással is lekezelhetek, és elindítok egy számlálót) Ahogy elhalad a második érzékelő előtt, leállítja a számlálót, kiértékel, kijelez.
Akkor hogy is van ez?
Mert én "mindig" használtam nagyobb delay-t is. Most összedobtam egy kis tesztprogramot: Beállít egy portot kimenetnek; _delay_ms(1000); Bekapcsolja a kimenetet; Ez bekapcsolás után kb egy másodpercet vár, majd bekapcsolja aLED-eket. _delay_ms(6500); ha ezt teszem be kb 6,5 másodpercet vár a LED-ek bekapcsolása előtt. 6500 fölött hiába írok be nagyobb értékeket, marad 6,5 másodperc a késleltetés.
Miért nem olvassátok végig az egész delay.h összes commentjét? 5 perces meló. Pontosen levan írva hogyan működik. És igen, többek között az is levan írva, hogy
Idézet: „The maximal possible delay is 262.14 ms / F_CPU in MHz. illetve: The maximal possible delay is 768 us / F_CPU in MHz. ” De ha még tovább olvastátok volna ott van, hogy lehet nagyobb delay-eket is megadni, de akkor romlik a felbontás (tehát kevésbé tudsz pontosan időzíteni)és erröl semmilyen visszajelzést nem ad a fordító.
Már nincsenek ezek a korlátozások...ha jól értem
Nem kell ez a fellengzős stílus. Természetesen továbbolvastam, de csak annyit értek angolul belőle, amit belinkeltem. Ezért kérdeztem rá, hátha van, aki normálisan, magyarul el tudja magyarázni, miért is annyi a max..
_delay_us:
Amilyen felso ertek hatart irt Topi, betartottam, hogy pontosak legyenek az idozitesek, de igy sem ok valami. Belso 8MHz-rol megy az attiny2313. Ez mennyire pontos?
A belső oszcillátor egy kalibrált RC oszcillátor. Túl nagy pontosságág ezért nem várható el. Simán lehet pár százalék eltérés a névleges 8Mhz -hez képest.
Simán lehet akár +-10% eltérés is. Szóval ha pontos órajel kell, és nincs mellé pontos más szinkronizálható jeled, akkor kristály.
Sokszor csináltam már azt, hogyha volt olyan bemenő jel, ami fix impulzusokkal rendelkezik (soros, stb) akkor SW-esen OSCCAL regiszterrel a helyére húztam az órajelet. Ez nagyon hatásos, és bevált módszer. Auto kalibrálás.
Koszi !
Megneztem az idozitesek min es max erteket, siman belefer a +-10% elteres.
sziasztok!
Megépítettem ez a kapcsolást de el nem akar indulni! Van aki már megépítette és működik? A rajz jó? Zoli Thermometer LM35
A "nem akar indulni" kicsit tág fogalom... jó lenne ha pontosítanád. Amúgy hirtelen ezek jutnak eszembe: fuse biteket jól beállítottad külső kvarchoz? LCD-t jól kötötted be? A rajzon szereplő LCD láb kiosztás egyáltalán nem biztos, hogy jó a te LCD-hez. Mindíg az adott LCD adatlapját kell nézni.
Szia ATtiny!
Hát igen! Az LCD-t adatlap alapján kötöttem be! De a fuse biteket fogalmam sincs hogy hogyan kell beállítanom a külső 10Mhz kvarchoz! STK500 AVR studio - ezzel programoztam! Tudsz Te vagy valaki segíteni? Zoli
Sziasztok!
Ha esetleg valaki megakarja építeni a fentiekben említett hőmérőt akkor a kapcsoláson az R/W negatívra kösse! Működik! Zoli
Sziasztok!
Egy kis problémám akadt. Nézegettem az AVR-es progikat az oldalon, de nem teljesen világos a timer és az interrupt működése. Szóval, ha van egy timerem ami számol, miként tudom lekezelni, amikor elszámolt addig, ameddig akarom? C-ben szeretném megvalósítani.
Annyit még hozzáfűznék, ha másnak majd ugyan ilyen problémája lesz mint nekem volt, egy sor kimaradt belőle (értelemszerűen az elejéről):
#include "avr/interrupt.h" (az idézőjel helyett kacsacsőr kell ) Mégegyszer köszi
Régóta érdekel ez a megszakítás problem.
Egy pontosítást kérnék. Ez akkor most azt okozza, hogy bárhol is tart a program, ő 1másodpercenként végrehajtja a megadott programrészletet? Akármilyen egyéb programmenet közben?
Igazad van... ez a fránya Ctrl+C, Ctrl+V átka
Sir-Nyeteg... Ez azt csinálja, hogy 1 másodpercenként felfüggeszti a main futását, lefut a megszakításban levő kódrész, aztán onnan folytatja ahol abbahagyta a main-t. |
Bejelentkezés
Hirdetés |