Fórum témák

» Több friss téma
Fórum » AVR - Miértek hogyanok
 
Témaindító: pakibec, idő: Márc 11, 2006
Témakörök:
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
Lapozás: OK   7 / 837
(#) Gory válasza andrewforest hozzászólására (») Okt 14, 2006 /
 
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.
(#) andrewforest válasza Gory hozzászólására (») Okt 15, 2006 /
 
Köszi a segitséget! Ha lesz időm meg is csinálom a dolgot, hasznos kütyü...

Andrew
(#) MaSTeRFoXX válasza andrewforest hozzászólására (») Okt 18, 2006 /
 
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?>>
(#) Gory válasza MaSTeRFoXX hozzászólására (») Okt 18, 2006 /
 
If (((PINA & 0x80) >> 7)==1)

If (((PINA & 0x80) >> 7)==0)

Én így láttam sok helyen
(#) Pavel válasza MaSTeRFoXX hozzászólására (») Okt 18, 2006 /
 
Sziasztok!

Szerintem mindkét megoldás tökéletes....csak izlés kérdése hogy melyiket használod!

(#) gtk válasza Pavel hozzászólására (») Okt 18, 2006 /
 
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.
(#) Gory válasza gtk hozzászólására (») Okt 18, 2006 /
 
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.
(#) gtk válasza Gory hozzászólására (») Okt 18, 2006 /
 
En a 0 nal ugy latom,hogy ha tegyuk fel PINA reg. treljesen 0 akkor is igaz lesz a feltetel.
(#) MaSTeRFoXX válasza gtk hozzászólására (») Okt 18, 2006 /
 
Köszi mindkettőtöknek!
Akkor maradok az eredeti megoldásomnál:yes:
(#) Gory válasza gtk hozzászólására (») Okt 18, 2006 /
 
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.
(#) gtk válasza Gory hozzászólására (») Okt 19, 2006 /
 
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
(#) brejti válasza gtk hozzászólására (») Okt 21, 2006 /
 
Ü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
(#) davidov válasza brejti hozzászólására (») Okt 21, 2006 /
 
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.
(#) brejti válasza davidov hozzászólására (») Okt 21, 2006 /
 
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.
(#) MaSTeRFoXX válasza brejti hozzászólására (») Okt 21, 2006 /
 
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...
(#) brejti válasza MaSTeRFoXX hozzászólására (») Okt 22, 2006 /
 
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.
(#) gtk válasza MaSTeRFoXX hozzászólására (») Okt 22, 2006 /
 
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.
(#) gtk válasza brejti hozzászólására (») Okt 22, 2006 /
 
Igen...

  1. uint8_t gombvizsgálat = 0;
  2. //main-loop:
  3. //tehetsz idoosztast is,hogy ne nezze minden orajelciklusban
  4. if(PINX & (1 << PINDn) //gomb lenyomva?
  5.  { //igen
  6.    gombvizsgálat=1;
  7.  }
  8.  
  9. while(1)
  10. {
  11.  if(gombvizsgálat){ break; } //gomb lenyomva? IGEN
  12. }
(#) gtk válasza gtk hozzászólására (») Okt 22, 2006 /
 
Idézet:
„//tehetsz idoosztast is,hogy ne nezze minden orajelciklusban”

........main-loop ciklusban.
(#) MaSTeRFoXX válasza gtk hozzászólására (») Okt 22, 2006 /
 
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...
(#) vegyészmérnök válasza brejti hozzászólására (») Okt 22, 2006 /
 
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.
(#) brejti válasza vegyészmérnök hozzászólására (») Okt 22, 2006 /
 
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.
(#) davidov válasza brejti hozzászólására (») Okt 22, 2006 /
 
Akkor szerintem a fuse biteket kell rendbe rakni.
(#) gtk válasza MaSTeRFoXX hozzászólására (») Okt 23, 2006 /
 
--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.
(#) gtk válasza gtk hozzászólására (») Okt 23, 2006 /
 
--C nyelv-goto--
Az egesz cikk erdekes lehet...
(#) MaSTeRFoXX válasza gtk hozzászólására (») Okt 23, 2006 /
 
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.
(#) gtk válasza MaSTeRFoXX hozzászólására (») Okt 23, 2006 /
 
Es kozben nezd meg a switch -case elagazasokat is,hatha jol jon..
(#) gtk válasza MaSTeRFoXX hozzászólására (») Okt 24, 2006 /
 
Valaki meg tudja mondani,hogy mega8 source modban hany mA-t kepes leadni?
7szegmenses kijelzot akarok hajtani.
Szukseges buffert rakni ?
(#) MaSTeRFoXX válasza gtk hozzászólására (») Okt 24, 2006 /
 
20mA-ral szokás számolni Én hajtottam már meg tiny2313-mal hétszegmenses kijelzőt buffer nélkül
(#) Dudus válasza gtk hozzászólására (») Okt 24, 2006 /
 
Ha jól olvasom 40mA.

Itt a leírás
Következő: »»   7 / 837
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem