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
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   726 / 726
(#) killbill válasza zombee hozzászólására (») Vas, 13:09 1 /
 
Igen, beallitja ketszer, ha tudja, hogy kulonben baj lesz. Ezert szoltam. Hiaba is vitatkozol.
(#) csabeszq válasza Droot hozzászólására (») Vas, 14:07 /
 
Megnéztem, hogy én hogyan csináltam pszedudo-randomot. Sehogy, az avr-libc-t használtam.

  1. #include <stdlib.h>
  2.  
  3. int get_random(uint8_t max)
  4. {
  5.   return rand() % max;
  6. }


Egyetlen hátulütője, hogy mindig ugyanazokat az eredményeket adja (ahányszor elindítod, mindig 1,15,16,4,... lesz), ezért be kell állítani a random magot (kezdő véletlen).

  1. void init_random()
  2. {
  3.   uint16_t mag = 0;
  4.  
  5.   for( uint8_t i=0; i < 255; i++ )
  6.   {
  7.     uint8_t csatorna = i % 7;
  8.     uint16_t ertek = adc_olvasas(csatorna);
  9.     mag = 31 * mag + (ertek & 3); // also 2 bit hasznalata randommagnak
  10.   }
  11.   srand( mag ); // random mag beallitasa
  12.   rand(); // az elso ertek kiolvasasa (nalam csak a masodiktol hatott a srand)
  13. }
A hozzászólás módosítva: Vas, 14:11
(#) zombee válasza csabeszq hozzászólására (») Vas, 14:37 /
 
Kombinálod az előző hozzászólásommal: elindítasz egy (hardveres) időzítőt, majd a felhasználói beavatkozás pillanatában megnézed az értéket. Ezt beállítod a random magba, majd lekérdezel onnan 4 számot. AVR-el ennél jobbat nem fogsz tudni.
(#) Hp41C válasza zombee hozzászólására (») Vas, 16:14 /
 
(#) csabeszq válasza zombee hozzászólására (») Vas, 16:29 /
 
Jó, ha az időzítő megfelelően szór (nincs prescaler). Nálam nem volt lehetőség user beavatkozást mérni. Indulás után rögtön véletlen színű lámpák kellettek.
(#) zombee válasza csabeszq hozzászólására (») Vas, 17:57 /
 
Az én megoldásaim sajnos mindig user beavatkozásra és időmérésre épülnek, mert az tényleg
véletlenszerű értékeket ad és nagyon egyszerű. Pont úgy mint az elektronikus dobókockák.
Csak akkor nem kell prescaler ha ICP-t (hardveres időpont-tároló) használsz, különben nem lesz
egyenletes az egyes értékek valószínűség szerinti eloszlása.

Ha bekapcsolás után azonnal véletlen értékek kellenek akkor a hardvert is be kell vetni. Egyszer csináltam olyat hogy ellenállást(kb. 1MOhm) és kondit(~100nF) kötöttem sorba. A kondi másik vége a földre ment, az ellenállásé egy portlábra. A közös pont az analóg komparátor egyik lábára ment(a másikon osztó). A komparátor a TIMER1 ICP egységével van kapcsolatban. Ezzel a megoldással egy 3-bites véletlenszámot lehetett generálni 20MHz-es órajel mellett, és így sem volt valami tökéletes, de a feladathoz bőven megfelelt.
A hozzászólás módosítva: Vas, 17:59
(#) zombee válasza Hp41C hozzászólására (») Vas, 18:14 /
 
Igen, valami ilyesmire gondoltam én is, bár ez még éppen a Microchip-éra előtti. A "csak-SMD" várható volt, de a PORTE3:0 engem is meglepett, főleg úgy hogy ebből kettő olyan lábat használ ami eredetileg tápláb volt. A 16 bites timert is megháromszorozták, az USART és I2C egységeket megkettőzték. Utóbbit végre hivatalosan is "Philips I2C kompatíbilis"-nek nevezik. Azért egy órajel-emelést(25-32MHz) berakhattak volna. Vajon az IC visszafelé kompatíbilis lehet az m328P-vel?
A hozzászólás módosítva: Vas, 18:16
(#) elactrofan hozzászólása Sze, 9:10 /
 
Helló!

Atmel studio 7 ben hogy tudnám hozzáadni az usbasp programozót?
(#) rolandgw válasza elactrofan hozzászólására (») Sze, 10:08 /
 
(#) elactrofan válasza rolandgw hozzászólására (») 9:56 /
 
Megjelent a listában a usbasp programozó, de hogyan tudom a hex fiket beküldeni az ic-be?
(#) zombee válasza elactrofan hozzászólására (») 15:05 /
 
Én a helyedben inkább használnám a Khazama-AVR programot, csak egy ALT+TAB és küldheted is. Csodákat ne várj egy olyan programozótól ami alapból nincs támogatva. Ha a beépített pluginhoz mérhető színvonalú programozást akarsz, az valahol egy egy Avrisp-mkII klónnal kezdődik.
Következő: »»   726 / 726
Bejelentkezés

Belépés

Hirdetés
Frissek
2016. Feb, 11. Csü
15:58:17
Jelenleg 563 fő olvassa az oldalt
Online tagok:
Lapoda.hu     XDT.hu     HEStore.hu