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
Kulon valasztod a szegmenseket portonkent... Tehat pl.
A kijelzo fuggvenyedben kimaszkolod a LED-eket, es be-OR-olod a LED biteket... minden portra termeszetesen... Semmi extra nincs ebben...
Ez jó lenne.
Viszont sokáig kellene gyűjteni az adatokat. Még egy. Ennyi adatot hol akarsz letárolni? 100millió byte => 100mega byte. Vagy ha bit akkor 12.5mega byte. SDRAM? Még ha 10milliót akarsz is. 10mega byte vagy bitenként 1.25mega byte. SDRAM?
Nekem csak a randomolt 0-k és 1-ek száma kell. nem kell tárolnom minden. Mikor bejö az info a randomról, hogy 1 vagy 0, akkor azszerint növelem hozzájuk tartozó változó értékét. így kétszer 4 byte-ba elfér 1-1 változóba 4,2 milliárd adat. tehét 8,4 milliárd random elférne így.
Hogy tisztázzuk a dolgokat Discovery-n volt egy műsor, abba volt, hogy csináltak eszközt, ami egész nap "pénzérmét dobált fel", tehát 0t és 1t randomolt. Sok évig csinálták, és azt akarták bebizonyítani vele, hogy az emberek hangulata, meg érzései befolyásolják a véletlenszerűséget. Példának hozták szept 11-et, hogy akkor nagyon eltért az 50-50%tól. Na ezért akarok iylet építeni, hogy kipróbáljam. Például sulibe felelés előtt, mennyiben változik meg. Ennek az egyetlen hibája valóban az, hogy sokáig kell futnia, hogy elég random legyen. Ezt kéne valahogy kiküszöbölni.
Közben megjött az ihlet, köszönöm!
Azt találtam ki, hogy két konstans-t hozok létre, egyet a PORTC-re és egyet a PORTD-re.
Most néztem, hogy csak a nyomógombok miatt tűnt úgy, mintha a portc-n lennének a szegmensek, de mind a PORTD-n vannak.
Idézet: „Az 100MHz a kimeneten és még ehhez számolni (RND) is akarsz? ATMEGA esetém a 10MHz is lehetetlen. Mer 16MHz / 2 (be/ki) és a ciklusidő még nincs is benne.” 100 Mhz az 100 millió másopercenként. De nekem percenként kell a 16/2 az akkor 8 Mhz, az 60 sec-re 480 millió. tehát 1 percbe belefér az a 100 millió.
Üdv!
Topi tanácsát megfogadva megpróbálok beszerezni egy AVR t amin gyakorolhatok és építek hozzá egy programozót. A piceket vagy grafikus úton (Parsic) vagy basic nyelven programoztam, C vel is próbálkoztam de kevés volt a leírás. Pár hete tanulok ASM t, lassan azzal is megbarátkozok.
Tudna valaki feltölteni egy olyan c-ben íródót progi részletet, amely abban segíteni, hogy egy LCD-n először kiír valamilyen azonosító szöveget, és utána tovább fut a főprogira? Mert eddig csak az sikerült, hogy kiír valamit, de nem megy tovább.
Sziasztok lenne egy kérdésem Az Avrek mennyire kényesek az 5 voltos tápra meg a párhuzamos portról való programozásra a helyzet az hogy van volt két attiy45
bele égettem párhuzamos porton egy programot a tápot a számítógép usb portjáról vettem mint később megmértem 5,6volt elsőre működött kellett végeznem egykét módosítást és egyszer csak nem ismerte fel az avrt beletettem a másikat elsőre aztis felismerte utána nem(lehet hogy elszállt ?) sajnos nincs a környezetemben senki ahol kipróbálhatom most akarok beszerezni egy usbs égetőt a Hestoreból csak reménykedem hogy ezeket még fel lehet éleszteni vala hogyan Köszönök minden segitséget mert elég kezdő vagyok
Inkabb fuse bit problema lehet. 6V-ig kellene mukodjon.
picit részletesebben légyszi mit lehet ilyenkor tenni?
Nem megfelelo fuse bit beallitas eseten "kizarhatod magad" az AVRbol, azaz nem tudod programozni. Kulso orajelet kell adni ra es ujra probalni. Volt sokszor szo rola itt.
Értem olvastam rólla Köszi a segitséget megpróbállom
Megnéztem köszi. Itt a progi részlet amivel kinlódom:
Ha így hagyom akkor villogtatja az LCD-t, ha berakom a lcd_putsf("Hello world"); után a while (1);-est akkor nem, csak folyamatosan kiírja, de nem lép tovább a födolgokra. Mit rontok el?
Kód beillesztést használd kérlek máskor.
Ha struktúráltan írnád a program sorokat, látod, hogy az (itt most) 16. sorban bezárod a while-t... És mivel while(1) van, ezért abból sosem jön ki. Nem is hajtódnak végre az alatta lévő 18.-tól kezdődő sorok...
Segítenél ezt a kis részt átalakítani?
Ha iegen akkor hálás köszönetem érte.
jujjjjjjjjjjjjjjjjj +100j
Bocsi, de rajtad inkább egy C alapok füzet/jegyzet/könyv segítene.
Sziasztok!
Van egy ADC konverzióm. A visszaadott értéket átalakítom feszültséggé, majd egy másik értékké. Ez a másik érték max. +/- 15-öt ugrál. Egy oldalon találtam egy digitális low-pass szűrőt, amit pár paraméter alapján kalkuláltam ki. Ezt beleraktam és sokkal jobb lett, már csak 3-at ugrál, ezt is sokkal ritkábban. Hogyan lehetne digitálisan még ezt is kiszűrni?
Nem tudom hogy ebben hol a LED villogtatas? Vagy epp az nincs benne? Ahogy mar emlitettek indentalnod kellene, hogy jobban lasd mi mihez tartozik. Ezt megteheted automatikusan is, sok szovegszerkesztonek van ilyen finkcioja, pl VIM alatt az elso soron nyomsz egy "g+" -t es mar kesz is. Vagy linux alatt indent nevu parancs -- csak azt persze be kellene parameterezni. Vagy keress ra C beutify-ra a google-ban, vannak olyanok amik online megcsinaljak neked...
Pl. a fent emlitett VIM ezt csinalja:
Köszi a segítséget, de az alap progi működik, csak ilyett még nem csináltam, hogy a progi előtt legyen egy név kiírás, de majd akkor valahogy más hogy.
Indent-nek elegendo akar csak a bemeno es kimeno parameter is
Na jo, csak akkor ugy formazza be ahogy az nekem nem tetszik
1 - linkeltem neked mintaprogramot amiben van ilyen "köszönő" funkció.
2 - elmondták mi a hiba... elakad a while függvényben. Sajnos ennél többet már nem lehet segíteni, max megírni helyetted a programot. De azt ugye te se szeretnéd, mert akkor nem tudod mit miért csinál. Itt a progid kicsit összeszedve... Írd le nekem lépésenként mit csinál (vagy mit kéne)!
Természtesen nekem kell megcsinálni, mert abbol tanulok.
De azért köszönöm.
Sikerült megoldanom
Most már müködik.[code=c]void main(void) { avr_init(); lcd_init(20); lcd_gotoxy(0,1); lcd_putsf("Forrasztoallomas"); delay_ms(2000); while (1) {˝/code] Köszönöm a segítséged.
Sikerült megoldani. Köszönöm |
Bejelentkezés
Hirdetés |