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   330 / 840
(#) mrgrassy válasza puli122 hozzászólására (») Jún 7, 2011 /
 
köszi hát meg próbálom és ha jó lesz akkor happy van ha nem akkor meg építhetek másikat
(#) huba válasza sikolymester hozzászólására (») Jún 7, 2011 /
 
Lehet én vagyok figyelmetlen: de nem találtam meg a megszokott processzor frekvencia beállítására szolgáló mezőt, optimizálás beállítására szolgáló mezőt, sőt a megszakítások nevei sem kerültek elő sehonnan.
(#) sikolymester válasza huba hozzászólására (») Jún 7, 2011 /
 
Olyanok nincsenek is. Makefile -ban kell ezeket állítgatni. Aki nem ért a makefile-hoz, az a Mfile progival generálhat magának. Az Mfile része a WinAVR csomagnak.

A megszakítások nevei pedig ott vannak a uC -hez tartozó xxx.io fileban.
(#) akosnagy hozzászólása Jún 8, 2011 /
 
Sziasztok!

Ha nem is konkrétan felprogramozás, de a programozót kellene nálam tisztába tenni.

Ezt Bővebben: Link a programozót nézegettem.

Addig értem, hogy USB-n csatlakozik a PC-hez, egy programmal (pl. AVR Studióval) elkészítem a programot, és ezzel fel is tudom tölteni a cél AVR-re.

A gondom: miért kell a programozóhoz kábelen kapcsolni az egész kütyüt mit programozni akarok? Nem lehetne a programozón egy foglalat amibe "beleszúrom" a kontrollert, felprogramozom, aztán átteszem a helyére a saját kütyümbe? Vagy túl naiv vagyok?

Valaki legyen oly jó és tegye nekem érthetővé a programozó kimenetét, a miértjét, az egész logikáját.

Köszönöm
(#) bundyland válasza akosnagy hozzászólására (») Jún 8, 2011 /
 
Hát csak gondolj bele hogy mondjuk egy smd-s változatot fejlesztesz, mindig kiforrasztod , felprogramozod és vissza? Ezért célszerűbb az áramkörben programozni.
(#) akosnagy válasza bundyland hozzászólására (») Jún 8, 2011 /
 
Na akkor ott vagyok eltévedve, hogy a PC-k procijához hasonlítottam az AVR-t magamban. Szóval ezt nem lehet kiszedegetni a foglalatból, fixen forrasztott. Így már logikus a dolog

Köszönöm
(#) bundyland válasza akosnagy hozzászólására (») Jún 8, 2011 /
 
Én mondjuk PIC-es vagyok , de AVR-be is egész biztosan van PDIP tokos, SOIC tokos, TQFP tokos, amiről te beszélsz az a PDIP tokos lenne ami kivehető foglalatból
de hidd el a 10. kivétel után elátkoznád az egészet
arról nem is beszélve esetleg hogy hány lába törne le.
Arról meg nem is beszéltünk hogy némelyik programozó debuggol is a működő áramkörben.
(#) akosnagy válasza bundyland hozzászólására (») Jún 8, 2011 /
 
Értem. Mondjuk a debugot ki is hagytam a számításból.

Köszönöm
(#) samu003 hozzászólása Jún 8, 2011 /
 
sZIASZTOK!

ATiny45 procival próbálom a szabadidőmet eltölteni. Sajnos nem jövök rá miért nem akar 16 biten számlálni a proci. a 8 bites számláló már megy de nem tudom melyik bitet kell még állítanom, hogy a proci menet közben növelje saját számláló regiszterét. Ha valakinek lenne ötlete megköszönném!
(#) sikolymester válasza samu003 hozzászólására (») Jún 8, 2011 /
 
Kifejtenéd légyszi, hogy mit jelent ez:
Idézet:
„nem tudom melyik bitet kell még állítanom, hogy a proci menet közben növelje saját számláló regiszterét.”


A soraid között azt olvasom, hogy te azt szeretnéd, hogy a 16bites Timer/Counter működjön neked. Amennyiben én ezt jól értelmezem, akkor kérnélek, hogy nézd át még egyszer az adatlapját az említette uC-nek. Mégpedig abból a prózai okból, hogy nincsen benne 16 bites Timer/Counter modul.
(#) sikolymester válasza samu003 hozzászólására (») Jún 8, 2011 /
 
Időközben sikerült kielemeznem az idézett mondatod.

Ennek birtokában azt javaslom, hogy mutasd a forráskódod, mivel nem tudhatjuk, hogy miket állítottál eddig. Így végeredményben nehezen tudjuk megmondani, hogy pontosan melyik bit hiányzik a beállításban, hogy a te szavaiddal éljek.

Tehát csak annyit mondhatnánk mi is, mint az adatlap, hogy en bloc mely regiszterekbe mit kell állítani, ahhoz hogy bizonyos funkciók működjenek (pl a timer). Ez meg csak egyszerű copy-paste lenne, aminek nincsen értelme.
(#) samu003 válasza sikolymester hozzászólására (») Jún 10, 2011 /
 
Szia!

Egy részlet a programból:
  1. #include        <avr/io.h>
  2. #include        <avr/interrupt.h>
  3.  
  4.  volatile unsigned long v1;
  5. //-----------------------------------------------------------------------------
  6. void initTimer1 (void)  {
  7. //-----------------------------------------------------------------------------
  8.  
  9. PCMSK   |=      (1<<PCINT2);
  10. MCUCR   |=      (1<<ISC01)
  11.                 |       (1<<ISC00);     //felfutó jel
  12. GIMSK   |=      (1<<INT0);
  13. TCCR0B  =       (1<<CS01);
  14. TCCR0A  =       (1<<COM0A0);
  15.  
  16.  
  17. sei();
  18. }
  19. //-----------------------------------------------------------------------------
  20. ISR     (INT0_vect)     {
  21. // kiolvassa a számláló értékét
  22. // értéket ad a v1 változonak
  23. // majd nullázza a cszámlálót
  24.                                 }
  25.                                
  26.  
  27. int main(void)  {
  28. initTimer1();
  29. DDRB    =       0b11111011;
  30. while (1)       {
  31.  
  32. kijelzo (v1);   //ugras a kijelzo modulra
  33.  
  34.  
  35.                         }
  36.                                         }

A megszakítás kűlső forrásból származik. A 2 jel közötti időt kellene megmérnem, és ezt az értéket küldöm a kijelző meghajtóra.A gondom csak annyi hogy ebben az állapotban csak 8 biten tudom a számláló értékét kiolvasni, de nekem nagyobb számláló kellene.

Köszi
(#) Fizikus válasza samu003 hozzászólására (») Jún 10, 2011 / 1
 
Ha nem igen kritikus a nagymerteku pontossag, akkor azt is megteheted, hogy a 8 bites Timer tulcsordulasara is teszel egy megszakitast, amivel egy szamlalo erteket noveled, amivel azt nezed hogy hanyszor "telt" mar el egy Timer tulcsordulasnyi ido.
Kulso megszakitas beerkeztekor kiolvasod a Timer szamlalojat es az elobb emlitett valtozot, utana mindkettot nullazod, es a szamlalas kezdodhet elolrol.
Nem tudom hogy a megszakitasrutinokon beluli utasitasok mennyi idot vesznek igenybe (valtozo ertekenek kiolvasasa, nullazasa stb...), de a legtobb alkalmazasnal ez elhanyagolhato.
(#) kovacsj hozzászólása Jún 10, 2011 /
 
Sziasztok!

Szerintetek melyik kontroller lenne a minimum egy GSM-modulhoz? Egyszerűbb, SMS-ben érkező parancsokat kellene végrehajtania, valamint eredményeket kell közölnie. Nem akarom túl- de alultervezni sem, ezért kérném a tőlem hozzáértőbbek (ez itt a jelenlévők 100%-a) segítségét!

http://www.soselectronic.hu/a_info/resource/c/quectel/M10_GSM_Modul...on.pdf

Ezzel a modullal terveztem megvalósítani.

Köszönöm előre is a segítséget!
(#) puli122 válasza kovacsj hozzászólására (») Jún 10, 2011 /
 
Szerintem egy Mega8 -as bőven jó.

Amúgy kísérletezni ( vagy véglegesre ) ha egy biztos működő elektronika kell: modul és hozzá egy még készülő leírás.
(#) kovacsj válasza puli122 hozzászólására (») Jún 10, 2011 /
 
Köszönöm szépen! Ezt lehet,hogy megveszem. Igaz, sajátot kell készítenem, de puskának jó lesz. Annyit meg megér.
(#) samu003 válasza Fizikus hozzászólására (») Jún 10, 2011 /
 
Üdv!

Gondoltam én is erre a megoldásra. Pontosság nem kritikus bár szeretném ha pontos lenne. A leírásban sajnos elég sok az angol szakkifejezés, ezért nem mindent értek amit értenem kellene. Ha müködik akkor tied a pont!
Köszönöm!
(#) sikolymester válasza samu003 hozzászólására (») Jún 10, 2011 / 1
 
Alapvetően minden helyes.

Javaslom neked a következőt: Ha nem is tudod debuggolni a projekted, mert csak égetőd van, drágább debuggered nincsen, akkor is mindenképpen futtasd az avrstudio szimulátorban a kódod.

Ekkor a következők derülnek ki, amik a képen vannak:
- Látszik, hogy a prescaler az 8 (illetve ha nincsen kedved az adatlapban túrkálni, akkor itt a prescaler legördülő ablakán megváltoztatva egyből látod a változott regisztereket, vagyis azt, hogy pl mit kell a /256 -hoz állítani.)
- Illetve, ha megnézed a TCNT0 változót, ami ugye az a számláló, amit léptet a timer modul, akkor látod, hogy bizony csak 1 db van belőle, tehát ez egy 8bites számláló. Az utolsó mellékelt képen mutatom, hogy hogyan nézne ki a TCNTx regiszter egy 16 bites számlálónál. Ott jól látszik, hogy van egy TCNT1H és TCNT1L vagy High és Low. Ez tehát 16 bites (ha ezt TCNT1 változónévvel kezelnéd, akkor a fordító megoldja magától, hogy kiolvassa mind a 16 bitet. De ez egy Atmega16! Abban van egy db 16 bites számláló)

Tehát fogadd meg Fizikus kolléga által javasoltat és tartsd számon, hogy mennyiszer csordult túl a Timer0.

Megjegyzem, hogyha megnézed az assembly kódját az interruptnak, akkor meg lehet tudni, hogy hány művelet, amíg lezavarja azt, így azt is bele lehet számolni az elmúlt időbe, ha valaki nagyon ragaszkodik ekkora pontossághoz.


(A képek az elhangzottakkal ellentétben fordított sorrendben jelennek meg alul a mellékletben)
(#) puli122 válasza kovacsj hozzászólására (») Jún 10, 2011 /
 
Arra figyelj hogy ez Arduino rendszerű. Alappanel kell hozzá.
(#) kovacsj hozzászólása Jún 10, 2011 /
 
Sziasztok!

A 3.3V-os kontroller RX és TX lába közvetlenül illeszthető a GSM modul RX és TX kivezetéséhez??

Köszönöm előre is!
(#) samu003 válasza sikolymester hozzászólására (») Jún 10, 2011 /
 
Szia!

Kimerítő válaszodat ismét köszönöm!
(#) sikolymester válasza kovacsj hozzászólására (») Jún 10, 2011 /
 
Melyik Gsm modulra gondolsz?
(#) kovacsj válasza sikolymester hozzászólására (») Jún 10, 2011 /
 
Ezt a Quectel M10-est vettem, mert olcsó, és állítólag többet tud mint a többi. Annyit mindenesetre tud, mint amennyi nekem kellene.

Ez itt:

http://www.auroramobile.ru/content/files/pdf/queltec/m10_hd_v1.01.pdf

Köszönöm szépen, hogy időt szakítasz rám!
(#) yoman917 hozzászólása Jún 11, 2011 /
 
Sziasztok
Akkumulátortöltőhöz szeretnék egy ampermérőt készíteni AVR-rel, attiny24 -re gondoltam és egy 7447-es ic-vel kiiratni két digites 7 szegmensű kijelzőre. A multimétert sorba kell kötni, hogy megkapjam az áramerősséget. ezt hogyan tudnám kivitelezni?
(#) puli122 válasza yoman917 hozzászólására (») Jún 11, 2011 /
 
Ahogy nézem még pont ráfér a kijelzés és a mérés is az avr-re, akkor nem kell külön meghajtó IC.
A mérés szerintem úgy a legegyszerűbb, hogy beteszel egy söntöt a + ágba. ( Kis értékű ellenállás, megfelelő teljesítménnyel ) A 2 lábát rákötök egy-egy Adc bemenetre. A különbségükből megkapod a feszültséget, abból meg az áramot.
A 7 szegmenseseket meg egyszerű multiplexeléssel hajtod meg.
(#) sikolymester válasza kovacsj hozzászólására (») Jún 11, 2011 /
 
Ott van az adatlap 19. oldalán a válasz.

A min bemenet az rx/tx lábon a magas jelre az 1.7V a maximum bemenet pedig a tápfesz + 0.3V. Tehát 3.3V-os mikrokontollernek a jeleit venni fogja.

A baj inkább az, hogy a min. tápfesz neki 3.4V. Tehát a 3.3V os rendszerről nem fogod tudni táplálni.

Amúgy javaslom, hogy barátkozz össze nagyon alaposan az adatlapjával. Persze kérdezz bátran, ha konkrétum nem világos, de az az érzésem, hogy még nagyon sokszor hozzá kell majd nyúlnod a mikrokontrollered illetve a gsm modul adatlapjához, amíg nem működik minden az igények szerint.

Sok sikert!
(#) zolee1209 válasza puli122 hozzászólására (») Jún 11, 2011 /
 
Én a söntöt a táp negatív ágába raknám. Ha a pozitív ágba tesszük, akkor az Uki nem lehet nagyobb 5V-nál, különben károsodik az AVR. Ha a negatív ágba tesszük, akkor teljesen mindegy, mekkora a kimeneti feszültség. Persze arra figyelni kell, hogy a sönt megfelelően legyen méretezve, maximális áram mellett se essen rajta 5V-nál nagyobb feszültség. Ha szükséges, akkor a söntön eső feszültséget erősíteni kell. A kimenetre kell egy feszültségosztó, egyik tagja célszerűen trimmer, a feszültség mérés pontosításához. Az osztó kimenetét pedig úgy állítani, hogy maximális feszültség esetén 5V legyen a kimenetén.

Idézet:
„A különbségükből megkapod a feszültséget, abból meg az áramot.”
Ez számomra teljesen érthetetlen.
(#) sikolymester válasza yoman917 hozzászólására (») Jún 11, 2011 /
 
puli122 kolléga helyes választ adott szerintem.

Annyit mindenesetre én is javasolnék, hogy szerintem használd a differenciális üzemmódját az attiny24 ADC -jének. Ez röviden annyit jelent, hogy mivel a sönt ellenálláson meglehetősen kis feszültség esik(persze rakhatsz rá nagy ellenállást, amin nagyobb feszültség esik, de persze ez egy töltőnél nem túl célszerű) érdemes lenne azt felerősíteni.

Hadd illusztráljam: Van egy 0,1 Ohmos 5Wos söntöd. A töltőn 1A folyik ki. Ekkor 0,1V esik az ellenálláson. Ez nem egy túl nagy intervallum. Ha felerősíted az említett funkcióval a 20x-ra jelet, akkor 0->2V az intervallum, amin pontosabb eredményt kaphatsz.

Gyakorlatban nem tudok mit mondani a pontosságról, miszerint mennyire torzíthatja a sönt ellenálláson mért jelet az erősítés, de gondoltam megemlítem.
(#) puli122 válasza zolee1209 hozzászólására (») Jún 11, 2011 /
 
Én nem úgy gondolom, ahogy te megvalósítanád. Beteszem a söntöt ( persze méretezve ). 2 Acd lábat használok, amire az ellenállás 2 lábát kötöm. Így 2 értéket kapod az Adc-vel, aminek a különbsége fogja adni a feszt. Ekkor teljesen mindegy hogy melyik ág szerintem.
Így nem kell osztó.

Persze ahogy sikolymester is írta, az erősítéssel még variálhatsz, de ez az áramoktól is függ, meg hogy menyire kell pontos eredmény.
(#) yoman917 válasza sikolymester hozzászólására (») Jún 11, 2011 /
 
Köszönöm a segítséget, a feszültésget mindenképpen fel kell erősítenem, hogy pontos eredményt kapjak. Más is mondta már nekem ezt a megoldást, de biztosra akartam menni, hogy itt is rábólintanak Köszönöm a segítséget
Következő: »»   330 / 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