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
Bascom és ebben a Bascom/samples alatt az SPI könyvtárban SPI master és SPI slave is megtalálható....
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.
Miért zárja be magát azonnal a programom ha nem teszem bele ezt?:
Hogyan tudom parancssorból futtatni a programot?Próbáltam de valamiért nem sikerült.Köszönöm.
Bocsi de ilyen cimmel(és hasonlóval sem találtam témát) az AVR miétek/hogyanokból meg elkűttek.
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.
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.
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?
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.
Helló !
ajánlanám a CodeBlocks programot windowsra, linuxra is jó én ebben tanulok c-ben programozni.
Köszi most jó a DEV C++.
Jó.Köszi azthiszem értem de akkor a könyvben ez miért nincs benne?A pause az adatbekérős programokat nem zavarja?
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.
Megprobalhatod tulhajtani, tonkre nem fog menni tole. Aztan vagy sikerul vagy hibazni fog a uC.
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).
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.
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
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?
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.
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.
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.
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?
A HC CMOS kompatibilis küszöbszint, a HCT pedig TTL
simánjó nekemis az van benne.
Köszönöm a gyors segítséget
akkor be is rakom a helyére
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
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.
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.
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?
Kinomban már mindenféle módon bekapcsoltam. a pb4 pb5 nem változik, a bemenet igen. Ötlet?
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?
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.
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. |
Bejelentkezés
Hirdetés |