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 Idézet: „Mit is szeretnél akkor?” Szeretném, ha valaki segítene nekem ennek a kapcsolásnak a megvalósításában. Nem akarom a fórumot heteken át ezzel terhelni persze a végeredményről beszámolnék. ATMEGA8515 vagy ATMEGA168 jöhetne szóba. Előbbi talán szélesebb határok között használható. Mindenképpen PDIP vagy PLCC tokban, hogy könnyen cserélhető legyen. A sebesség szerintem itt nem kritikus talán elegendő az AVR belső órajele is. C-ben van némi programozási ismeretem tehát ebben kellene megvalósítanom. Szóval várom sgítőszándékú ember jelentkezését aki néha tud rám szánni 1-1 e-mail váltást vagy Skype beszélgetést!
Sziasztok.
Kezdő vagyok a témába. Egy Arduino Mega 2560 eszközöm van és azt szeretném elérni, hogy több logika kaput tudjak megkülönböztetni különböző feszültség értékekkel, amik egy relét kapcsolnának. Hogyan lehetne ezt megvalósítani? Vagy ha nem megfelelő a logikai kapu, akkor milyen más módszerrel? A lényeg az lenne, hogy egy pin-en keresztül továbbított feszültséget meg tudjon különböztetni és csak azt a relét kapcsolja, amihez az adott feszültségértéket kapcsoltam. (Pl.: manuálisan) Köszönöm szépen a válaszokat. -- Ádám
Ennek a shield-nek a billentyuzete pont ugy van megoldva, mint amire neked szukseged van.
Köszönöm, tetszik a megoldás, meglátom hogyan tudom alkalmazni.
Lehet, hogy ez csak az én személyes véleményem, de én azért segítek pl. ebben a fórumban, mert magam is tudom mennyire hasznos, hogyha egy tetszőleges problémára ráguglizva találok megoldást különböző fórumokban.
Én ezért elzárkózok mindenféle privátban történő segítségnyújtásról, mivel annak nem marad nyoma mások számára. Ez természetesen csak azért címeztem neked, hogy ne csodálkozz azon, hogyha senki sem jelentkezik erre a feladatra, mivel szerintem mások is így érezhetnek. Ahogy láttam a csatolt kapcsolási rajzod, úgy vélem, hogy nem teljesen újonc vagy az elektronikán. Egy AVR kapcsolási rajzán olyan sok trükk nincsen igazán. Javaslom figyelmedbe az atmel oldalán található app note-okat. Illetve pl. az olimex oldalán vannak proto boardok kapcsolási rajzokkal, pl ez: Atmega16 AVR programozás ügyében nézz körül itt az avrfreaks oldalon: Avrfreaks Tutorials Aztán, hogyha konkrét kérdésed van és nem akadsz rá válaszra, akkor szerintem nyugodtan terheld ezt a fórumot.
Szia!
Alapvetően teljesen egyetértek veled. Én csak azért godoltam a privát segítségre mert mostanában kevés az időm és nagyon szétszóródna a téma. Ezért írtam, hogy a végé akár cikk formályában megosztanám az eredményt. A másik, hogy biztosan lenne 1-2 kérdésem amire csak beszólást kapnék arra meg nincs szükségem. A kezdőlökést megkaptam most megpróbálok elindulni. Először csak annyit, hogy figyeljek egy bemenetet és a kimeneten kapcsoljak. Ezzel talán elboldogulok. Azt a részt viszont egyáltaln nem látom át, hogy később hogyan tudom a logikai feltételeket egy általam írt (C#-ban) 'szervíz' szoftverrel módosítani.
Nos a kérdésem egyszerű, de egyszerűen nem tudok rájönni mi lehet a galiba...
Lényeg, van egy Atmega16-osom. A feladat az, hogy ugye 8 ADC bemenete van, abból 6-ra küldök 1-1 jelet, azokon szépen egymás után elvégzem az ADC converziót és kiküldöm sorosporton. Ez eddig szép és jó, a probléma az, hogy amennyiben 1 bemenetet használok mindegy melyiket tökéletesen működik is az elképzelés de ha már 2-t azaz változtatok a beolvasás helyén az egész megzavarodik és első alkalommal jól végrehajtja a konverziót majd második alkalommal már egy fix ugyanolyan karaktert olvas be, és küld ki, de mindig ugyanazt az összes csatornán... egyszerűen nem értem miért? A kódot mellékeltem, azaz csak azt a részt ami ide kapcsolódik.
A lényeg van benne csak. Összefoglalva az ADC megy 1-1 csatornán külön külön, de egymás után már nem... Folyamatosan ezt küldi ki: 0x00e6 avagy 0x00e7. Azaz ez az eredménye az ADC-nek...
Nos megpróbálkozom valami értelmessel.
Amit linkeltél megnéztem és rádöbbentem, hogy nagyon jó kiinduló alap számomra: Bővebben: Link Feltételezem, hogy JTAG-re nem lesz szükségem. Ha jól értelmezem a kódot akkor RS232 keresztül számítógépem hyper terminal-al tudom lekérdezni, indítani/leállítani a kimeneteket. Beállítás gondolom ebben nincs. Első kérdés: az UART pontosan mit takar? tudom goggel. rá is kerestem, de célirányos válasz érdekel. Ezzel tudom megvalósítani a későbbi beállítás lekérdezést/módosítást? Másik: Nem világos számomra, hogy miért szórja szét a bemeneteket. I1 = PD2(int0) I2-3-4 = PA0-1-2(ADCx) Ha jól látom PD3-4-5 is szabad. Akkor méis miért?
A probléma azaz, hogy az ADMUX-t nem törlöd a külső föggvény elején. Így a következő csatorna választás mindig hozzá adódik az ADMUX-hoz.
Akad pár dolog, ami teljesen felesleges:
Meg még tuti vannak ilyenek. A másik dolog, ami teljesen szubjektív, de érdemes oda figyelni olyan dolgokra mint pl.
Ugyanarra való mindkettő, de mégis máshogy írod le. Meg egyszer bs-sel állítod be a biteket máskor meg shifteled. Valamilyen struktúrát alakíts ki magadnak, ami neked megfelel, és ahhoz tartsd magad, mert úgy átláthatóbb lesz neked is. Továbbá csak ahhoz a változóhoz kell volatile amelyik az ISR makró és a main "áthidalásához" kell.
Ohhhhhh ezzazzzzzzzz Köszi! Na látod erre nem gondoltam... az a baj hogy nagyon nagyon komplikált a projekt 4 Microkontroller van plusz egy pár ezer soros real time term perlben, és ez mind kommunikál egymással mindre külön szoftver és áhhhh, néha kicsit sok, és én hiába debugolom órákon át nem jövök rá, ezért jó a friss gondolkodás Köszi még egyszer!
Illetve igen tudom, hogy sok felesleges dolog van benne és sok helyen hosszabban is írtam amit akartam ,ez mind mind direkt van. Illetve sok minden maradt benne régi debugokból, pl a cli és a sei is ilyen.
Egyenlőre a maximális átláthatóságra törekszem utána jön a tömörítés
Sziasztok, tudnátok ajánlani valami jó I2C library-t, vagy megoldást a #1189878 problémára?
Köszi
Gondolat ébresztőnek egy kapcsolás. A soros port felé MAX232 illesztő van használva. Ez helyett lehet FT232 használni, ekkor a soros portot USB felületen kapod. Ez mellett a V-USB lib-et használva lehet szoftveres USB-t is, ekkor csak néhány ellenállás és zener kell. Ha MAX232 használsz, akkor kell 7,3728Mhz kvarc (vagy az atmega adatlapján kell másikat kiválasztani, ami illik adott soros porti sebességhez). Ha V-USB mellett döntesz, akkor 12 MHz javasolt.
A beállításokat egy hyper terminálban is megteheted egyszerű parancsokkal, pl.: hűtés engedélyezés az 1-es bementere: H1+ fűtés tiltás a 8-as bemenetre: F8- időzítő 2 perc (120 sec): I120 vagy írni lehet hozzá GUI-s programot is, ami ugyan ezeket a parancsokat küldi el a soros porton (pl: COM1). Itt találsz kódot a soros port (UART) használatához, igaz ez RS485 buszhoz készült, de ezen inkább majd egyszerűsíteni kell.
Köszönöm!
Egyre erősebben húzok az AVR felé. Amit te készítettél az, ha jól gondolom 8 bemenetet fogad 16-ot kapcsol. Ha a 74 595 összes lábát bekötöm és szoftverrel megfelelően (binary) vezérlem.
Igen. Csak azért lett a rajzban 11 felhasználva, mert ha jól emlékszem 8+3 kellett neked. Elvileg lehet több is, ha több shift regisztert használsz fel vagy minden kimenettet bekötsz.
Igen 8+3 volt, de így bővíthetem 13+3-ra ami nekem nem elhanyagolható szempont.
Egy hiba (biztosan) van a rajzban az atmega 7-es lábát VCC-re kell kötni.
És a RESET lábra sem ártana egy kondi, hogy bekapcsoláskor biztos resetelődjön. (100nF)
Szerintem.
Sziasztok
.Mostanában kezdtem ismerkedni az AVR ekkel. Nagyon tetszik a dolog ,az alap progikat meg is csináltam (led villogtatás...stb) Van egy gyroszkopom amit rá szeretnék kötni ,hol kezdjem a program írást és hogyan? Mi kell hozzá? Köszönöm.
Mit faragsz ha nem titok amiben 4 kontroller is van? Egy panelen vannak? Osztozkodnak kozos periferiakkal?
Milyen tipusu a giroszkop pontosan? Milyen jelet allit elo? (analog jel, digitalis jel) Hogyan kommunikal a kulvilaggal? (SPI, TWI(I2C)) Adatlap esetleg?
Ezek nelkul nem nagyon tud segiteni senki...
Nos, valamilyen módon márpedig kell programoznod az AVR flash-ét, hogy fusson rajta a programod. Már ami a JTAG szükségességét illeti.
Amennyiben szeretnéd számítógéppel összekötni, hogy a paramétereket felprogramozd, akkor erre kvázi két mód van: UART, vagy RS232, ezzel a perifériával rendelkezik szinte az összes AVR. UART és RS232 közötti különbség a jelszintekben van, előbbi TTL, utóbbi ~ -12/+12V. Ezt szokásos egy un. max232 szintillesztővel megoldani. Ezt szépen rákötöd a PC COM portjára, jobb híján egy USB->RS232 átalakítóra. Másik lehetőség USB-s AVR használata. Pl. AT90USB162 ezek nincsenek PDIP tokban, csak TQFP vagy QFN tokban. Ez két ok miatt jó: Nem kell programozó, mert hogyha 8 vagy 16MHz -es kristályt használsz, akkor a gyárilag ráhelyezett bootloadert tudod használni. Gyakorlatilag rádugod a gépre USB-vel, lenyomod a reset és hardware reset lábokon lévő gombot (vagy jumpert), ekkor úgy indul el, hogy a PC felismeri és a FLIP nevű programmal tudod programozni. Másfelől pofon egyszerűen belefordíthatsz egy olyan ingyenesen elérhető forráskódgyűjteményt (libraryt), amivel pöccre pont úgy fog viselkedni, mint egy USB->RS232 átalakító. PC-n COM portként látod, AVR-en pedig egy valamilyen függvénnyel le tudod hívni, hogy milyen adat jött a PC-t nutó hyperterminálból, vagy esetleg saját C#programból, ami a COM porton kommunikál.
Üdv
Egy kis segítség kellene. (igaz van egy avr-ben jártas ismerősöm, de sajnos jó pár napig nem elérhető) Egy (Dip) ATmega88-20PU kontrollert kellen programozni. Ami meg van hozzá, az ERRŐL a linkről letölthető. HEX stb. A fuse bitek-kel vagyunk gondban, elvileg erre is van egy HIVATKOZÁS de igazából avr-el nem igazán foglalkoztunk még. Így ha lenne valaki, aki ezt megoldaná hálás lennék. Köszi
Milyen programozód van?
Illetve milyen programmal próbálod programozni? Teszem azt: STK200 + avrdude, AVRISP + avrdude, STK500 + AVR Studio4
Sziasztok!
atmega48 nál szeretném az uart-on bejövő karaktereket karakterlánccá összeilleszteni, a karakterlánc(sztring) végén mindig a "sorlezárás"(/n) lenne, ezt hogyan lehet megvalósítani? Segítségeteket előre is köszönöm! Zoltán
C-ben a string végén EOS (End Of String) szerepel, aminek az értéke 0. Ez gyárilag van így. Emiatt van az hogy egy 8 elemű string 9 bájt helyet foglal . Amit te említesz a \n az a sortörés.
A kérdésedre is válaszoljak:
Kifutottam az időből .
Vagy valami ilyesminek kell lennie, persze pár dologgal kiegészítve.
Szia a gyro egy MMA7361 analog 3 tengelyes .
Az alap pedig egy ARDUINO MEGA 2560 R3 |
Bejelentkezés
Hirdetés |