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
Szia!
Nemcsak a bátorításod miatt kérdezek ![]() Egy kicsit elméleti a kérdéskör, amit feszegetek, de uC témában még kezdőnek számítok (a programozásban nem, de az más tészta). Azt hiszem, Topi AVR-PIC cikkében (de lehet, hogy a Nullától a robotokig-ban) olvastam, hogy először tessék assemblerben programozni tudni a mikrovezérlőket, aztán jöhet a többi (C, BASIC, stb.). Véleményem szerint, ha teljesen magadénak érzed a uC "logikáját", akkor -és egyébként is csak akkor- tudod működésre bírni az eszközt, ha tényleg tudod, hogy mi hol van. Kétségtelen, hogy rendszerközeli nyelven lehet a legoptimálisabb és pontosabb kódot készíteni, de -bár ez csak az én véleményem- feleslegesnek érzek több órányi kódolási munkát, hogy pl. egy LCD-vezérlést megvalósítsak (mondjuk egy többszintű menükezelést). Igen, tudom, hogy elegendő egyszer "kitalálni" és include, vagy saját rutingyűjtemény, de... És pont ezek miatt gondolom, hogy jó dolog egy ilyen multifunkciós kísérleti panel... Összedugdosom a hardvert és aztán "kikísérletezem" a szoftvert ![]() Mert hiszen pont ez a mikrovezérlők lényege, hogy a korábban minden-a-hardver elvet el lehet vinni a minimális-hardver-sok-szoftver irányába (hiszen mennyivel könnyebb egy szoftvert módosítani). Hogyan látod Te ezt a kérdéskört? Békabácsi
Idézet: „AZT PRÓBÁLD MEGÉRTETNI, hogy ha külső órajel generátort használok, akkor az lehet nem pont 8Mhz-es? Hanem mondjuk 4Mhz-es, mert a saját frekvenciáját "erölteti" az ic-re?” Leírtam a választ. Idézet: „TUDOM MEGLEPŐNEK TŰNHET: de még nem néztem bele a delay.h fájlba. ... Meglepett a "delay.h" fájl. Fizikus? Elmagyaráznád a delay.h fájlt?” Hát akkor mondjuk nézz bele, senki se fogja elmagyarázni. Most pont ugyan ez megy a PICKIT2 építése témában is. ![]()
Igen, egyetértünk ha jól látom mindenben amit írtál
![]() Abszolút igaz hogy érdemes tisztában lenni az alacsony szintű programozás (assembler) legalább alapjaival. Vannak előnyei természetesen, DE én mégis könnyebbnek, gyorsabbnak találom a Basic vagy C nyelvet. Azt is figyelembe kell vennünk hogy egy kezdő aki még soha nem csinált ilyet, sokkal előbb ér el sikereket pl: Basic-ben mint bármi másban. És ugye a sikerélmény fontos, a továbblépéshez. A panelről meg annyit, hogy azért is született meg, hogy minél egyszerűbben-gyorsabban-átláthatóbban lehessen kezelni az alap perifériákat. És ha már valamit összedugdostál, lehet izgatni a szoftvert összevissza. Ebből lehet tanulni szerintem a legjobban. ![]()
Igen, ha külső kristály adja az órajelet, akkor "ráerőlteti" a saját frekvenciáját az IC-re.
Az adatlapban 3 működési mód szerepel, amelyek más-más frekvenciatartományra lettek optimalizálva. Ezért ha nem tudod, hogy melyiket jelölted ki, akkor a próbálkozás marad. Pl. a 3-8 MHz közötti frekvenciatartományban mindegy hogy milyen kristályt használsz csak legyen 3 és 8 MHz között. Jó a 4 MHz-es is, de a 8MHz-es 2 módot is lefed. Ha az utolsó módot választottad ki, akkor mindenképpen 8MHz, vagy annál nagyobb sebesség kell. delay.h : helyetted nem tudok megtanulni biciklizni, azt neked kell megtenned. Segiteni tudok, de ha ilyen hangnemben folytatod, akkor nem tudom hogy akarok-e.
senkinek semmi ötlete ez ügyben? Találkozott már valaki ilyen gonddal? ( sei van minden normális, egy ledet akarok felvillantani, -os-el nem megy -o0-val meg igen... )
![]()
Másold be a forráskódot és megnézzük.
uint8_t ad,cnt0; helyett volatile unsigned int ad,cnt0;
Szerintem ennyi csak.
Van valami oka annak hogy letrehozod a SEI, CLI makrokat es megis a sei(); makrot hasznalod? Amugy ennek az asm bejegyzesnek nem art utanna nezni, en azt hiszem ez is volatile kell legyen, de bovebben az avr-libc dokumentacioban,..
Szerintem is felesleges. Az AVR-GCC interrupt.h-ban alapból van sei(); és cli(); így felesleges Assembly-vel megoldani.
Mivel a kis és nagybetűk közt különbséget tesz, így ki is lehet törölni azokat a makrókat.
kipróbáltam vele és nélküle nem működik... Sok értelme nincsen csak miért ne?
![]()
Szia!
A problémák, amiket látok: a megszakításban használt változók deklarálásához kell a volatile előtag. Nincsenek értékek adva a változóknak a program elején, pedig szinte azonnal vizsgálod az értéküket. O0 -ás optimalizációs szint esetén elképzelhető, hogy a fordító minden változót nulláz a program elején. Os -es opció esetén már egyáltalán nem biztos ez. És végül nem látom a kódodban, hogy, hol kapcsolod ki a LED-et. Az egyértelmű, hogy mikor kapcsolod be. Na de hol van a kikapcsolása?
direkt nem kapcsoltam ki mert ha jól működik a megszakítás akkor ég ha nem akkor nem de köszi megpróbálom, azt hittem valami beállítás gond van...
"Leírtam a választ.": köszi.
Inkább Ctrl+c, Ctrl+v ahol megtalálom. Kevesebb karaktert kellett volna használni. És én is jobban érezném magam. "Hát akkor mondjuk nézz bele, senki se fogja elmagyarázni." Belenéztem, de kössz hogy ilyen segítőkész vagy. Körübelül mint az "XP F1" (help). "Most pont ugyan ez megy a PICKIT2 építése témában is." Ezt a választ köszönöm. Átnézek oda. Peti
Kösz a választ.
Beszerzek még két kristályt. Köszönöm biciklizni tudok. A hangnemért bocsánat, csak gondoltam idézlek, és a saját szavaiddal kezdem a mondataimat.
Na jó, úgy látom nem veszed a lapot.
Igen, tényleg mindenben egyetértünk
![]() Azért még "megvárom" a 40-lábú változatot; sok sikert hozzá! BB
Nemszeretek kártyázni. Najó! ABohnanza-t szeretem.
Hello.
Kérdésem van: A led villogtatós első program megértésénél járok. "m_delay_10ms(100);" Ez a sor elvileg 1s-os késleltetést ad. Átnéztem közlekedési lámpás részbe, mert ott van hasonló, csak 5s-os késleltetéssel. " m_delay_10ms(500);" értem hogy 10*500ms=5s, de ha ledvillogtatós "C" fájlt átírom, videó szerint rárakom az icre, akkor is 1 másodpercenként vált a led. miért?
Konkrétan arra gondoltam, hogy a PICKIT2-s témában is ugyan ez megy, hogy elmondták egy a felhasználónak, hogy mi a probléma, mit nézzen meg, de ő nem nézte meg és egyfolytában csak azt hajkurászta, hogy mi a baja mi a baja.
Értsd meg, hogy senki se fog helyetted dolgozni. Az Interneten kismillió leírást találsz a delay.h-ról, senki se fog helyetted "belenézni". Innentől részemről a problémáid lezárva, oldd meg ahogy akarod.
köszi. értem.
megértettem, de kellemestet fogok benned csalódni, ha nem kioktatással és helyesírási tanácsokkal segítesz, hanem a tudásod egy részét megosztod velem. szerintem én a tizede tudásodnak örülnék. de abból már penge vagyok hogy ITT a helyesírási hiba és a kérdezés nagyobb gond mint a "nemtudás". "Konkrétan arra gondoltam, hogy a PICKIT2-s témában is ugyan ez megy, hogy elmondták egy a felhasználónak, hogy mi a probléma, mit nézzen meg, de ő nem nézte meg és egyfolytában csak azt hajkurászta, hogy mi a baja mi a baja." **************. bocsánat. itt kisípoltam magam. SZERINTED én eddig, végig ugyan azt a kérdést raktam fel? ![]() mindegy nem ér ez ennyi karaktert. na csá. (ha tiszteletlennek érzed a köszönést, igazad van)
Idézet: „m_delay_10ms(500);” Nezd meg a fuggveny deklaraciojat:
unsigned char max erteke mennyi is lehet?
char típus: -128...0.127
unsigned char típus: 0....255 Tudom javasolni a Programfejlesztés C nyelven című könyvet.
Sziasztok!
ATmega164P-t programozok, és egy számomra kicsit furcsa dologra lettem figyelmes. Egy előző chipnél fordult elő, hogy a C port 2-es, 3-as, 4-es és 5-ös bitje úgy tűnt nem működik, mintha kiütöttem volna. Adatlapot gyorsan megnéztem mi lehet, és mint kiderült ezek a JTAG lábak. A leírás szerint ha a JTAGEN fuse bit nincs programozva, akkor ugye sima I/O pinként működnek ezen lábak. Próbálgatásképpen ledekkel néztem a portot, de fuse bit ide-oda, sosem működött. Aztán gondoltam beleírom a programba, hogy PINC=1 ; Erre rögtön helyre jött, ami még nem meglepő. Az érdekesség az, hogyha most kikommentelem ezt a sort, és megint visszatöltöm az eddigi programot, akkor már jó marad a 4 láb... Hol van a csalafintaság a dologban?
Sziasztok!
Amennyire eddig nem volt gondom a mikrokontrollerekkel most annál több van. Zsinórban a 3. megépített áramköröm nem működik. A probléma az, hogy bár tudok kommunikálni a procival mindenféle marhaságokat ír bele aztán ilyen hibát kapok. Minden jól van bekötve, a kontoller egy ATTiny2313-as ami a kapcsolásoknál található USB-Explorer lelke akarna lenni. A DeviceID-t ki tudom olvasni, de 5-ből 2-3X rossz, a többi esetben jó, a fuse biteket nem merem állítani, mert, ha oda is rossz adatokat ír, megint kizárom magam a prociból. Ja, igen a RESET gombot is rendesen folyamatosan nyomom és minden ki van mérve minden érintkezik, ráadásul stabilan. A programozási sebességet is próbáltam lentebb venni, de ugyanez. ![]() Találkozott már bárki hasonlóval? Előre is köszönök minden segítséget, Attila
Ennél milyen reset gombot nyomsz? A resetet itt a programozó majd állítja, amikor kell. Esetleg a slowsck jumpert felteheted, hátha...
Az USB-Exploreren nincs kivezetve a reset láb ezért egy gombot kell nyomni rajta. Ezt írja a cikk és ezt írtam, hogy így tettem.
|
Bejelentkezés
Hirdetés |