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
A (val) az egy konstans? Vagy egy általunk létrehozott változó?
Szóval akkor itt a val=10
# void m_delay_10ms(unsigned char val) { unsigned char i; # for(i=0;i < val;i++) { # _delay_ms(10); --> ebből gondolom.
Nem szerintem ez nem valami jó.
a val helyére csak egy számot kell beírnod. Ha a késleltetésbe a zárójelbe beírod az i-t akkor fokozatosan fog növekedni a ciklus lefolyásának az időtartama. _delay_ms (i); És itt az i egyenlő lesz egyel azután kettővel azután 3-al és így tovább egészen addig amíg a beírt számnál kisebb lesz az i.
Helló!
Egy olyan kérdésem volna hogy milyen paranccsal lehet megszakítani a ciklus futását és visszatérni a main-be? Úgy rémlik hogy valami BREAK paranccsal tudom megszakítani a program futását. Hogyan kellene ezt használni?
Szerintem ő arra gondol, hogy a _delay_ms(10) sorban levő 10 jelenti a val-t. Bocs ha nem így van, én így értelmeztem a kérdését. Mert ha így van, akkor annak a 10-nek a val-hoz semmi köze, a val az amit meg kell adni.
Igen én arra a 10 re gondoltam de akkor a val értékét hol adom meg Topi villogo programját tanulmányozom.
Igen szerintem is így van csak azért is mert a val értékét még a ciklus előtt kellene megadni. Csak ő nem értette azt a val-t ezért elmagyaráztam. remélem érthetően
A létrehozott függvényben, így:
Már értem. De itt hol van megadva a val értéke?
# void m_delay_10ms(unsigned char val) { # //------------------------------------- # //a _delay_ms max 65.535 ms-et képes sleepelni, # // tehát nagyobb időzítést többből lehet "összerakni" # unsigned char i; # for(i=0;i < val;i++) { # _delay_ms(10); # }>
A főprogramban van megadva:
25. m_delay_10ms(100); //100*10ms = 1s itt a zárójelben levő 100-as a val értéke.
Javasolnam, hogy olvass el egy C konyvet -- ugy hamarabb megtanulod es jobban es erthetobben leirt magyarazatokat kapsz, mint itt...
Sziasztok!
Lenne egy butuska kérdésem. Atmega16A pinjeit nem tudom normálisan bemenetként használni . Két módszerrel is próbálkoztam. Egyik: DDRC=0x00; DDRB=0xff; .... for(; PORTB=PINC; És jó magam teszek felhúzó ellenállást. Másik: DDRB=0xff; DDRC=0x00; PORTC=0xff; .... for(; PORTB=PINC; Itt meg ugye csak szimplán le kell testelni, ha "0" szintet szeretnénk. És a problémám az, hogy mindkét esetben a PORTB-re 11000011-et tesz ki, az alsó és felső két bit rendesen kapcsol, de a többi nem. Mi lehet vajon a probléma? Segítségeteket előre is köszönöm :yes: .
Nem értem a problémád, de lehet, hogy csak velem van a gond.
Ne hexában add meg a biteket, hanem inkább shiftelj, mert az sokkal átláthatóbb. Például PB1 kimenet:
Bemenetként nem kell beállítani semmit se, mert minden port bemenet, ha nincs konfigurálva.
Szívesen elolvasom ha tudsz küldeni egy linket
Probléma az, hogy alsó és felső két bit működik, a többi nem. Hiába kapcsolok marad "0" szinten.
Az odáig világos, hogy shifteléssel átláthatóbb, de ha egész portot teszem kimenetté, akkor időpocséklás. Egyéb esetben érthető, és használom is.
Köszi ez mind szép és C de nem valami magyar...
Olvasd el azokat amiket privátban küldtem néhány órája! Főleg az elsőt. Az jó kezdésnek, és magyar.
A számítástechnika alap nyelve az angol. Angol tudás nélkül szerintem nem is érdemes belekezdeni az AVR-ezésbe, mert csak szenvedés lesz a vége. Nem kell profi angolodnak lennie, de az adatlap lényegét értsd meg, mert anélkül nem tudsz semmihez se hozzákezdeni.
Nem tudom miert egyszerubb valaszolnod, mikor akar ra is kereshetnel Magyarul... Mindegy, nem veletlen kuldtem ugy a Googlit ahogy, ha abbol nem tanulsz, akkor nem tudok segiteni...
PC2 - PC5 a JTAG port, defaultból engedélyezve van a FUSE-ok között (asszem OCDEN a neve). Ha használni akarod IO portként, akkor ISP-n programozva a JTAG modult tiltani kell előtte.
Szerintem nem erős. Próbálj meg lefordítani egy adatlapot, rengeteg segítség van benne, példaprogramokkal együtt.
Ha egy pár oldalt visszalapozol találsz magyar nyelvű leírást, amit még én csatoltam, nem terjed ki mindenre, de sokminden benne van.
Nem erős. Anno adatlap alapján, pár év AVR után 2 hónap alatt 0-ról eljutottam egy LPC2366-tal oda, hogy ADC, IO, timerek, oprendszer, interruptok, stb működött. Ha megérted az adatlapot, mindent tudsz. És NEM kell ördöngős nyelvtanra számítani, alapszintű angol tudással megérthető.
Tessék guglizni, beírni, hogy C programozás, rengeteg jó anyag van (angolul nem tudó barátomnak is ilyenekből tanítok). De egyébként ajánlom Benkőné Programozzunk C nyelven című könyvét...
Esetleg az lehet a problema, hogy a megszakitasok globalisan tiltva vannak, ami az uart_putc fuggveny futasanak ideje alatt feloldodik, es igy le tud futni a timer megszakitas. Viszont ha nincs uart_putc fuggveny, akkor nem fut le a timer imegszakitasod, es igy nem frissul a valtozod. probald meg hogy a while ele irsz egy sei(); -t.
Kulso felhuzo ellenallast hasznalsz? Csupan ennyit programozol be, vagy van egyebb kod is?
Feldobom még egyszer, hátha halk voltam...
Sziasztok! Kis segítségre lenne szükségem. Atmel egyik digit portján szeretnék megvalósítani egy bistabil nyomógombot, ami felváltva adna 1/0 értéket. Csak az arretálásra írjatok programkódot plz! Bascom alatt csinálom. Köszi! |
Bejelentkezés
Hirdetés |