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
Nem fog menni, mert megvaltozott nehany dolog(pl. nehany bit elnevezese egyes regiszterekben).
Ez a migracios doksi, ami alapjan at kell irnod a kodot. Azert nem veszes, a nagyresze search&replace muvelettel megoldhato.
Köszönöm! Még egy kérdés, a fenti *.c kiterjesztésű fájlt melyik programmal tudom szerkeszteni? AVR Studio?
sziasztok!
egy kis segítségre lenne szükségem. mégpedig egy attiny2313-al kapcsolatban. írtam egy igen egyszerű kis progit pic16f628-ra, és az a problémám hogy ott sehogy nem tudok megoldani egy kis időzítési problémát. aki ismeri a pic-eknél a goto utasítást azt tudja hogy a végrehajtása 8 órajejet emészt fel. a feladat egészen pontosan az lenne hogy egy 8 bites portra tetszőleges állapotokat írjak ki. viszont az is fontos lenne hogy az állapotfrissítések közt mindig ugyanannyi legyen az idő. és az értékeket újból az elejéről kezdve kellene a portra kiíratni a pic-nél sajnos a lista elejére való ugráskor, a goto miatt az állapotfrissítések közt kétszer annyi idő telik el mint amennyi kellene. Még mielőtt azt a bölcs javaslatot kapnám hogy használjak dupla frekijű kavicsot. ![]()
Egyáltalán nem ismerem a PIC lelkivilágát, de nem állhat messze az AVR-től. Gondolom a működési logika hasonló.
A lényeg, ha az időzítést a főprogramban kezeled akkor nem jársz sikerrel. A TIMER megszakítás segíthet neked. Okosabbat majd mondanak az okosabbak nekem ez az észrevételem.
a megszakítás nekem is megfordult a fejembe de sajnos nincs idő sem rá hogy folyamatában lekezeljem.
Bár nem ismerem a kívánt pontos működést, így ennyiből nem mondanám, hogy az AVR-re való áttérés az egyetlen megoldás...
Szakadozik a wifi, duplapostolok már megint... :@
A hozzászólás módosítva: Okt 21, 2012
akkor közlöm a lényeget a pic nél ahhoz hogy az ugrással együtt kitegyem a portra az új értéket 16 órajelnek kell minimum eltelnie.
![]()
Sziasztok!
Szabadon marad egy ADC portom és nem tudtam mit kezdjek vele. Végül találtam neki feladatot. A kapcsolásomba végülis egy DS3107 RTC IC került. Ennek van battery lába. Az ADC-t arra szeretném használni, hogy figyeljem a 3V elem feszültségét. És itt elbizonytalanodtam. Ezt a 3V feszültséget köthetem közvetlen az ADC lábra vagy itt is kell feszültség osztást használnom? Az ADC referencia 5V.
Üdv!
Egy kis segítséget szeretnék kérni interrupt ügyben. AVR-rel szeretnék mint óra használni, amihez egy 32,678kHz-es kristályt használnék a TOSC1/2 lábakon. A TCNT2 és a OCR2 összehasonlításával mérnék 1mp-et. Amikor ezt elérné, akkor beugrik az interruptba, aminek annyi lenne a feladat, hogy egy integernek az értéket növelje meg 1-el. Na itt akadtam el. interrupt rutin:
Egy nem használt lábra raktam egy ledet, hogy lássam történik e valami. Igen a led villog, ahogy kell. Lehet hogy az a hiba, hogy az eredeti kódban array-ben használtam a set-et? Valahogy így:
igazad van! ezzel én is tisztában vagyok, viszont én ezt ismerem inkább. ezt be tudom programozni. meg hát assembly-ben tudok csak programot írni. és a 16f-es családról vannak inkább információim magyarul. pll-t nem akartam használni és mivel tudom hogy ez a problémám megoldódna egy egyszerűbb attiny2313-al is. mellékesen abból van is egy.
mivel itt sokan vagytok akik avr-ekkel foglalkoztok,bíztam abban hogy segítséget kapok a kitűzött célommal kapcsolatban. de ti már megint csak ötletekkel dobálóztok és nem abban kapok segítséget amiben kérek. ezt ne vedd magadra általánosságban ez a szokás. mivel más nem ismeri az egyébb okokat. szóval rőviden nekem csak egy sablon progira lenne szükségem erre a procira azaz egy sablon kell configokkal együtt ahová nekem mondhatni csak be kell illesztenem azokat az értékeket amiket én ki szeretnék iratni a portra.
Üdv!
Atmega32A-PU-n próbálok soros kommunikációt létrehozni interrupt-al ennek a tutorialnak a segítségével: Bővebben: Link Belső 8MHz-es órajelet használok, tudom ez nem feltétlen elég pontos ehhez, de értelmezésem szerint max az történne hogy hibás adatok mennek át. AVR Studio6-ot használok, ahol mindig kiválasztom íráskor hogy 32A. Ez az egy program azonban csak akkor hajlandó működni ha sima 32-őt választok. 32A-t választva mintha egy végtelen ciklusba kerülne, és semmit nem csinál miután az első adatot megkapta és vissza kéne küldenie. Tud valaki valamit mondani arról hogy a 32 és 32A-pu között mi a különbség? Az ATMEL oldalán nem találtam olyat ami ezt magyarázná.
A sec változód definiáld volatile-nak.
Máskülönben kioptimalizálja a fordítód. Magyarul: nem futtatja le.
Az AtmegaXX és AtmegaXXA (XX tetszőleges típus) között csak szilikon revízió különbség van. Teljesen kompatibilisnek kellene lenniük.
Honnan tudod, hogy végtelen ciklusba kerül? Valamilyen debuggert használsz? Vagy egyéb módon következtetted ki? Azt tudod, hogy mire kerül végtelen ciklusba? Ha igen, akkor azt a kód részletet postold be.
Szia!
Én a következő képpen használom, hogy órám legyen. Nálam 16 MHz az órajel.
Remélem nem hagytam ki semmit. Amúgy most térek át RTC IC használatára. Konkrétan DS1307.
Nos közben arra gondoltam, hogy jobb, ha teszek be osztást pl. 100k+220k így 3,3V elemfeszültség esetén 512-t mérek. Gyakorlatilag 0-512 között kell számolnom.
Úgy gondolom, hogy ennek alapvetően nincs jelentőssége csak talán a kódolás lesz könyebb/áttekinthetőbb. Mivel 5V a referencia így köthetném direkt is az elemet, de maceránsabbnak érzem a kódolást. Mi a véleményetek?
Barmivel tudod szerkeszteni, de a leforditashoz kelleni fog az AVR Studio es a Toolchain is.
Igazabol azert nem adott senki sem ertelmes valaszt, mert elmondod, hogy mi a problema, de azt nem, hogy konkretan milyen segitseget varnal.
Köszönöm az infót!
Nem biztos hogy jól fogalmaztam a végtelen ciklussal. 1 Atmega 32A-PU-m van, a másik (sima 32) ISIS-ben fut, vagy mindkettő ISIS-ben, teljesen mindegy a végeredmény ugyan az. Az egyik interrupt-al fogadja a másik által elküldött jelet. Adó ilyen formán:
A vevő így:
Ha a vevő 32-es beállítással van lefordítva akkor minden tökéletes, villog a ledem ha bejön az adat, még akkor is ha rossz BAUD-ot állítok be ha viszont 32A beállítással fordítom le akkor csak az első pár utasítás hajtódik végre (tehát ha ott kapcsolok ki-be egy-egy portot azt még látom), gondolom addig amíg az első adat be nem érkezik. És ami a ISR alatt van utasítás azokból semmi nem hajtódik végre. Debuggert nem használok, nem rég óta próbálkozok csak ilyesmivel, lényegében arra voltam kíváncsi lehet e hátránya annak ha 32-őt állítok be 32A helyett A hozzászólás módosítva: Okt 22, 2012
hello!
Úgy véltem hogy a legelső bejegyzésem elég információt ad arról mit is szeretnék. Mivel azt nem várom el senkitől hogy megírja helyettem a programot, ezért nem is mentem bele a részletekbe hiszen felesleges és csak körítést tennék a lényeg köré. Nekem csak egy 8 bites érték kiírás kell a portra. ami olyan 32 lépésből áll. Ami ha lejár újból elölről kezdődik. És sima számláló léptetéssel nem valósítható meg, mert semmiféle rendszere nincs a kiíratandó értékeknek. De akkor leírok kicsit még többet ![]() 2 független feladatot kell ellátnom vele. 3 bit-en egy multiplexert vezérlek, 5 biten vele szoros szinkronban egy szinuszt rajzolok ki ellenálláslétrával és fontos a szinkron ezért kell mindezt egy porton megoldani.
Az utasitasok idoigenye:
ugras 2 adatbetoltes memoriabol regiszterbe 2 adatbetoltes kozvetlenul(utasitasbol) regiszterbe 1 regiszter kiirasa a portra 1 nop 1 Sorrendben ezek az utasitasok: jmp cim ld regiszter,memoriacim ldi regiszter,adat out portcim,regiszter nop A lyukakat ertelemszeruen nop-pal kell kitolteni. ![]() A legfőbb problémám a konfiguráció, mivel nem igazán tudok sok mindent az attiny2313-ról. minden portlábát szeretném kimenetté konfigolni és 4.864-es kvarcot ráakasztani. Szeretném hogy stabilan menjen a program benne. akárhonnan érkező zavar (pl:táp ingadozás) se állítsa le a futást vagy ha le is állna induljon újra.Ezt nem tudom ilyen esetben hogy kell, hogy érdemes beállítani. Szóval egy fejléc és konfiguráció ami nekem gondot okoz.
Üdv!
Ismét én, más problémával. Egy MCP 23S17-E/SP IC-t próbálok beüzemelni. Az írással nincs gond, csak az olvasás nem megy valamiért. Megpróbáltam a felhúzó ellenállásokat is bekapcsolni, amolyan tesztelésnek, de az sem ment. Ezt a kódot a netten 2 helyen is megtaláltam, csak nem másoltam, hanem leírtam, így valószínű, hogy valamit én írtam el. A kódban hol lehet a gond?
Na kiderítettem neked a dolgot, bár azt hiszem anyázok majd Atmelnek emiatt.
Voltak olyan kedvesek és megváltoztatták az Interrupt Vektor define -ját. A helyes atmega32A-nál:
Két aláhúzás kell... Az iom32a.h fileban találod meg, hogy mik a helyes elnevezések. Tehát:
Az lss fileban akadtam rá, hogy atmega32a -ra fordítva be sem kerül az interrupt vektorokba az uart recieve interrupt, lásd a képen. A hozzászólás módosítva: Okt 23, 2012
Hehe, érdekes. Biztos szükség volt erre a változtatásra
![]() Köszönöm szépen a kitartó segítséget!
Sziasztok
Egy ki segítség kellene. Atmega8-ban c nyelven egy tömböt szeretnék feltölteni betükkel. Csak azt nem tudom merre induljak.
Kérdésedből úgy gondolom nem ismered magát a C nyelvet sem. A C-ben nincs string változó. A char valójában egy tömb. Kérdés hogyan definiálod.
Mi a konkrét problémád ami Atmega8 specifikus?
Ezt javaslom:
A C programozási nyelv
Alap C tudás itt nem elég! AVR-nél többféleképp lehet, kérdés pl. az is hogyan definiálod.
Egyszerű definícó, túl nagy tömböknél nem ajánlott, egyetlen előnye hogy sima változóként használhatod:
Jegyezd meg: ha sztringként definiálod, a mérete +1 bájttal nagyobb lesz a sztring végi "\0" miatt! Ezen kívül még van 2 féle konstans definíció, ami vagy a FLASH, vagy az EEPROM-ba tárol. Mindkettő előnye hogy a tömb feltöltéséhez tulajdonképpen nem kell semmilyen utasítás, a HEX vagy EEP fájlba a tömb tartalma bele van égetve. Hátránya hogy nem használhatod őket sima változóként, mindig makrókkal kell jelölnöd, és futás közben nem változtathatod meg. Ezek leírását, használatát a "pgmspace.h" és "eeprom.h" leírásában megtalálod feketén-fehéren. A hozzászólás módosítva: Okt 23, 2012
|
Bejelentkezés
Hirdetés |