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
Idézet: Nem kellene úgy tenni, mintha én lennék csodabogár az olvasható programok igényével. Máshol, más vezérlőknél a bitdefiníciók gyárilag benne vannak a fordítóhoz tartozó fejléc állományokban (IAR EW, Code Composer Studio).„Turkálj bele bátran bármilyen open source AVR projektbe és látni fogod, hogy ezzel kisebbségben lennél.” Természetesen mindenki olyan programot ír, amilyet akar. "Az igazi programozó bármilyen programnyelven képes FORTRAN programot írni"
Ezt csak azert mondtam a hozzaszolasodra, mert ugy veltem erosen leoltod a delikvenst egy olyan dologgal, ami szerintem nem abszolut igazsag.
Ha mondjuk azt allitod, hogy nem erdemes nyolcas szamrendszerben megadni valtozokat, akkor teljes mellszelesseggel alltam volna ki a kommented mellett.
USART-on keresztül, hogy lehet negatív értékeket kiküldeni?
Van egy integer tömböm amiben negatív és pozitív értékek is vannak ha ezt elküldöm soros porton a PC-nek akkor a hiperterminálon a negatív értékek nem megfelelően jelennek meg. Általában ilyen 200+ decimális értékre változnak át.
Karakterként kell kiküldeni ugyebár a számokat is. Ha számokat akarsz kiküldeni és nem szeretnél saját fv-t írni az átkonvertálásra akkor ajánlom az itoa, utoa és társait. (stdlib.h-ban találod őket.)
Írtam egy kis tesztprogramot. Nem küld ki semmit a soros porton keresztül. Hogyan kell az itoa-t használni?
Szerintem leptesd vegig a szimulatorban a programod. Meg fogsz lepodni, hogy mit programoztal le.
Hogy az itoa-t hogy kell hasznalni, azt az avrlibc oldalan tudod megnezni.
Sziasztok!
Lenne egy kis problémám!
Adott ez a program. A feladat az lenne, hogy ha megnyomom a gombot(D2 port - atmega16), akkor lefut a megszakítás és küld egy felkiáltójelet. Na most! A probléma ott van, hogy lefut, csak nem a felkiáltójelet küldi el, hanem az alulvonás jelet, nem is foglalkozik a megszakítás == 1 feltétellel. Mi lehet a probléma? Köszönöm szépen előre is! Tamás A hozzászólás módosítva: Okt 24, 2012
Itt egy működő fv. (atmega168)
IntToUART bemenő paraméterének megadsz egy számot és azt kiküldi a soros porton.
Biztos, hogy foglalkozik a megszakitas == 1 feltétellel ami sosem teljesül.
Először tedd rendbe az órajeled:
Most 1 Mhz az órajel vagy 16? A megszakításba miért van benne ez?
A hozzászólás módosítva: Okt 24, 2012
1MHz az órajel! Köszönöm az észrevételed!
A pergés miatt van benne a megszakításban, hogyha megnyomom a gombot, akkor azt csak egyszer észlelje, ne háromszor, vagy többször.
Így rendben van?
Értem. Ha 1MHz az órajel akkor 1UL igen.
Én eddig nem használtam az USART-ot belső órajelről nem tudom ezt mennyire szereti.
Csak azt nem értem, hogy ha végrehajtja a feltétel alatt lévő utasítást, akkor azt ami pont nekem kellene, azt miért nem?
![]()
Ez nincs feltételhez kötve. Gyakorlatilag 1ms-ként lefut. Nem tudom, hogy hol nézed, hogy mi jön be az RS232 porton, de ez elnyomhatja. Ez miért nincs feltételhez kötve?
Betettem az else ágba, és ugyan azt csinálja! Ha megnyomom a gombot, akkor figyelmen kívül hagyja a feltételt... :/
BOCSI! Nem figyeltem!
Az alábbi sor jó volt így:
Igen, azt már visszaírtam, csak elfejtettem mondani
![]()
Lehet, hülye ötlet és én sem látom feltétlen értelmét, de mi van, ha a megszakításba előbb értéket adsz és csak utána tiltod le a megszakítást?
Ha else ágba tetted a lenti sorokat az majdnem olyan mintha ne csináltál volna semmit. Ezen sorok nélkül mit csinál? A hozzászólás módosítva: Okt 24, 2012
Kipróbáltam, semmi változás...
Mivel én sem vagyok AVR master csak kezdőként játszadozom vele én így járnék el:
USART félre teszem és egy vagy két led kapcsolgatásával tesztelem amit csinálok. USART marad és minden számomra lényeges eseményre küldök egy karaktert. Feltéve, hogy az USART jól működik. A Főprogramba semmit sem tennék csak a pergés mentesítést és a szükséges feltétel figyelését. Jobb ötletem most nincs. Fáradt is vagyok és érdekel is, hogy mi lesz a megoldás.
Rendben, megcsinálom! Holnap(vagy még ma) értesítlek, ha van valami fejlemény
![]() Idézet: Ha x < 0, akkor küldj ki egy "-" karaktert, utána pedig x helyett a -x értéket alakítsd számjegyekké! „USART-on keresztül, hogy lehet negatív értékeket kiküldeni?”
Annyira sikerült rájönnöm, hogy mikor megnyomom a gombot, akkor simán újraindul a mikrovezérlő, mindenféle megszakítás nélkül. DE MIÉRT????
![]() Valaki esetleg?
Nem tudom, hogy mit csináltam, de úgy néz ki, hogy megoldottam...
Már megy az írás és az olvasás is az MCP23S17-el.
A KonfigUART()-ba betetted ezt a sort: PORTB = 0x00;Elé meg DDRB = (1<
>>
Olvasd ki az MCUCSR-bol, hogy miert indult ujra.
A megszakitas valtozo tipusat ird at uint8_t-re, mert ez igy hibas. (bar pillanatnyilag nem feltetlen okoz gondot). Az IC reset laba fel van huzva nehany kOhmos ellenallassal? Ha nincs, akkor esetleg elofordulhat, hogy a gomb megnyomasakor felszed valami zavarjelet. Esetleg az is lehet gond, hogy tul kicsi felhuzoellenallast hasznalsz a nyomgombnal es megrantja a tapot. A hozzászólás módosítva: Okt 25, 2012
Szia!
Azt nem tudom, hogy kell kiolvasni mcucsr-rből, annyira pro nem vagyok ![]() IC reset lábát felhúztam egy 4,7K-s ellenállással VCC-re. Nyomógombnál pedig 10K az ellenállás értéke.
Igen, fel van húzva!
Az MCUCSR egy sima 8 bites regiszter, aminek az also 5 bitje hatarozza meg, hogy mi miatt tortent reset. Miutan kiolvastad(pl egy segedvaltozoba), az also 5 bit erteket ki lehet torolni, igy garantalva, hogy a kovetkezo resetnel csak a kivalto ok legyen benne(no meg, hogy biztosan tudjad, tortent-e reset). A torles a szokasos egyesek beirasaval tortenik.
Az also 5 bit jelentese: 0. bit bekapcsolasi reset 1. bit kulso reset 2. bit brown out reset(azaz tapfesz ingadozas) 3. bit watchdog reset 4. bit JTAG reset |
Bejelentkezés
Hirdetés |