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   292 / 840
(#) TavIR-AVR válasza Kormen hozzászólására (») Dec 26, 2010 /
 
Bascom és ebben a Bascom/samples alatt az SPI könyvtárban SPI master és SPI slave is megtalálható....
(#) David.zsombor hozzászólása Dec 27, 2010 /
 
Sziasztok. Én most kezdenék foglalkozni az AVR-el és elkezdtem megtanulni a C programozási nyelvet. Már rögtön az elején felmerültek igen kezdő jellegű kérdések amelyek igazán még nem tartoznak a mikroprocesszoros kérdések körébe ezért nem is ott kéne offolni velük, bár ahhoz állnak a legközelebb. Szeretném a tapasztaltabb programozók segítségét kérni és remélem, hogy másoknak is segítek akik most kezdik a C tanulását vagy olyan kérdésük van amire máshol nem taláják a választ.
(#) David.zsombor válasza David.zsombor hozzászólására (») Dec 27, 2010 /
 
Miért zárja be magát azonnal a programom ha nem teszem bele ezt?:
  1. system ("PAUSE")

Hogyan tudom parancssorból futtatni a programot?Próbáltam de valamiért nem sikerült.Köszönöm.
(#) David.zsombor válasza (») Dec 27, 2010 /
 
Bocsi de ilyen cimmel(és hasonlóval sem találtam témát) az AVR miétek/hogyanokból meg elkűttek.
(#) idlob válasza David.zsombor hozzászólására (») Dec 27, 2010 /
 
Azért záródik be, mert véget ért
Alapvetőlen a konzolos programok konzol beli futtatást feltételeznek. Egy konzolban elindítod a programot, az csinál valamit, kommunikál veled, stb., majd véget ér, és visszaadja a vezérlést a konzolnak, megjelenik a prompt. De addig elfoglalja a teljes képernyőt, nincsen tálca meg asztal, ezért ha a végén nem állna le, soha nem kapnád vissza a vezérlést.
Persze egy ablakozós operációs rendszerben, pl. a Windowsban ez már másképp néz ki, mert ott virtuális konzoljaid vannak és azokból nyithatsz sokat. Amikor elindítod a konzolos futtatható fájlodat az operációs rendszer nyit neki egy virtuális terminált és ott fut, majd ha vége akkor az oprendszer bezárja a virtuális terminált, mert úgy gondolja (jogosan), hogy nincs rá szükség. Ha te úgy gondolod, hogy ez így nem jó akkor vagy egy pause utasítást adsz ki, vagy egy billentyűzet olvasó parancsot, ami várakozik egy gomb lenyomására, ezzel nincs semmi gond.
Start->Kellékek->Parancssor vagy Sart->Futtatás, begépeled hogy: cmd majd enter. Vista vagy Win7-nél elég ha a startmenü kereső mezőjébe beírod hogy cmd és entert ütsz.
Ezek a parancsok mind egy parancssort indítanak.
  1. C:\Users\maflafn>cd \
  2.  
  3. C:\>
  4. C:\>cd Users
  5.  
  6. C:\Users>cd maflafn\Documents
  7.  
  8. C:\Users\maflafn\Documents>cd "Visual Studio 2010"
  9.  
  10. C:\Users\maflafn\Documents\Visual Studio 2010>cd Projects
  11.  
  12. C:\Users\maflafn\Documents\Visual Studio 2010\Projects>cd pelda
  13.  
  14. C:\Users\maflafn\Documents\Visual Studio 2010\Projects\pelda\pelda>dir
  15.  A meghajtóban (C) lévo kötetnek nincs címkéje.
  16.  A kötet sorozatszáma: C85F-43C4
  17.  
  18.  C:\Users\maflafn\Documents\Visual Studio 2010\Projects\pelda\pelda tartalma:
  19.  
  20. 2010.12.27.  23:20    <DIR>          .
  21. 2010.12.27.  23:20    <DIR>          ..
  22. 2010.12.27.  23:20    <DIR>          bin
  23. 2010.12.27.  23:20    <DIR>          obj
  24. 2010.12.27.  23:20             2 431 pelda.vcproj
  25. 2010.12.27.  23:20               143 pelda.vcproj.user
  26. 2010.12.27.  23:20               272 Program.cpp
  27.                3 fájl               2 846 bájt
  28.                4 könyvtár   2 937 397 248 bájt szabad
  29.  
  30. C:\Users\maflafn\Documents\Visual Studio 2010\Projects\pelda\pelda>cd bin
  31.  
  32. C:\Users\maflafn\Documents\Visual Studio 2010\Projects\pelda\pelda\bin>cd Debug
  33.  
  34. C:\Users\maflafn\Documents\Visual Studio 2010\Projects\pelda\pelda\bin\Debug>pelda.exe
  35. Most kiírtam valamit.
  36.  
  37. C:\Users\maflafn\Documents\Visual Studio 2010\Projects\pelda\pelda\bin\Debug>

Csak a példa kedvéért kiadtam néhány parancsot, hogy lásd hogyan lehet navigálni a mapparendszerben. A lényeg a 34. sorban van, miután eljutottam a programomhoz beírtam a nevét és entert ütöttem. A program mindössze egy sort ("Most kiírtam valamit.") ír ki, majd leáll. Láthatod hogy utána újból megjelent a prompt. Ha Ezt az intézőből futtattam volna akkor én is csak egy villanást láttam volna.
Nézz utána pl. az MS-Dos-nak, ott találsz sok parancsot amit a parancssorban is használhatsz, vagy csak egyszerűen írd be a parancssorba: help és enter.
Az igazsághoz hozzá tartozik, hogy ez egy elektronikai fórum, így az AVR-ben sokan tudnak segíteni, de PC programozásról sokkal adekvátabb válaszokat kaphatsz mondjuk a prog.hu-n.
(#) Kormen válasza TavIR-AVR hozzászólására (») Dec 28, 2010 /
 
Köszönöm, ezt nézegettem, de bele ütköztem abba a problémába hogy egy frekvenciaszámláló atitiny13 lenne a slave. Ha jól veszem ki hardveres csiccsen benne, a szoftvereshez meg kéne az az int0 ami a frekit számolja.

Lenne egy hülye kérdésem a t13-nak minden lába pcint is. de csak egy külső megszakítás irq-ja van. Valahogy nem találtam a t13 leirásában hogy hogyan tudom rávenni hogy két lábon figyeljen az egyiken a frekit számolja a másikon meg a spi re figyeljen.

Valaki egy oldalszámot, vagy egy regisztert?
(#) Reggie válasza Kormen hozzászólására (») Dec 28, 2010 /
 
Igazsag szerint, ha nem tanulasi celbol csinalod, tul sok ertelme nincs annak, ha a frekimerest kiszervezed egy attiny13-ba, boven el tudna kezelni az atmega16 is.
(#) Kormen válasza Reggie hozzászólására (») Dec 28, 2010 /
 
hát nem tudom, eredetileg a mega16 csinálta, de sokat tévedett. Valahogy az időzítések csúsztak. Igazság szerint a mega 16 nak lenne még ezer feladata, és minden feladat csökkenti a pontosságot. Nekem jó lenne egy itthon beszerezhető sima counter ic-is, de eddig nem találtam. Mivel t13-mam van egy tucat azért gondoltam hogy kiszervezem a frekvenciaszámolást a t13 mást nem is csinálna, és mivel a t13 4mhz-vel gyorsabb nagyobb a tartománya is.. sőt a későbbi feladatok egy részét is t13-mal tervezem.
(#) richard válasza David.zsombor hozzászólására (») Dec 28, 2010 /
 
Helló !

ajánlanám a CodeBlocks programot windowsra, linuxra is jó én ebben tanulok c-ben programozni.
(#) David.zsombor válasza richard hozzászólására (») Dec 28, 2010 /
 
Köszi most jó a DEV C++.
(#) David.zsombor válasza idlob hozzászólására (») Dec 28, 2010 /
 
Jó.Köszi azthiszem értem de akkor a könyvben ez miért nincs benne?A pause az adatbekérős programokat nem zavarja?
(#) luxmanpower hozzászólása Dec 29, 2010 /
 
Hello! A következő lenne a gondom, csinálok egy usb-s programozót, amiben egy atmega48 van. Ez 12Mhz-en járna. a probléma hogy én amit szereztem az atmega48v, és adatlap szerint ez csak 10MHz-et tud. Ha a nagyobb órajellel meghajtom, van esély hogy működjön? Ugyanis most elakadtam ott hogy a gépre rádugom, és azt írja hogy ismeretlen eszköz. Egy nagyon rövid adatmozgás van mindkét adatvonalon, de aztán annyi.
(#) Reggie válasza luxmanpower hozzászólására (») Dec 29, 2010 /
 
Megprobalhatod tulhajtani, tonkre nem fog menni tole. Aztan vagy sikerul vagy hibazni fog a uC.
(#) Reggie válasza Kormen hozzászólására (») Dec 29, 2010 /
 
Ezert vannak a timereknek capture funkcioja. Ezzel nem szamit, hogy mennyire terhelt a mikrokontroller, ugyan ugy jol fog merni. Ha meg 20 MHz kell, akkor van helyette mondjuk ATmega164, de nyilvan mas a helyzet, ha azzal kell fozni ami van. (Ha valthatsz, akkor javaslom az AT32UC3L016-ot, mivel a timerjenek 33MHz a max orajele).
(#) ZsoltyFM hozzászólása Dec 30, 2010 /
 
Sziasztok!
Volna egy problémám
Mégpedig hogy szükségem lenne magyar nyelvű dokumentációra az Atiny 2313-as kontrollerhez.
És hogy ezt a processzortipust miként lehetne programozni assembly-ben.
Akadt egy kis probléma a Pic16f628-al.
Mivel a PIC- mikrovezérlőkkel az a helyzet hogy a goto ugrás 2 utasításciklus azaz 8 órajelet vesz igénybe, ami
rengeteg. Azért is mert adott a kvarc frekvenciája.
Megelőzöm a kérdést hogy miért nem használok többszörös értékűt Ez egy speciális ritka frekvenciájú
kavics. Ez is ritka. többszörösével meg eleve nem találkoztam. 4.864MHz.
és nem bírom kiosztani a számomra szükséges frekvenciát. A projectemnek az lenne a lényege hogy ismételgessek egy folyamatot.
Mégpedig az egyik 8 bites portra különböző értékeket
szeretnék kiküldeni. Majd ha végigért vissza akarok lépni a lista elejére és onnan folytatni. Úgy tudom hogy az avr tipusok gazdaságosabban bánnak az órajelekkel,és ezért szeretnék egy ilyennel próbálkozni.
(#) Kormen válasza Reggie hozzászólására (») Dec 30, 2010 /
 
Na ez az amiről nem tudtam eddig. Köszi, olvasgattam az atmel hivatalos leírását a témából, de bevallom kicsit nem értem. Valószínűleg a műszaki angolom kicsit fejletlen. (minden egyéb angolom is) Hol lelhetnél erről egy kis szösszenetet magyar nyelven? A tavíron a timerek leirásánál a compare match funkcióra nem vesztegetnek sok szót, a capture funkcióra meg egyet sem. Amit írnak az is érthetetlen (már a compare funkcióról) Frankón leírják a példaprogram működését:

"A program elején definiáljuk a chipet, órajelet és a soros kommunikációt. Majd a működéshez szükséges memóriaterületet kiosztjuk. A PortB.5-re a LEDet illesztjük (kimenetre állítjuk). Ezután Timer1 számlálót időszámolásra állítjuk be, és hozzárendeljük az OC1x kimeneteket. A számlálót elindítjuk, a megszakításokat engedélyezzük. A főprogramban D13 LED-.et 3 másodperces ciklusidővel villogtatjuk.

Az OC1A és OC1B (azaz a Timer1-hez rendelt kimenetek) működése a háttérben zajlik, a főprogram erőforrás-foglalása nélkül!

A hátránya azonban, hogy frekvencia ekkor nem állítható, mert a Timer1 kezdőérték beállítása nem lehetséges…

Itt bizony egyszerű négyszögjelet állítottunk elő."

De azt nem hogy mi az a toggle amihez az a-t meg a b-t hasonlítja, mit kell azokra a kimenetekre(bemenetekre?) akasztani, mi történik az oc1X-ekkel mert ugye belőlük kettő van ledből (a példaprogramban) 1 tehát mint kezdő csak nézek és a nemértelem tudományomat a tökélyre fejlesztem.

Próbáltam a HE keresőjét, hogy a fórumban talán találok valahol, de az "timer capture" szavak "ÉS" kapcsolatos keresésére kidobott jó pár olyan témát amiben egyik sem szerepelt. Legalábbis a "ctrl+f" nem találta egyik oldalon sem. Azért keresgélek, ha valakinek akad pár szabad ujja, azért bepötyöghetné röviden
(#) Kafka válasza ZsoltyFM hozzászólására (») Dec 30, 2010 /
 
Szia!
Kicsit tudnád részletezni a programod? Gondolok itt különösen az időkre, mire mennyi idő kell min./max? Miből fakad ez a kristály frekvencia?
(#) Kafka válasza Kormen hozzászólására (») Dec 30, 2010 /
 
Szia!
Timer1 Capture és Compare funkció: 16. fejezet: Megszakítások alatt van.
További segítség lehet a BASCOM könyv illetve ennek internetes változata itt találod. (szintén itt a Toggle magyarázata is)
És még uC adatlapja is sokat segít.
(#) trudnai válasza ZsoltyFM hozzászólására (») Dec 30, 2010 /
 
Ha ennyire ki van elezve a helyzet, akkor nem megfelelo modon allsz a problemahoz valoszinuleg. Ez a 'rengeteg' ido amit 4MHz eseten 8 ciklus alatt eltelik az 2us, ez pedig nagyon sok alkalmazasban boven elegendo. Talan az egyetlen hely ahol gond lehet ha un. bit-bang technikaval butykolsz valamit.
(#) kovacsj válasza ZsoltyFM hozzászólására (») Dec 30, 2010 /
 
Az AVR-ek adatlapjain vannak Assembly példák. Én pl. AVRStudio-t használok a programozáshoz, mert ott nagyon tetszik a szimulátor.
A program betöltéséhez azonban már nemegyszer használtam avrdude-t. is, mert a Windows-om valamiért nem ismeri fel a programozómat, az ugyanazon a gépen lévő Debianom pedig de.

Azt meg kell szoknod, hogy itt a sorrend fordított, UTASÍTÁS HOVÁ,MIT nem úgy mint a PIC-nél, hogy UTASÍTÁS MIT,HOVÁ.
Az utasítások fel vannak sorolva az adatlapon.
(#) (Felhasználó 56240) hozzászólása Dec 30, 2010 /
 
Sziasztok
Kérdésem lenne
Építek egy AVR dropet (Topi) elakadtam, mert nem kaptam 74HC126 ott csak HCT126 és HC125 öt ezeket fel lehet használni helyettesítés céljából?
(#) KSTEFFY válasza (Felhasználó 56240) hozzászólására (») Dec 30, 2010 /
 
A HC CMOS kompatibilis küszöbszint, a HCT pedig TTL
simánjó nekemis az van benne.
(#) (Felhasználó 56240) válasza KSTEFFY hozzászólására (») Dec 30, 2010 /
 
Köszönöm a gyors segítséget
akkor be is rakom a helyére
(#) ZsoltyFM hozzászólása Dec 30, 2010 /
 
Sziasztok!
Köszönöm a segítőkészséget, és kifejteném akkor egy kicsit bővebben miről is van szó.
Multipexer ic-t akarok vezérelni.
Nem megszokott sorrendben.
Méghozzá 2 multiplexer ic kerülne egy 8 bites portra.
egyik multiplexer 8 csatornás másik 16.
tehát összesen 7 bitvezeték szükségelteteik a vezérlésükhöz. Tehát egyetlen megoldás ha literal utasítással konstansokat íratok ki a portra.
Azt sem tehetem meg hogy különböző portokra tegyem
a multiplexereket. Mivel teljesen szinkronba kell hogy fusson a vezérlésük. De eltérő bitkódokkal. Tehát nagyon sok a kötöttség. Az egész program már le is lett próbálva.
és ezen az egy goto utasításon bukik a dolog.
Sajnos a pic-nél nincs rá mód hogy olyan programot Írhassak hogy ez a vissza lépési idő kevesebb legyen.
Aki ismeri a pic-et annak gondolom nem kell bemutatnom az akadályait.
Két assembly utasítás szükséges ahhoz hogy egy értéket írjak ki a portra: literal a w-be, w-ből az f-be azaz filerregisterbe. Ami jelen esetben a port B volt.
Ez két utasítás kell ahhoz hogy egy tetszőleges értéket írassak ki a portra. Ez egészen pontosan 8 órajel, és jelen esetben pont ennyi idő kell a multiplexáláshoz. Viszont mikor lefutottak a literal utasítások és ismételten vissza kellene lépni az elejére, akkor goto utasítást használok ,(nincs más utasítás amivel ez kevesebb órajelvesztéssel kiváltható lenne) és ez önmagában két utasításnyi időt vesz el azaz 8 órajelnyi időt. Tehát mikor a listában szereplő utolsó érték kikerült a portra, jön a goto. Majd aztán a következővetkező értékbevitel a W regiszterbe és onnan a fileregiszterbe. Ha összeszámoljuk akkor láthatjuk hogy a következő értékmódosulás ezen a ponton négy utasításnyi idő.
Azaz eltelt 16 órajel a szükséges 8 helyett.
Azt hiszem eléggé részletes voltam
(#) vilmosd válasza ZsoltyFM hozzászólására (») Dec 30, 2010 /
 
Hali
De azert van megoldas PIC-ben is. Pl 18F1330 tartamaz egy HSPLL uzemmodot, aholis a kulso oszcit egy belso PLL megnegyszerez. Tehat a Te estedben 4.864 MHz kvarc frekijet felszorozza 19.456 MHz-re. Igy a ciklusidod 205.9 uS lesz. Igy van idod megcsinalni az ugrast.
(#) ZsoltyFM válasza vilmosd hozzászólására (») Dec 30, 2010 /
 
Igen. igazad van.
Erről én is hallottam. De nekem 16f-es kontrollerem van néhány. meg egy atiny 2313-mas. ezért kézenfekvőbbnek láttam az avr-t.
Meg aztán a 18f-esekről megint csak nem sok információm van. Mint ahogyan az avr-ekről sem
De AVR-ből van itt egy.
(#) Kormen hozzászólása Dec 30, 2010 /
 
Sziasztok!

Gondoltam megvizsgálom a pcint dolgot. Fogtam egy tiny13-ast és felprogramoztam. 2 lábát akartam pcint módba rakni de nem óhajtja végrehajtani a megszakítást. feltúrtam a guglit, de az alapján amit találtam jól írtam meg a programot. de hiába nyomkodom a gombokat szexuál müködni. Mi lehet a gond?



  1. $regfile = "attiny13.dat"
  2. $crystal = 8000000
  3. $hwstack = 32
  4. $swstack = 16
  5. $framesize = 40
  6.  
  7. Dim Gosend As Bit
  8.  
  9. config portb.5 = output
  10. config portb.4 = output
  11.  
  12. Gimsk.pcie = 1
  13.  
  14. Enable Interrupts
  15. Enable Pcint0
  16. On Pcint0 Tick
  17.  
  18. 'Pcmsk = &B00000101
  19. Pcmsk.0 = 1
  20. Pcmsk.2 = 1
  21.  
  22.  
  23. Main:
  24.  
  25.   If Gosend = 1 Then
  26.     Toggle Portb.4
  27.     Reset Gosend
  28.   End If
  29.  
  30. Goto Main
  31.  
  32.  
  33.  
  34. Tick:
  35.   Toggle Portb.5
  36.   Gosend = 1
  37. Return


Kinomban már mindenféle módon bekapcsoltam. a pb4 pb5 nem változik, a bemenet igen.

Ötlet?
(#) Kafka válasza ZsoltyFM hozzászólására (») Dec 30, 2010 /
 
Szia!
PIC-hez nem értek, de amit írtál az világos.
De miből fakad ez az órajel (4.864 MHz)? Miért kötött ez ennyire? Ez valóban nem egy elterjedt frekvencia pláne ennek a többszöröse. Miért kell ilyen hatalmas sebességgel kapcsolgatni a multiplexert? Az milyen feladatot lát el? Azt hogy választod ki, hogy mit írsz a w-be? Az is valamilyen parancs nem - így időbe is telik?
Egy vad ötlet: külső PLL ami 4x-i a frekvenciát és erről hajtani a uC-t?
(#) Robi98 hozzászólása Dec 30, 2010 /
 
Sziasztok!
Lenne egy problémám.
Az a baj,hogy amikor az AvrStudio4-ben próbáltam programozni,mindig kiírta a hibaüzenetet, hogy az ISP frekvenciának az órajel 1/4 részétől kisebbnek kell lenni,pedig kisebb volt:az órajel 4000000 hz az ISP freki pedig 115,2Khz volt.Az üzenetet csak akkor írta ki ha a fuse bitekre vagy a Lock bitekre kattintok.
A hiba szerintem az lehet,hogy nincs bepipálva 1 fuse bit se mert nem tudom,hogy melyik mit állít be;és az adatlapban sem találtam meg őket(Attiny 45-ös ic-t szeretnék programozni)

Előre is köszönök minden választ és jó tanácsot.
(#) ZsoltyFM válasza Kafka hozzászólására (») Dec 30, 2010 /
 
Sziasztok!
Rengeteg a kérdés
És szerintem felesleges lenne ennyire mélyen belemásznom. Nincs kedvem egy csomót gépelni Tudom ez egy kicsit nagyképűen hangzik de
hidd el hogy mindennek meg van az oka. És nem akarom hogy egyesek a saját ötleteikkel módosítani akarják az enyémet. Mivel én mindenképpen ragaszkodom az enyémhez. Nem egy pillanat szüleménye volt az egész. de hogy oldjam valamennyire a kíváncsiságot, ez egy az fm műsorszóró sávban használatos sztereó encoder lesz. Azért is nem akartam leírni a konkrétumokat mert sorba jönnének az ötletek és kérdések hogy miért kell hogy ilyen legyen. Az analógnak is megvannak az előnyös oldalai és a digitálisnak is. nos én a kettőből akarok valami jót alkotni. Egyik fontos szempont lenne a kis méret. Ebből is látszik hogy nem szeretném felesleges elemekkel kiegészíteni. Tudom hogy sok mindenre van más megoldás is. De én ezen az úton szeretnék haladni. És nem ütközik ez az út olyan akadályba ami miatt más utat kell választani. csak épp a megfelelő eszközre van szükségem. ami megint csak létező dolog.
Következő: »»   292 / 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