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
Helló!
Az Attiny45 reset lábát, ha beállítom kimenetnek, akkor hogy lehet programozni, ha nincs reset láb? kellene ez a láb kimenetnek, mert a többi már foglalt.
Ha egyszer átprogramoztad I/O lábnak, onnan már csak magas feszültségű programozással tudod újra programozni.
Úgy gondoltam, hogy:
k=0 while(1) if(nyomod a gombot): (for k++, timer) if(nem nyomod a gombot & k=!0) ebben: if(k<50) rövid volt, k=0 else: hosszú volt, kilép while ciklusból is, és ugrik tovább Csakhogy ezt azé se sikerült sehogyan sem összehozni, pedig egyszerűnek tűnik, így lett belőle ez: k=0 while(1) if(nem nyom): (for k++, timer) if(nyom & k<50) rövid volt, k=0 if(nyom & k>50) hosszú volt, megy tova... Így tehát nem tudtam összehozni a hosszú gombnyomást, de ha sokáig nem nyomod a gombot, akkor azt érzékeli, és kigyúl egy led, h innentől már más funkcijó tartozik az ujabb gombnyomáshoz. Nah, ez az ötlet hogy tetszik? Bár még próbálkozom az eredeti megvalósítással.>
Hümm... (ha így kezdek egy hozzászólást, akkor lehet félni; magamtól is szoktam)
Atmega8, de általánosíthatunk is. Lehet-e egy változó értékét lementeni úgy, hogy az legközelebb megmaradjon, akár áramszünet esetén is? Sajna most már összekevertem, EEPROM, FLASH, RAM stb. Elmentem, hogy mi volt utoljára a változó értéke, és legközelebb egyből azzal indul a program, hogy kiolvas? Ez tartozna a hosszú-rövid gombnyomáshoz. (rövid: növel, hosszú elfogad)
SRAM: Statikus memória. Amíg áram alatt van a chip, addig memóriaként működik. Utána felejt. A változók tárolása van itt.
Flash: Flashmemória, avagy programmemória. Itt tárolódik a programod. lap szervezésű. EEPROM: háttértár, ahova írhatsz, olvashatod. Byte szervezésű. Kikapcs adatok tárolására ideális. basom alatt: Dim a as byte ERAM 'Az EEPROMban tárolódó A érték writeeeprom mit, hova 'a mit erteket a hova cimen tárolja (byte) readeeprom mit, honnan 'a mit változót a honnan címről feltölti. Bascom + EEPROM
Áh, köszi.
Én C-ben tologatom a progikat, találtam adatlapban is példát rá, de ott mindenféle memóriacímeket említ, amit szivesen kihagynék, ill. nekem az nem mond semmit, hogy (mit, hova), mert az rengeteg variáns lehet... meg ezt külső függvénnyel hogyan hívjam meg, meg stb stb. Köszi, kutatgatok még mintaprogik után C-ben. De ezek szerint nem lesz bonyi a dolog. Nem találtam. Esetleg nincs valakinek komplett programja, ami működik, 100%-ig egyértelmű lenne? Bocsi
Itt a kód, nem teszteltem, de működnie kellene. Persze a timer -t az AVR tipusához kell konfigurálni, illetve a gombot én a kód alapján a PORT B -re raktam, ezt is át kéne írni ahova jólesik.
Szerkesztve : A fórum motor nem képes jól megjeleníteni a kódot... Amit itt látsz az hiányos... Ha kell a jó kód írjál.
Köszönöm szépen, működik is!
Bemásolom ide a konkrét megoldást, hogy kereshető legyen: EEPROM írása c nyelven:
a változót írtuk be és olvastuk ki a 0-ás memóriahelyről Köszönet!
üdv mindenkinek
Felmerült egy olyan probléma hogy nem akarja az istenért sem beprogramozni az a vezérlőt a programozó... Ez lett volna a programozó teszt programozása, de valahogy nem tudom beállítani hogy működjön...levettem a frekvenciát is a CLKDIV8 fuse miatt ami benne van a mikrovezérlőben, de akkor sem megy mi lehet a probléma? Miért nem akarja felprogramozni a vezérlőt, vagy lehet hogy én raktam rosszul össze a programozót?? Valaki segitsen mert én már tanácstalan vagyok :nemtudom: :no: Előre is kössz....
A screenshot lemaradt....ezen rajta van a hibaüznet...
Valamint a az AVR-ben elindul a program de nem úgy működik ahogyan kellene... Ez egy egyszerü 2 LED-es villogó lenne de a két leg egyszerre villog ahelyett hogy felváltva tenné ezt...
Sziasztok !
Attiny2313: Kellene egy Open Drain I/O kulso felhuzo ellenallassal (4.7k) iButton -hoz (OW protokol). Ahogy nezem csak a TWI-nel van ilyen, SDA jo is lenne, csak az a kerdes, hogy hogyan hasznalhatnam egyszerre I/Onak es programozasra is? Vagy esetleg mas lehetoseg? Koszi.
Az mar vilagos hogy I/Okent hasznalhato kulso felhuzo ellenallassal.
Az nem, hogy a DDRx es PORTx regisztereken kivul mast is kell configolni? Idézet: „Pull-ups on the SDA and SCL port pin are disabled in Two-wire mode.” Namost van belso felhuzo ellenallasa es ki kell kapcsolni azzal hogy TWI modot allitok a portnak? vagy nincs?
Ha lefordítom a szöveget amit bemásoltál, abból az jön le, hogy kikapcsolja a beépített felhúzó ellenállást automatikusan. Még sosem próbáltam így használni. Egyénként miért nem jó a beépített felhúzó ellenállás? Én szertem használni őket így. Megspórolok egy külső ellenállsát. A programozás miatt ne aggódjál, ott nem zavar be a beépített felhúzó ellenállás, külső felhúzó ellenállás, sem okozhat elvileg bajt a programozó lábakon, de megintcsak ismételni tudom magam, ha csak anyi az össz feladat, hogy felhúzd a tápra a lábat, arra tökéletes a beépített felhúzó ellenállás is.
Nem jo a belso iButton eseteben, es mas Open Drain I/O nincs az ICn.
Az erdekelne hogy alapbol ki van kapcsolva a belso felhuzo ellenallas, vagy ezt valami configgal meg kell tenni ? Lesz meg mivel kinlodni, ebben biztos szeretnek lenni.
Alapból bekapcsoláskor minden lábon inaktív a felhúzó ellenállás. Illetve alapból a lábak is tristate bemenet állapotban vannak. Ezek állapotát a progam tudja megváltoztatni a futás során. De bekapcsoláskor mindíg így indul ahogy leírtam.
Kedves Mindenki!
Egy ATmega2561-est szeretnék programozni/debugolni az ePosz cég JTAG ICE eszközével. Namost tudok kapcsolódni az AVR-hez de pl. a fuse biteket nem olvassa nem írja a lock biteket olvassa (0xFF) programozni nem tudok de olvasni igen. Ugyanakkor olvasáskor csupa 0-t olvas. Namost az eredeti JTAG ICE nem támogatja ezt a mikrovezérlőt de elvileg ezzel lehet ezt programozni, legalábbis úgy kaptam hozzá hogy működik. Ha tudna valaki segíteni hogy mi lehet a baj akkor azt megköszönném.
Koszi. Ezek szerint hasznalhatom I/O-kent kulso felhuzo ellenallassal. Hamarosan kiderul.
Egy ötletem megvalósíthatóságára szeretném kikérni a véleményeteket:
Egy digitális jel felvevőt és lejátszót szeretnék építeni. Az alapötlet, hogy pl USB-s készülékeket átvezetni egy AVR-en vagyis a lábakat (adatlábak) rákötni egy AVR két lábára. Majd ezt továbbvezetni a laptophoz. Amikor lenyomok egy gombot az AVR elkezdi felvenni mindkét jelet majd ezeket vissza lehet játszani: Pl: Billentyűzet bedugásakor felveszi az elejét amíg felismeri az eszközt. Majd megállítom. Lenyomom pl az A betűt ezt felveszem stb...stb... Az USB-nél, ha jól látom az 1 és 4 láb a +5V és a föld. A másik kettőre azt írták, hogy data + és data - ez pontosan mit jelent?
Eloszoris az USB protokol tul bonyolult .
Masodszor hogy akarod max. 16MHz-en futo procival "felvenni" a 60Mbyte/s adatatvitelt? (USB2.0) Es hova tarolod el?
Elméletig lehetséges amit akarsz, de nem lesz túl könnyű dolgod, már az illesztésnél problémák lesznek. Az usb csavart érpáras fizikai közeget használ az átvitelhez, és csak a leglassabb átviteli sebességnél kmpatibilis valamelyest a logikai jelekkel. High Speed módba 400mV-os jelek szaladgálnak a kábelen, azt te nem fogod egyszerüen feldolgozni, már csak a 480Mbit/sec -es sebesség miatt sem. Bár a Low Speed 1,5Mbit/sec -je is elég nagy kihívás, hogy letudjad menteni valahogy.
Ha USB-s billentyűzetet akarsz AVR-vel szimulálni (karakterküldés ilyesmi) akkor arra vannak netten kész megoldások. Topi is így oldotta meg a valamelyik témában bemutatott adatgyűjtőjét, ami excelbe irogat.
Sziasztok!
Egy elméleti kérdésem lenne... Szeretnék építeni egy chronométer-t, azaz lövedék sebesség mérő műszert. Airsofthoz kéne, ahol a lövedékek kezdő sebessége kb 80m/sec és 150m/sec közözz mozog. Lenne két érzékelő (optpkapu), első indítana egy számlálót, második leállítaná, és kijelezné ezt sebességben. Ha 10 centire helyezem az érzékelőket egymástók akkor 1/1000 (0,001) mp alatt lemegy az indítás, leállítás (vagy még gyorsabban). Gondolom ez nem jelent gondot, pl egy 16MHz kvarc oszcillátorral 16000 utasítást tud végrehajtani 0,001 mp alatt? Ilyen egy gyári készülék: Chronographs
Sejtettem, hogy nem lesz egyszerű.
Akkor marad a második megoldás avagy fogok egy USB-s billentyűzetet és kiszerelem az elektronikáját.
Az ötlet megvalósítható, de olyan eszközök kellenek hozzá, amivel kivitelezhető a ~21 nanoszekundumonkénti mintavételezés és az adatok ilyen ütemű eltárolása.
Ilyen például a BEAGLE USB 12 analizátor. A High Speed eszközök (gyors USB pendrive, külső diszkek) esetén egy 64 megabájtos átmeneti tárolóval "lassítják meg" a forgalmat ahhoz, hogy a 16,7 ns feloldású mintavételező veszteségmentesen fel tudja dolgozni a jeleket. Természetesen az egésznek csak akkor van értelme, ha van a háttérben egy olyan program, amelyik analizálja a jeleket, és emészthető formában mutatja a protokolt a felhasználónak.
Topi csinált itt egy olyat, hogy egy atmega8 (16?) -ost úgy látott a gép, mint egy billentyűzetet.
Namármost nekem is hasonlóra lenne szükségem. Az a baj, hogy mindegyik megoldás komplett és nagyon hosszú bonyolult a forráskódjuk, napokig tartana értelmezni. Általános leírást pedig nem találtam eddig, hogy hogyan is működik ez az usb dolog, ha csak egy sima kis billentyűzetről lenne szó. (Amúgy Joystick készül így ha minden kötél szakad marad a kiszerelt USB-s billentyűzet elektronikája)
Hello!
Én egyszer készítettem egy ilyen chrono-t. Igaz basic volt a nyelv, de az most szinte nem lényeg. Link
Sziasztok !
Irok valami drivert attiny2313-ra. Irtam ket delay fuggvenyt:
Belso 8 MHz , 8 DIV unprogrammed -nel a delay_ms(500); kb 4-szer akkora idot kesleltet. (L FUSE = 11100010) Mi lehet a gond
Ha igy irom az 1sec delayt akkor jo:
Ennyi ido elmenne a ciklussal ? mega8-nal nem emlekszem hogy ilyen nagy elteres lett volna.
Használható a _delay_us (double __us) és _delay_ms (double __ms) is ha include -olod a delay.h -t. ezek után nem értem mindek akarsz olyan delay fügvényt írni ami már kész van. Ezek a gyári fügvyények elvileg pontosak, ha jól megadtad a processzor sebességét a #define F_CPU 8000000UL parancsal (itt most 8Mhz). Amúgy meg javaslom áttanulmányozni az WinAVR\avr\include\util\delay.h file-t mert abban pontosen le van írva, hogyan is kell használni. Én szeméyl szerint nem szeretem ezeket a gyári delay-eket mert sokkal hatékoynabban is lehet késleltetni, de amúgy működnek.
|
Bejelentkezés
Hirdetés |