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   223 / 840
(#) zombee válasza trudnai hozzászólására (») Máj 15, 2010 /
 
Nem is értem, miért nem PLCC tokkal készítik, abból VISZONYLAG olcsó a foglalat, ugyanúgy miniatűr SMD lehet a cucc, és az sem utolsó hogy cserélhető...

Egyébként én tűket szúrok a lábakba, úgy programozok, legalábbis azokat a rendszereket amelyeket nem én készítettem.

Ha arra vetemednék hogy SMD-ből építsek rendszert, akkor úgy fogom megoldani hogy a programozó lábakat kivezetem a panel szélére 6 darab lyuknélküli PAD-hez, amire ráforraszthatom a programozó vezetékeket, vagy késes csatlakozót alakítok ki(mint a régi floppy meghajtókon) és rátolom a csatlakozót...
(#) gtk hozzászólása Máj 15, 2010 /
 
Biztos felreertem az arakat,...
dip - tqfp atalakito
(#) vbalint válasza gtk hozzászólására (») Máj 15, 2010 /
 
Nem... Ez még csak nem is egy elvetemült ár... A Farnellnél van foglalat is, csak sajnos a legkisebb is 44 lábú. Az csak 60 euró, de még forrasztgathatod.
De miért nem jó az ISP? Akár azt is lehet automatizálni, ha sorozatgyártásról van szó...
(#) v alaki válasza zsuscsinyo hozzászólására (») Máj 16, 2010 /
 
Sziasztok,

Az alábbi kódrészlet kavart meg.
(amúgy köszönet, Topi- 8 lábbal... cikkéért)

TCCR0B = (0 << CS02)
| (1 << CS01)
| (1 << CS00); //011 = clk/64 előosztás

Jól értem, hogy mivel nincs operátor az első egyenlőségnél, így gyakorlatilag egy teljes byte törlés?
Előállítom a 0b00000000 bitet, és beleteszem/ráteszem a TCCR0B-re? tehát minden bit nulla lesz.
Szerintem...>>>>>>
(#) (Felhasználó 4577) válasza v alaki hozzászólására (») Máj 16, 2010 /
 
Használd a kód beillesztést.
(#) Moderátor hozzászólása v alaki hozzászólására (») Máj 16, 2010
 
Folyamatosan én használom helyetted a kód beillesztést.
Elfogyott a türelmem.
(#) v alaki válasza (») Máj 16, 2010 /
 
Az előbb az"Idézet"-t próbáltam ki, a következő már a "KÓD" lett volna! Mert azt Én is észrevettem, hogy nem jó, csak nem találtam a használati utasítást.
Amúgy köszönöm.
(#) trudnai válasza v alaki hozzászólására (») Máj 16, 2010 /
 

Idézet:
„Az előbb az"Idézet"-t próbáltam ki, a következő már a "KÓD" lett volna! Mert azt Én is észrevettem, hogy nem jó, csak nem találtam a használati utasítást.”


Tudod, mikor idezni szeretnel az Idezet gombra kattintasz, mikor pedig kodot szeretnel beszurni a Kod-ra

Amugy en ugy szoktam kiprobalni, hogy elkuldom, majd megnezem hogy nez ki, es meg van lehetosegem egy ideig javitani a dolgon, tehat javitom, ismet megnezem az eredmenyt stb -- ha nagyon nem megy torlom es elgondolkodom rajta vagy megkerdezek valakit...
(#) v alaki válasza trudnai hozzászólására (») Máj 16, 2010 /
 
Tudom, hogy egy kezdőnek hallgass a neve, és az én gépész agyam úgyis hamarosan úgy ellöki a szíjjat, hogy ki tiltatom magam, de érdemben szólna valaki valamit a kérdésemhez?

Sziasztok,

Az alábbi kódrészlet kavart meg.
(amúgy köszönet, Topi- 8 lábbal... cikkéért)

  1. TCCR0B = (0<<CS02)
  2.               | (1<<CS01)
  3.               | (1<<CS00);


Jól értem, hogy mivel nincs operátor az első egyenlőségnél, így gyakorlatilag egy teljes byte törlés?
Előállítom a 0b00000000 bitet, és beleteszem/ráteszem a TCCR0B-re? tehát minden bit nulla lesz.
Szerintem...

Ja, hogy legyen valami értelme is hogy írok, ne csináljunk egy AVR Óvoda topikot, ahol nem idegesítjük a NAGYOKAT?
(#) trudnai válasza v alaki hozzászólására (») Máj 16, 2010 /
 
Idézet:
„Tudom, hogy egy kezdőnek hallgass a neve, és az én gépész agyam úgyis hamarosan úgy ellöki a szíjjat, hogy ki tiltatom magam, de érdemben szólna valaki valamit a kérdésemhez?”


Az nem baj, ha kezdo valaki, de a kotelezo hazi feladatot illik megcsinalni: El kellene olvasni egy C programozasrol szolo konyvet vagy tutorialt.

Idézet:
„ól értem, hogy mivel nincs operátor az első egyenlőségnél, így gyakorlatilag egy teljes byte törlés?”


Nem. Egyenlosegjel azt jeleni "legyen egyenlo". Azaz TCCR0B legyen egyenlo a kifejezes eredmenyevel.

Idézet:
„Előállítom a 0b00000000 bitet, és beleteszem/ráteszem a TCCR0B-re? tehát minden bit nulla lesz.
Szerintem...”


Ez nem egy bit, hanem egy bit sorozat. Mivel 8 db bit van ott, ezert ezt byte-nak hivjuk. De igen, ha nulla a kifejezesed eredmenye, akkor azt fogja bele masolni a TCCR0B-be...
(#) adamtui_93 hozzászólása Máj 16, 2010 /
 
Hali
Az lenne a kérdésem sőt inkább kérésem hogy valaki akinek nem fáradság küldjön egy linket vagy egy kódot C-ben hogy hogyan kell beállítani az rs232 kommunikációt mert nem jutok rajta tovább se hogy se a legjobb az lenne ha valami példát tudna valaki mutatni hogy pl kiküld 1 egyest és 1 led kigyullad megnyom egy gombot és vissza küld egy 2 est abból már kibogarásznám mit hogy de egy magyarázat is megteszi csak értsem meg.
(#) (Felhasználó 4577) válasza adamtui_93 hozzászólására (») Máj 16, 2010 /
 
Tessék: ezek alapján írsz magadnak.
Senki se fogja helyetted megírni.
(#) adamtui_93 válasza (Felhasználó 4577) hozzászólására (») Máj 16, 2010 /
 
kösz ezek nagy részét már végig néztem és most is folyamatosan nézem de annyira nem tudok angolul hogy oldalakat olvasgassak de még az ADC megértettem sok példából a PWM-et ugy szint de itt nem jutok tovább. Ha feltennél legalább annyit hogy pl mint ADC-nél ReadADC(1) és akkor beolvassa vagy PWM-nél OCR1A= ; és akkor "ki irja" az adatot ezt USART nál hogy tudom megcsinálni?

ezt az oldalt találtam leghasznosabbnak : Bővebben: Link de még igy sem megy
(#) v alaki válasza adamtui_93 hozzászólására (») Máj 16, 2010 /
 
Isten hozott a klubban...
(#) zsuscsinyo válasza v alaki hozzászólására (») Máj 16, 2010 / 1
 
  1. TCCR0B = (0<<CS02) | (1<<CS01) | (1<<CS00); //011 = clk/64 előosztá



Ha nincs operátor az egyenlőség előtt akkor a bal oldali változó értékét egy az egyben a jobb olali értékre állítja.
Ezzel a kóddal csak a CS01, CS00 bitjei lesznek aktívak.

Egy példával tudom szemléltetni az egyenlőség előtti operátorokat:

  1. uint8_t i=5; //i változó kezdőértéke 5
  2. i += 5;  //i változó értéke növekszik 5-tel, eredmény 10
  3. i = i+5; //i változó értéke növekszik 5-tel, ez a művelet megeggyezik az előzővel, eredmény 15


Egy Bitwise művelettel viszont így néz ki:

  1. uint8_t i=15;  //Kezdőérték 15, azaz 0b00001111
  2. i |= (1<<4);  //Ennél marad az i érték, és még az 4. bit aktív lesz, azaz 31, 0b00011111
  3. i = (1<<4);  //Ennél viszont egy az egyben a jobb oldali érték lesz, azaz 32, 0b00010000
(#) zsuscsinyo válasza zsuscsinyo hozzászólására (») Máj 16, 2010 /
 
  1. i = (1<<4);  //Ennél viszont egy az egyben a jobb oldali érték lesz, azaz 32, 0b00010000


Kicsit fáradt vagyok, ez az érték nem 32, hanem 16 lesz.
(#) trudnai válasza adamtui_93 hozzászólására (») Máj 17, 2010 /
 
Hogyan probalkoztal? (Nem latom a kapcsolasi rajzod es a forras kodod?)
(#) bart1111 hozzászólása Máj 17, 2010 /
 
Sziasztok!
Egy sebesség-kijelzést csinálok ATmeg164P-vel. Az elv az, hogy egy interrupt megérkezésekor elindul egy számláló és a következő beérkezéséig számol, ebből számolna sebességet. A programban egészen odáig jutottam, hogy interruptra elindul a számláló (kijeleztettem azért tudom), következőre újraindul, de ekkor valamiért nem olvassa ki a timer értékét. Itt a programrészlet amim eddig van:

ISR(TIMER1_OVF_vect)
{
cli();
sebesseg=0;
TCNT1=0;
sei();
}

ISR(INT1_vect)
{

cli(); //megszakítások kikapcsolása
sebesseg=(kerekatmero*10800/TCNT1); //1159200/1024=10800
TCNT1=0; //indítsa újra a számlálót
sei(); //megszakítások be

}

...
//megszakítások, timerek bekonfigurálása
EIMSK=0x02; //INT1 megszakítás bekapcsolása
EICRA=0x08; //INT1 lefutó él érzékelés
TIMSK1=0x01; //timer1 megszakítás be
TCCR1A=0x00;//normál mód
TCCR1B=0x05; //bekapcs, 1024-es osztás
sei();
Tehát a probléma, hogy elindul a TCNT1, megszakításkor újraindul,de nem menti ki az értékét. Mi a hibám?
(#) (Felhasználó 4577) válasza bart1111 hozzászólására (») Máj 17, 2010 /
 
Idézet:
„sebesseg=(kerekatmero*10800/TCNT1); //1159200/1024=10800”

Ezt a sort elmagyaráznád nekem pontosan?
Arra volnék kíváncsi, hogy a kerékátmérőből hogyan számolod ki a sebességet. Gondolom reed relét használsz jeladónak, mint a digitális kilométerórákban.
A közeljövőben én is fogok egyet építeni.
(#) bart1111 válasza (Felhasználó 4577) hozzászólására (») Máj 17, 2010 /
 
Amikor a küllőkön lévő mágnes zárja a reed relét, interrupt keletkezik az INT1 lábon. Ekkor az előző mérés óta eltelt idő a Timer1 16 bites számlálóban található. Ezt az értéket olvassa ki a program a TCNT1-ből. Így tehát v=s/t képlet szerint számol. Remélem tudtam segíteni.
(#) (Felhasználó 4577) válasza bart1111 hozzászólására (») Máj 17, 2010 /
 
Értem, köszönöm. Teljesen világos minden. Azt hittem, hogy valamilyen cifrább módszerrel számolsz.
(#) gallz válasza bart1111 hozzászólására (») Máj 17, 2010 /
 
Hello,

Ha a TCNT1=0 akkor milyen sebességet számolsz?
Én úgy csinálnám, hogy az INT1 megszakításokat számolnám, aztán a TIMER1_OVF_vect-ben kiszámolnám a sebességet.
Vagyis az időegység alatt megtett fordulatok száma * kerület.
Persze lehet, hogy hülyeség...
(#) AtomCity hozzászólása Máj 17, 2010 /
 
Sziasztok!

Segítségre lenne szükségem eOscope digitális oszcilloszkóp projekttel kapcsolatban.
Az eredeti projekthez képest 4-szer akkora fifo memóriám van. Ezért át kéne írni ezt az értéket a programban, mert miután az eredeti projektben levő 512-es memória betelik, elvileg eldobná az adatokat. Át is tudtam írni az egyik fájlban az 512-t 2048-ra a forráskódban, ami fent van a honlapjukon.
\eoscope_develop\eOscope\software\inc\eOscope.h (ezt a fájltű)
#define EOS__nFifoLength 512 (ezt írtam át 2048-ra)
Viszont most az összes fájlból kéne csinálni egy hex fájlt. Le kéne fordítani, de sajnos nem értek a WinAVR-hez...
Próbáltam a forráskódot lefordítani, de mindig valami hibát írt ki, nem csinálta meg....
Valaki tudna segíteni nekem, vagy le tudná nekem fordítani?
Előre is köszönök bármiféle segítséget!
Üdv!
(#) adamtui_93 válasza trudnai hozzászólására (») Máj 18, 2010 /
 
Ez a panelem és e mellé egy szintillesztő kapcs. rajzot nem tudok mert nincs csak a fejembe de működik a szint illesztő és a panel is az összekötésüket mind 2 variációban kipróbáltam de nem működött a kommunikáció. Forráskódok meg : Bővebben: Link Bővebben: Link
A beállításokra avr studió nem irt ki hibát de se küldeni se fogadni nem tudom hogy kell vele pedig elég sok variációt kipróbáltam de egyik se csinált semmit.
(#) (Felhasználó 4577) válasza AtomCity hozzászólására (») Máj 18, 2010 /
 
Van egy cikk a WinAVR használatáról az oldalon: Bővebben: Link
(#) gag hozzászólása Máj 18, 2010 /
 
Sziasztok,

Szeretnék felprogramozni ISP-n egy
ATMEGA 644-20AU
melyet egy 20MHz kvarc hajt.

Első alkalommal a ponyprog és az avrdude mindent rendesen lát a gyári állapotoknak megfelelően:

Read Osc.Calibration Byte successful: 0xAB (171)
avrdude: Device signature = 0x1e9609
avrdude: safemode: lfuse reads as 62
avrdude: safemode: hfuse reads as 99
avrdude: safemode: efuse reads as FF

Majd baállítom a fuse biteket:
avrdude -p atmega644 -c siprog -P /dev/ttyS0 -i 1000 -U lfuse:w:0xF7:m -U hfuse:w:0xDF:m

minden ok:
avrdude: Device signature = 0x1e9609
avrdude: safemode: lfuse reads as F7
avrdude: safemode: hfuse reads as DF
avrdude: safemode: efuse reads as FF

továbbra is tudom kezelni a uC-t.
Végül fel szeretném programozni az eszközt:
avrdude -p atmega644 -c siprog -P /dev/ttyS0 -i 1000 -U flash:w:main.hex:i

(main.hex egy nagyon egyszeru peldaprogram lett volna)

Ez a folyamat nagyon sokáig tart kb. 30perc,
a végeredmény pedig verify error!

Ezekután már nem fér hozzá az atmega644-hez a ponyprog és az avrdude:
initialization failed rc=-1

Ezt eljátszottam 2 eszkozzel is, es mindig egyanez lett a végeredmény.

Merre keresgéljek, megoldást jelenthet, ha veszek egy gyári programozót?
Esetleg cseréjem a kvarcot ideiglenesen 8Mhz-re?

köszi.
(#) puli122 válasza gag hozzászólására (») Máj 18, 2010 /
 
A kvarc sebessége itt nem lényeges, ahoz hogy programozd, csak legyen valami...
(#) lazsi válasza faust02 hozzászólására (») Máj 18, 2010 / 6
 
Ha kezdő vagy, akkor mindenképpen egy egyszerűvel kellene kezdened, mint pl. EZ. Mindössze egy 74HC244 kell hozzá meg pár passzív alkatrész. Nem kell hozzá előre felprogramozott uC.
Alapvetően a Reset-MOSI-MISO-SCK lábak vezérlésével lehet egy adott soros protokoll szerint felprogramozni, ahogy a uC leírásában van. A printerportos megoldás is ezeket használja. (A fenti link is ilyen, csak pufferelve van.) De nem szükséges magát a protokollt ismerni, mert a fenti oldalról letölthető program tudja azt.
Tehát:
Telepíted a PonyProg nevű programot.
Megépíted az AVR ISP-t.
Megírod a programodat, lefordítod.
Csatlakoztatod az AVR ISP-t a uC-hez. (Szükséges hozzá: kvarc, 5V tápfeszültség, esetleg a Reset lábra 1kOhm tápfesz felé, 100nF föld felé)
PonyProg-gal betöltöd a programodat és örülsz.
(#) AtomCity válasza (Felhasználó 4577) hozzászólására (») Máj 18, 2010 /
 
Már többször részletesen lépésről lépésre megcsináltam, de ennek ellenére hiba jött elő....
És több forrásfájl egyesítéséről sem nagyon ír....
Ezért írtam a fórumba, hátha valaki profi benne és tudna segíteni nekem
Azért köszönöm, hogy válaszoltál!
(#) gag hozzászólása Máj 18, 2010 /
 
Köszi a választ,

működhet a programozás egy usb->LPT átalakítóval?
Tapasztalatok?
Következő: »»   223 / 840
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