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
Kipróbáltam. Igazatok van, az alsó sornak 10,02 méternek kell lenni.
![]() A hozzászólás módosítva: Máj 5, 2017
Mit probaltal ki? Atirtad az avr.h-t, es ettol barmi is valtozott?
Sziasztok! Topi cikke alapján sikerült elindulnom és az LED-ek futófény-szerűen villognak, viszont szeretném, ha ez a 3 állapotos (case) ciklus csak egyszer futna végig, és csak akkor, ha egy nyomógombot rövidre zárok egy pillanatra.
Segítenétek, hogy ezt hogyan oldjam meg? Mellékeltem a kódot! (ATTiny45-öt használtam, de van ATMega16, ATTiny44 is itthon) KÖSZÖNÖM!
Sziasztok mesterek!
Megépíttettem egy korábbi hozzászólásomban említett AVR-Dopert. Egyik fórumtársunk beprogramozta az Atmegát, de az istennek sem akarja felismerni az eszközt a win10! Az eszközkezelőben a HID menüben megjelenik mint "USB beviteli eszköz", de sem az Atmel-studio, sem az AVR-studio, sem a winavr nem látja. A NYÁK-ot többször is alaposan átvizsgáltam, kicsöngettem az esetleges zárlat miatt, de semmi változás. Már nem tudom mit tegyek. Kérném aki tud segítsen rajtam. Köszönöm előre is.
Sziasztok.
Egy programozási problémában szeretnék segítséget kérni. AVR-ek programozásával foglalatoskodok 3-4 éve, viszont eddig minden projektemet assembly nyelven írtam. Pár ismerősöm unszolására elkezdtem foglalkozni a c nyelv és az AVR-ek összeolvasztásával és rögtön belefutottam abba az idegesítő problémába, hogy nem tudom minden egyes bitnek a helyét meghatározni, így a hiba keresés is problémás ![]() A jelenlegi projektem egy led mátrix kijelző. A kijelző kezelést úgy oldottam meg, hogy van egy tömböm, ami az oszlopok és sorok számában pontosan megegyezik a ledek elrendezésével ezt léptetem ki a kimenetre. Ez az Atmega 8-as mikrovezérlőnél be is jött, viszont bővítenem kellett egy 128-as típusra és felborult a dolog. Csak arra tudok gondolni, hogy a tömb olyan memória területre mentődik, amihez tartozik egy fizikai periféria, mert hiába nullázom a tömböt, "szemét" adatok jelennek meg benne. A tömb deklarálása és feltöltése a main függvényben történik, lokális tömbként. Úgy is próbáltam, hogy globális ként deklarálom, a program elején, volatile-ként, de ugyan az a tünet. (ha statikus-ként hoztam létre, akkor nem került bele nem kívánt dolog, viszont ugye én sem tudtam módosítani) Előre is köszönöm a segítséget.
Szia! Gombnyomásra így várhatsz:
Ami nekem nem egyértelmű: ledenként szeretnéd léptetni (ehhez elég a fenti kód), vagy egy gombnyomásra fusson le egy hármas ciklus.
Szia! Sajnos a doper winXP felett nehezen bírható működésre, én inkább készítettem egy stk500-at amikor win7-re költöztem. Ne haragudj, hogy nem említettem ezt múltkor, már teljesen elfelejtettem ezt a problémát, illetve nem is gondoltam arra, milyen OS-t használsz majd.
Ha van rá lehetőséged, próbáld ki xp-s gépen, azzal mennie kell.
Szia! Mivel a tömb a ram-ban tárolódik, szerintem azt nem írhatná át magától egy periféria, azok csak a saját regisztereiket módosítják, bár nem ismerem a 128 felépítését. Ha lehet, tedd fel a kódot, akkor a többiek is könnyeben tudnak majd segíteni.
Köszönöm a választ. A kód elég nagy terjedelmű, megpróbáltam egy kicsit rövidíteni.
Üdv!
Mivel az AVR 8bites, igy célszerűbb 8bites változókat használni, ahol csak lehet. Próbáld csak volatile unsigned char -ként a változókat használni, ahol a változó nem haladja meg a 255-öt. A Shiftelést miért saját kóddal végzed? SPI nem lenne jobb? (Vagy foglaltak azok a lábak?) Mekkora ez a led mátrix(20x18db), RGBs? Miért ilyen nagy(720byte) a kijelző változó mérete? Ha csak 0-1-et tárolsz benne, akkor 6 byte is elég lenne... 3-3 soronként/oszloponként.
Sziasztok!
Két ATMEGA328P közt szeretnék kommunikációt megvalósítani, rádióval. Gyakorlatilag távirányító és jármű a cél. Az RX,TX lábakat szeretném fenntartani az USB-nek, tehát I2C-ben gondolkodok (RS-fenetudja milyen port). Van ötletetek? Lehetséges a dolog? Tudnia kell a adó-vevő párnak az I2C-t, vagy elég ha 2 irányú és csak rátolom az adatot? Köszönöm.
Elsőként oszd meg velünk, milyen modullal valósítod meg a rádiókommunikációt. Ennek ismerete nélkül nehéz tanácsot adni.
Sziasztok!
Tanácsaitokat várom a következő problémám megoldásához: Véletlen folytán ATXMEGA32A4-UA helyett ATXMEGA32A4U-UA procit rendeltem.Nem tudom hogyan programozzam fel.Ugyanis a fusebitek: FF,00,7F,EE,EA/0-1-2-4-5/ az első tipushoz.A 32A4U tipushoz csak 1-2-4-5 tehát 4 féle kell. Hogyan tovább? köszönettel a segitségeket.
Tessék. Mondjuk tényleg ki akarod kapcsolni a resetet?
Megj.: Közben észrevettem, hogy a 16-osakat jelöltem ki, de ugyanaz mint a 32. A hozzászólás módosítva: Máj 15, 2017
Pont ez a kérdés. Van e erre alkalmas modul?
Van. Szétnézhetsz a buta 315 és 433MHz-es modulok környékén (filléresek, de itt bitbangolnod kell). Az elegánsabb bluetooth kiesik, mert elhasználod az RX, TX-et (bár megoldható, hogy több dologra használd).
Nem tudom mi okozhatja a szemetelést, a screenout függvény működését nem látom át. Amikor shifteled az adatokat, én tennék bele egy minimális késleltetést, mert ez így nagyon gyors, hogy bekapcsolod a lábat és a következő utasítás pedig kikapcsolja. Persze ha a shift-regiszter fel tudja dolgozni, akkor nem gond.
Azon felul vannak az SPI-sek, amiket siman lehet meg hasznalni. Van egyiranyu, de vannak ketiranyuak is.
Biztosan van, csak olyat még nem használtam.
Utána néztem hírtelen. Jól gondolom, hogy ez a MISO/MOSI/SCK lábakkal operál?
I2C max 2m távolságig használható, viszont 2 kábel elég.
2 méter nekem kevés és a kábel sem opció.
Köszönöm mindenkinek!
Sziasztok!
Van valakinek esetleg DMX512 dimmerhez (fázishasítás nullátmenet figyeléssel) C kódja magán felhasználásra? Olyan kellene, ami már bevált. Vagy esetleg külön-külön (DMX fogadó, dimmer). Hendrik Hölscher-nek van egy szépen dokumentált megoldása, hardverileg azt veszem alapul, de a kód assemblyben íródott. Szeretnék módosítani rajta pár dolgot, ami számomra C-ben triviális, asm-ben nem annyira. Főleg az időhiány miatt nem szeretném 0-ról megírni (bár abból lehet a legtöbbet tanulni), meg nem teljesen egyedi problémához keresek megoldást. Ez a DMX receiver jó lehet?
2db XMEGA osztozna egy SPI-RAM-on. Ezt agyaltam ki, a biztonság kedvéért, ha valaki rápillantana, mielőtt elmegyek az erdőbe... Alapban A_ker/B_ker=1, nulla szinttel kéri a buszt, ha a lefutó él után az A_ok/B_ok=1, akkor megkapta, ha nem, akkor foglalt, visszamegy 1-be, majd újra próbálkozik. Ha megkapta a buszt, akkor folyamatosan 0-ban tartja a kérés patát. Vélemény?
AVR alatt mindenképp furcsa egy NAND kaput és demultiplexert látni.
SPI alatt nem látom akadályát, hogy két mikrovezérlő ugyanazt az eszközt használja, igazából a buszhasználatról kell döntened. Ki vezérli a buszt? - a legnehezebb a kölcsönös kizárás megvalósítása, ki állítja a SEL bitet a multiplexereden - ha van mondjuk UART/I2C/... kommunikáció a két mikrovezérlő között, akkor -> 'A' mikrovezérlő megkéri 'B' mikrovezérlőt, hogy olvass az SPI RAM-ból helyettem... -> vagy 'A' mikrovezérlő megkéri 'B' mikrovezérlőt, hogy engedje el az SPI buszt Amit akarsz, azt tisztán szoftveresen is meg lehet csinálni, NAND/DEMUX varázslás nélkül. Semmi nem akadályoz, hogy összekösd a két mikrovezérlő MISO/MOSI/SCK/CS vonalait. Amikor egyik vezérel, a másik nem vezérel. Az interneten SPI multimaster alatt érdemes keresni. Nekem ágyúval verébre lövöldözésnek tűnik ez a megoldás. A feladat legnehezebb része az arbitráció, amelyik eldönti, hogy melyik mesternek van joga adni. Ezt a NAND/DEMUX esetben is meg kell valahogy oldanod. A hozzászólás módosítva: Máj 17, 2017
Azért döntöttem a hardver mellett, mert mindkét oldalt szakad vagy 3-4 INT aminek lekezelése akár 1msec is lehet és pl. megnézi A, hogy szabad-e az SPI, örül, elkezdi állítani a port irányregisztereit, ekkor bekap egy INTet, közben a másik is még azt látja, hogy szabad, B is nekiesik. INTből vissza meg azt hiszi, hogy nem történt semmi és csinálná A a dolgát, miközben már B fogja a buszt. Biztos meg lehet oldani többszörös ellenőrzéssel, bár az sem alap, mert itt DMA-val birizgálom az SPI-t, szóval az esetleges ütközéseket nem is tudom detektálni. Tehát:
-A: szabad a port? -Igen -na, itt esik be egy INT B: szabad a port? - Igen, akkor hajrá - A visszajön INTből. Pfffff Persze biztos van valami pofonegyszerű megoldás, még túrok egy kicsit. Köszi a véleményezést!!!
Amig csak ket eszkoz kuzd a buszert, addig a legegyszerubben ugy tudod megoldani a dontest, hogy az egyik AVR elkeri a masiktol azt. Ha A-nak kell, akkor elkeri B-tol. Ha B odaadja, akkor hajra. Ha egyszer odaadta, akkor addig B nem nyul a buszhoz, amig A vissza nem adja. Ha B-nek kell, akkor egyszeruen hasznalja, es ha kozben A keri, akkor nem adja neki oda. Tehat kell egy REQ A->B iranyba, es kell egy ACK vagy GRANT B->A iranyba. Es ezek utan fizikailag a buszt valoban tudod port engedelyezessel valtogatni, bar nekem tetszik a multiplexer, csak itt tenyleg felesleges.
Igen, közben én is rájöttem, hogy az MX nem fontos...talán azért tettem bele, hogy a közös SCK ne fusson be az inaktív uCbe és ott INTet okozva, de itt most úgy sem kap kívülről vezérlést (nem slave).
Köszönöm! |
Bejelentkezés
Hirdetés |