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   100 / 840
(#) gtk válasza ATtiny hozzászólására (») Feb 3, 2009 /
 
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.
(#) Topi válasza gtk hozzászólására (») Feb 3, 2009 /
 
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.
(#) ATtiny válasza gtk hozzászólására (») Feb 3, 2009 /
 
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
(#) gtk válasza Topi hozzászólására (») Feb 3, 2009 /
 
Koszi.
Megnezhettem volna..
(#) gtk válasza ATtiny hozzászólására (») Feb 3, 2009 /
 
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.
(#) gtk válasza Topi hozzászólására (») Feb 3, 2009 /
 
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?
(#) Topi válasza gtk hozzászólására (») Feb 3, 2009 /
 
_delay_us-nek is a max értéke 65.536 uS. Tehát a 100uS már nem fér bele.
(#) gtk válasza Topi hozzászólására (») Feb 3, 2009 /
 
De nincs is 100 us, a delay_ms() a delay_us() -t hivja es az utobbi hasznalja a _delay_us(1.0) -t.
(#) snapscan válasza Topi hozzászólására (») Feb 3, 2009 /
 
É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?
(#) vzoole válasza Hooligan01 hozzászólására (») Feb 3, 2009 /
 
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.

(#) vzoole válasza Topi hozzászólására (») Feb 4, 2009 /
 
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.



(#) ATtiny válasza vzoole hozzászólására (») Feb 4, 2009 /
 
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ó.
(#) matrix64 válasza ATtiny hozzászólására (») Feb 4, 2009 /
 
Itt is ezt a problámát tárgyalják..
(#) matrix64 válasza matrix64 hozzászólására (») Feb 4, 2009 /
 
Már nincsenek ezek a korlátozások...ha jól értem
(#) snapscan válasza ATtiny hozzászólására (») Feb 4, 2009 /
 
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..
(#) gtk hozzászólása Feb 5, 2009 /
 
_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?

(#) ATtiny válasza gtk hozzászólására (») Feb 5, 2009 /
 
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.
(#) Topi válasza gtk hozzászólására (») Feb 5, 2009 /
 
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.
(#) gtk válasza Topi hozzászólására (») Feb 5, 2009 /
 
Koszi !
Megneztem az idozitesek min es max erteket, siman belefer a +-10% elteres.
(#) beppy hozzászólása Feb 5, 2009 /
 
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
(#) ATtiny válasza beppy hozzászólására (») Feb 5, 2009 /
 
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.
(#) beppy hozzászólása Feb 5, 2009 /
 
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
(#) TavIR-AVR válasza beppy hozzászólására (») Feb 5, 2009 /
 
(#) beppy hozzászólása Feb 5, 2009 /
 
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
(#) BlueFox hozzászólása Feb 5, 2009 /
 
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.
(#) vzoole válasza BlueFox hozzászólására (») Feb 5, 2009 /
 
  1. // Megszakítás példa
  2. // 1MHz
  3.  
  4. #include <avr/io.h>
  5.  
  6. ISR(TIMER1_COMPA_vect) {  // megszakítás, ez fut le ha a timer "lejár",
  7.     ittLefutValami();     // jelen esetbe 1 másodpercenként
  8. } // megszakítás
  9.  
  10. //-------------------------------------
  11. int main(void) {
  12. //-------------------------------------
  13.  
  14.     // Setup timer1 16bites
  15.     TCCR1B |= (1<<WGM12)|(1<<CS11)|(1<<CS10); // CTC mode, preselect ratio:64  
  16.     TCNT1 = 0;            // timer1 szamlaloja legyen 0
  17.     OCR1A = 15624;        // timer1 Compare A (15625) 1Hz ! 0...15624 = 15625
  18.                           // 1000000Hz/64/15624 = 1Hz -es megszakítás
  19.                           // (1MHz-es kvarcnál)
  20.        
  21.     TIMSK |= (1<<OCIE1A); // timer1 Compare Match A megszakitas bekapcsolas
  22.        
  23.     sei();    //megszakítás bekapcsolás  
  24.  
  25.        
  26.     while(1) {
  27.         ittFutAProgram();      
  28.     } // while
  29.         return 0;
  30. } // main
(#) BlueFox válasza vzoole hozzászólására (») Feb 6, 2009 /
 
Köszönöm szépen, így már világos
(#) BlueFox válasza vzoole hozzászólására (») Feb 6, 2009 /
 
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
(#) Sir-Nyeteg válasza BlueFox hozzászólására (») Feb 6, 2009 /
 
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?
(#) vzoole válasza BlueFox hozzászólására (») Feb 6, 2009 /
 
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.

Következő: »»   100 / 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