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
Eltünt a hozzászólásom.
Szal annyi van hogy ha atmega16-ot használ az ember atmega163 helyett a JTAG ICE megépítéséhez, akkor a bootloadert a neki valót kell beégetni. Ez a feltöltött cuccban megtalálható, mert ott mindkettő bootloaderje ott van. Természetesen ha valaki kap atmega163-at akkor nem kell atmega16-ot használni. A hekkelés csak akkor kell ha nem kaptok. Aztán mikor összekötöd a géppel meg az AVRStúdióba rátöltöd a firmwaret, akkor csak atmega163-at tudsz kiválasztani. Ezért ellenőrzésnél hibaüzenetet dob. De azzal nem kell törődni menni fog. Ezenkívül érdemes figyeleni a sorosport 2 és 3 lábának bekötésére mert ha fordítva kötöd be akkor nem megy. Meg ha 3,3V-os céláramkört debuggol valaki akkor max3232 kell szintillesztőnek. Mivel onnan kapja a tápot. Néha kicsit rakoncátlankodott nálam a debugger, de 2500Ft-ba se került úgyhogy megéri. Ja és szerintem csak assemblyt lehet vele így debuggolni AVR studion keresztül.
Köszi a segitséget! Ha lesz időm meg is csinálom a dolgot, hasznos kütyü...
Andrew
Sziasztok!
Azt már tudom hogy kell megnézni, hogy H-e az egyik bit, csak azzal volt gondom hogy azt nézzem meg hogy L-e egyik bit. Végül ez lett belőle: if ( ! (PIND & (1 << PIND7)) ) { menu(); } Ez működik meg jó, csak az a kérdésem hogy a "nagyok" is így csinálják, vagy ez nagyon erőltetett?>>
If (((PINA & 0x80) >> 7)==1)
If (((PINA & 0x80) >> 7)==0) Én így láttam sok helyen
Sziasztok!
Szerintem mindkét megoldás tökéletes....csak izlés kérdése hogy melyiket használod!
If (((PINA & 0x80) >> 7)==1) itt azt nezi hogy a kifejezes 1 erteku -e.Nincs C -ben ennek ertelme,ugyanis nullatol kulonbozo kifejezes mindig igaz.
if ( ! (PIND & (1 << PIND7)) ) ez szebb,mivel igy latod hogy melyik PINrol van szo es nem kell hexabol meg atszamold.. Utolsora szavazok.
Hi!
Félreérted, If (((PINA & 0x80) >> 7)==1) valóban azt nézi 1-e, direkt írtam, mert ezzel analóg módon amit alá írtam If (((PINA & 0x80) >> 7)==0) azt nézi 0-e.
En a 0 nal ugy latom,hogy ha tegyuk fel PINA reg. treljesen 0 akkor is igaz lesz a feltetel.
Köszi mindkettőtöknek!
Akkor maradok az eredeti megoldásomnál:yes:
Ha teljesen 0 a regiszter, akkor nyilvánvalóan a 7.bit is 0. ezért igaz. Ez a két kód annyit csinál hogy kimaszkolja a nekünk kellő bitet, eltolja a nulladik pozícióba és megnézi hogy 1 vagy 0. De ha rövidíteni akarja az ember a kódot és kevésbé olvashatóbban leírni, akkor
If ((PINA & 0x80) == 0x80)... //1 If ((PINA & 0x80) == 0x00)... //0 megteszi. Ez csak simán kimaszkolja a megfelelő bitet, és megnézi hogy 1 áll e azon a helyen vagy 0. Idézet: „Ha teljesen 0 a regiszter, akkor nyilvánvalóan a 7.bit is 0. ezért igaz.” Igy igaz. Az elozo hsz.om ertelmetlen.Tobbe faradtan nem szolok hozza
Üdv mindenkinek!
Van egy kis problémám: adott egy gyári myAVR Smart USB-s programozó link, valamint egy ATTINY26 16MHz-es kristállyal. AVRStudio 4-el próbáltam rá egy programot tölteni (kipróbált, működő), de nem hajlandó. Addig eljut, hogy rátölti (??), de amikor a verifying részhez ér egy hibaüzenettel megszakad: Address: 0x0004, Expected: 0x8000, Received: 0x00ff A programozóból jövő jeleket (MISO, MOSI, RESET, SCK) már szkópon megnéztem, azokkal minden rendben. Teljessen kezdő vagyok az AVR-ben, ezért szeretnék egy kis segítséget. Hallottam olyanról, hogy az ember "ki tudja magát zárni" a mikrovezérlőből. Ez mikor fordul elő, és hogyan tudom elkerülni, illetve orvosolni. Előre is köszi! brejti
Hello brejti!
Az sajnos előfordul, hogy az ember kizárja saját magát a uC-ből, de csak akkor ha programozáskor nem kap tápot a uC, mert akkor a programozó lábakon megjelenő feszültségre azt "hiszi" a mikrokontroller, hogy feszültség alatt van, és emiatt elállítódhatnak a fuse bitek pl. az hogy engedélyezi az SPI programozást. Ha még nem programoztad az ATtiny-det, akkor először a fuse biteket kellene beállítani (pl. PonyProg), ha nem ez a baj, akkor így kapásból nincs más tippem.
Köszi a gyors választ davidov!
Lehet, hogy volt egypárszor olyan, hogy fesz nélkül próbáltam programozni. Szerencsére ez nem egy többezres uC (Ha nem sikerül megcsinálni, akkor megy a vitrinbe). Sajnos a PonyProg nem támogatja ezt a fajta programozót, de majd hétfőn átteszem egy másikba, azzal talán megjavul.
Sziasztok!
Megint lenne egy C-s kérdésem: Egy végtelen ciklusból ki lehet lépni? Mert lenne több while(1) { } ciklusom. Amiből egy gomb nyomására ki kellene lépnem. Menürendszert programozok most, és addig kéne pörögnie ennek a ciklusnak amíg meg nem nyomom a kilépés gombot...
Helló!
Egy while(1) { if(gombvizsgálat==1){break;} //gomb lenyomva? IGEN } szerkezettel szerintem ki lehet lépni. Vagy talán megszakítással is. De azért várd meg egy okossabb tanácsát is.
Most igy hirtelen en igy csinalnam:
//globalis valt. uint8_t w_feltetel = 1; //minden gomb nyomasnal az azelotti ertek ellenkezojere all be(0,vagy 1). w_feltetel ^= 0x01; while(w_feltetel) { } Igy egy gomb nyomasra while leall,megegyszeri gomb nyomasra ujra fut,hacsak azelott mar nem adtal valahol ujra 1 erteket a w_feltetel-nek,mert igy kov. g.nyomasra ujra hamis lesz a feltetel.
Igen...
Idézet: „//tehetsz idoosztast is,hogy ne nezze minden orajelciklusban” ........main-loop ciklusban.
Köszönöm a segítségeket!
Kipróbáltam a break-et működik Lenne egy újabb kérdésem: Lehet-e címkéket megadni, és mindjuk goto-val odaugrani? Esetleg van valahol egy összefoglaló utasításlista a C-hez? Mert az AVR-LIBC-t már átnéztem, sokat segített, de még mindig vannak hiányosságaim...
Szia! Lehet hogy hülye kérdés, de törölted a chip tartalmát a programozás előtt? Mert akkor szokott ilyen üzenetet adni ellenőrzéskor, ha előtte nem volt törölve, ezért a nem programozott bitek között valószínűleg marad olyan, ami már korábban programozva volt és ezért a chip tartalma eltér a kívánt tartalomtól.
Helló vegyészmérnök! Ez egy teljessen új IC, ez lett volna benne az első program. Ha kiolvasom a programmemóriát, akkor minden érték FFFF, tehát akkor még semmit nem sikerült beletöltenem.
Akkor szerintem a fuse biteket kell rendbe rakni.
--LINK-- ezt nezd meg..
Nagyon ne goto-zd ossze a kododat mert egy ido utan nem fogod tudni ki -kivel tart A while(1) nekem pl. nem teszik ha csak nem a foprogramrol van szo,mert amig fut ,addig csak megszakitas kaphat proci idot...csunya..nem jo.. Inkabb rakj 'mindent' a main-loop -ba,es jelzesekkel(pl INTerruptok),feltetelvizsgalattal(pl adott gomb nyomva ) 'kapcsold' az adott programreszletet. Ja es a goto csak fuggvenyen belul hasznalhato,pl ket fuggveny kozott nem tudsz goto-val ugrani,de van jumplong ,v.vmi hasonlo is..nem ajanlom ha csak nem nagyon muszaly.
--C nyelv-goto--
Az egesz cikk erdekes lehet...
Köszi a segítséget!
Már kezdek belebonyolódni a menürendszerbe..... Mikor Basicben programoztam, akkor ott a goto-val eléggé áttekinthető volt. Majd megpróbálom itt is goto-val.
Es kozben nezd meg a switch -case elagazasokat is,hatha jol jon..
Valaki meg tudja mondani,hogy mega8 source modban hany mA-t kepes leadni?
7szegmenses kijelzot akarok hajtani. Szukseges buffert rakni ?
20mA-ral szokás számolni Én hajtottam már meg tiny2313-mal hétszegmenses kijelzőt buffer nélkül
|
Bejelentkezés
Hirdetés |