Fórum témák

» Több friss téma
Fórum » AVR - Miértek hogyanok
 
Témaindító: pakibec, idő: Márc 11, 2006
Témakörök:
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
Lapozás: OK   526 / 840
(#) vtnagy hozzászólása Márc 16, 2013 /
 
Sziasztok!

Az Atmel Studio 6 segítségével hogyan tudok egy már bootloaderrel felprogramozott ATmega16A-ba szoftvert tenni, USB segítségével? Természetesen USB-RS232 átalakító már van az áramkörben.
Az Atmel JTAGICE szoftverét szeretném beletenni (ami .bin kiterjesztésű, ez megtalálható az "Atmel Studio 6.0\tools\JTAGICE3\" helyen), de nem találom sehol sem a megfelelő leírást, hogyan kell ezt ebben a programban.

A segítséget előre is köszönöm!
A hozzászólás módosítva: Márc 16, 2013
(#) zombee válasza vtnagy hozzászólására (») Márc 16, 2013 / 1
 
Szerintem sehogy.
AVR Studio 4-et kell használnod, Tools->AVR Prog.
(#) TavIR-AVR válasza vtnagy hozzászólására (») Márc 16, 2013 / 1
 
Sehogy. A JTAGICE az csak AVR-Studio 4.x alatt támogatott. A JTAGICE3 bin-je nem jó az ATMEga16-os JTAGICE1-hez.

Csak a Studio 4.x (legutolsó a 4.19 volt) segítségével használható. feltöltés/frissítés a Tools / AVR-Prog segítségével.
A hozzászólás módosítva: Márc 16, 2013
(#) pittosi válasza dannu hozzászólására (») Márc 16, 2013 /
 
Szerintem nem STK500 igen avr studió4 ez kell hozzá
(#) vtnagy válasza TavIR-AVR hozzászólására (») Márc 16, 2013 /
 
Köszönöm a segítséget mindkettőtöknek!

Azóta feltettem az AVR Studio 4.16-ot, az AVR Prog az meg is van, viszont nem tudom feltenni az EBN fájlt. Több bootloadert is próbáltam, de nem segített egyik sem.
A hiba szövege: Address: 0x0000, Expected: 0x940C, Received: 0xFFFF

Az okozhat gondot, hogy ATmega16A van ATmega16 helyett?
Vagy esetleg tudnátok nekem egy működő bootloadert+firmware-t mellékelni JTAGICE1-hez?

Köszönöm!
(#) dB_Thunder hozzászólása Márc 16, 2013 /
 
Küzdök az inkrementális szögadó kód tuningolásával.
Két gondom van hirtelen, az egyik a kijelzés. Hogyan tudnám a számokat a teljesen kijelző jobb sarkába tenni (jobbra zárás ? 0-tól számol 32ezerig. Ékezetes betűk sem ártanának. Vagy ne álmodozzak ezzel a "driverrel"?

A másik: (buf) változót osztanom kellene, egy fix számmal, aminek még nem tudom az értékét.
Ehhez keresnék valami hátulgombolósoknak való leírást.
Köszönöm!
(#) zombee válasza vtnagy hozzászólására (») Márc 17, 2013 /
 
Evertool-t keress. Illetve nézd meg a Lock biteket, ott is simán lehet probléma.
Az "A" variáns nem okozhat ilyen gondot.
A hozzászólás módosítva: Márc 17, 2013
(#) kiborg válasza dB_Thunder hozzászólására (») Márc 17, 2013 /
 
Szia!
Ez ilyen esetben úgy működik, hogy figyelned kell, hogy mi az érték, teszem azt négy karakterig akarsz kiíratni. 9999-1000 között nincs semmi gond. Ha 1000 alá megy az érték (999-100), akkor a kiíratást egy space karakterrel kell kezdeni és utána a tényleges érték, és ha 100 alá megy (99-10) akkor még egy space és érték, és ugyanez 10 alatt is.(ez a nullakioltás) VAGY a másik megoldás, ami nem olyan elegáns, hogy olyan rutint használsz, ami minden számjegyek kiír. A 13-et így fogja megjeleníteni:0013. Nem olyan szép, de egyszerűbb. A választás rajtad áll.
Kiborg
ui: látom sikerült életre kelteni a kijelzőt. Mi volt a hiba?
(#) dB_Thunder válasza kiborg hozzászólására (») Márc 17, 2013 /
 
Kijelző, az jó kérdés....lehet hogy nem fordította bele az összes file-t a fordító( új projektet kezdtem), de a tesztpanelem is szeret kontaktos lenni néha, most az szórakoztat, meg kell igazgatni azután újra jó a kijelzés.
Meg kell valljam nem kívánok ezzel a space-el megtoldogatni a számot ahhoz hogy jó legyen, meg még mindig ott van az ékezetes dolgok. Inkább megküzdenék egy másik lcd driverrel .

De sokkal égetőbb gond az osztás problémája ( maradék kezelés, float..) ! Ehhez nem igazán találtam még semmit amit az én kicsi agyam meg tudna emészteni!
(#) kiborg válasza dB_Thunder hozzászólására (») Márc 17, 2013 /
 
Osztás problémája? Hogy csinálod azt, hogy olyan számmal akarsz osztani, aminek nem tudod az értékét? Ez tudtommal nem igazán lehetséges. Milyen nyelven programozol?
Találd ki azt a fix (vagy változó) értéket és utána mehetünk tovább. ( osztás nálam ASM-ben így működik: osztandó, osztó,index. Kivonom az osztandóból az osztót, és ha osztandó nagyobb mint az osztó, akkor megnövelem az indexet. Ezt addig ismétlem, amíg osztandó>osztó, ekkor indexben megkapod, hogy hányszor volt meg az osztandóban az osztó. CSAK AZ EGÉSZ RÉSZÉT kapod meg, a maradék (ha akarsz vele foglalkozni) akkor az osztandóban áll rendelkezésedre.)
Hardveres osztás nincs a MEGA sorozatban (a többit nem ismerem).
Bár ha 2,4,8,16,32.... akarsz osztani, akkor az a legszerencsésebb, mert az a legkönnyebb Jobbra shiftelni az adott regisztert ahányszor kell és kész is vagy.
Remélem tudtam kicsit segíteni
Kiborg
A hozzászólás módosítva: Márc 17, 2013
(#) miskatli hozzászólása Márc 17, 2013 /
 
Sziasztok!

ATmega16A-s mikrokontrollerrel szeretnék SPI buszon keresztül adatokat írni egy 25LC640 EEPROM-ba. Mindkét adatlap ide vonatkozó részét elolvastam, úgy gondolom, hogy a lábakat jól kötöttem be és a működéssel is tisztában vagyok.

A mikrokontroller adatlapján található inicializáló és transmit függvényeket próbálom használni. A memória adatlapján talált leírásból pedig összeraktam egy read és egy write függvényt. A main függvényben az inicializálás után megpróbálok egy értéket beírni a memóriába, majd kiolvasni. A beíró és a kiolvasó függvény után is tettem egy-egy indikátort (LED felkapcsolás), de már a beírás után se kaptam jelzést, így feltételezem, hogy már odáig se jut el a végrehajtás.

A kódot csatoltam. Üdv,Miskatli
A hozzászólás módosítva: Márc 17, 2013

kod.pdf
    
(#) dB_Thunder válasza kiborg hozzászólására (») Márc 17, 2013 /
 
Nos kérlek.. először is kösz hogy foglalkozol a a gondjaimmal !
Természetesen kicsit később tudni fogom az osztó pontos értékét, csak ahhoz össze kell állni a mechanikának teljesen ! Akkor igyekszem úgy csináltatni a mechanikát, enkóder tárcsát hogy illeszkedjen a "könnyebb" osztáshoz. 16, esetleg 32 impulzus / mm ideális nekem is
C-ben progizok AVR Studio - WinAVR kombó segítségével.
Osztásról mostmár kezd képem lenni, bár egy mintakód még sokat javíthatna, de majd küzdök.

A másik nagy lélegzet egy 3*4 keypad illesztése lesz...
(#) vtnagy válasza zombee hozzászólására (») Márc 17, 2013 /
 
Az Evertool-os volt az első, de az sem akart működni. Lock bit-hez azt írja, hogy 0x2F-re állítsam be (SPM tiltás), viszont az AVRStudio 4.16-nál 0xEF-re teszi az előbbi helyett, de szerintem ez nem gond, mivel ugyanazt programozza be, amit kell. Bővebben: Link

Ha felteszem az Evertool.hex-et, utána az AVRProg nem hajlandó felismerni a panelt, azt írja, hogy No supported board found!, igazából ez az, ami miatt nem tudok semmit sem csinálni.
(#) zsozsoX hozzászólása Márc 17, 2013 /
 
Sziasztok!
Az avr-n használnám az eepromot az irás és olvasás megy egy bizonyos helyre, de hogy tudom azt megnézni mennyi és melyik az utolsó bájt ami írva van. Illetve ha megtelt az eeprom akkor kezdje elöről az írást?
(#) sikolymester válasza zsozsoX hozzászólására (») Márc 18, 2013 /
 
Hát erre bizony írnod kell egy programot. Kicsit olvass vissza, voltak itt különböző stratégiákra ötletek.
(#) vtnagy válasza zsozsoX hozzászólására (») Márc 18, 2013 /
 
Szia!

Próbáld meg azt, hogy egy adott regiszterben, mondjuk az elsőben (vagy az első néhányban, nem tudom, pontosan mekkora az EEPROM mérete) eltárolod, hogy hány bájt lett felhasználva, és ezt felhasználva tudni fogod, hogy hol tartasz, illetve betelt-e. Így igaz, hogy néhány regiszterrel kevesebbed lesz, de egyszerűsödik az ellenőrző része, és szerintem kisebb a hibalehetőség.

Üdv
(#) zombee válasza miskatli hozzászólására (») Márc 18, 2013 /
 
Bocs, nem néztem meg a kódot, de ha az SPDR-be való íráskor nem történik semmi akkor vagy az
SPCR nincs inicializálva(SPE bit), de a leggyakoribb a "/SS" láb kimenetként való beállításának elmaradása.
Tehát: /SS láb kimenet. SPCR-ben SPE bit bekapcs, utána írhatsz. Persze a /CS-t kösd a /SS-re.
(#) dB_Thunder válasza dB_Thunder hozzászólására (») Márc 18, 2013 /
 
Nekem ez a sor is megcsinálja az osztást ATmega8-on:
  1. counter_mm = counter_tmp/4+200; //osztás, maradékot eldobjuk (törtes osztás %) + az offszet hozzáadása


De most kicsit vibrál a kijelző, gyanítom hogy sok processzoridőt eszik az osztás ezen módja, javítsatok ki ha tévedek.
(#) Szasza9668 hozzászólása Márc 19, 2013 /
 
Tiszteletem hölgyek urak!

Az volna a kérdésem hogyan lehetne az 2x16 lcd háttérvilágítását kapcsolgatni?
Milyen külső alkatrész kell hozzá? Ha jól emlékszem akkor az AVR 1-1 lábán 15-20ma a max terhelhetőség de az lcd háttérvilágítása ennél sokkal több.
Az elképzelés szerint:
nyugalmi állapot: alig világít
üzemi állapot: maximum fényerővel világít
Gondoltam én egy tranzisztoros megoldásra bár ennek működését alig ismerem.
Van esetleg kifejezetten erre a megoldásra valamilyen ötlet?

Üdv!
(#) sikolymester válasza Szasza9668 hozzászólására (») Márc 19, 2013 / 1
 
Tranzisztor jó lesz. Ráaadsz egy PWM jelet és szépen lehet a fényerőt szabályozni.
(#) Brian88 válasza sikolymester hozzászólására (») Márc 19, 2013 / 1
 
Előttem szólóhoz csatlakoznék, ez a legegyszerűbb megoldás.
Csatoltam egy rajzot, hogy is nézne ki:
A "D9" az mehet az AVR valamelyik PWM kimenetére

LCD háttérvilágítás
(#) AzIgaziCsaby válasza Szasza9668 hozzászólására (») Márc 19, 2013 / 1
 
Nekem ez a megoldás tökéletesen bevált. A bal oldali potival a kontraszt állítható, a jobb oldali tranzisztor pedig a háttérvilágítást kapcsolja. A 330 Ohmos ellenállás változtatásával a StandBy állapotbeli fényerőt állíthatod.
Az 1K-s ellenállás bármelyik szabad procilábra mehet.

LCD_vil.JPG
    
(#) Szasza9668 hozzászólása Márc 20, 2013 /
 
Köszönöm a sok választ!

Még egy kérdésem lenne jó lehet ez a tranzisztor is?
BC 546 B
Azért kérdem mert ilyen van itthon és nincs kedvem venni másikat.


Üdv!
(#) feri023 hozzászólása Márc 20, 2013 /
 
Sziasztok!
Az itt található akkutolto.c állományt kellene .hex formátumra lefordítani. A "CELL_NUM" értéke 12 legyen.
Köszönöm.
(#) sikolymester válasza feri023 hozzászólására (») Márc 20, 2013 / 1
 
Rendben, mindjárt kiállítom a számlát, Paypal-os, vagy Banki átutalást választ fizetésre?
(#) erdoszoli hozzászólása Márc 20, 2013 /
 
Sziasztok!

Lehet nem ide kell írnom de mivel AVR-t használok talán kapok itt is megoldást.

Sima RS232 kommunikációt szeretnék több panelen megoldani , melyeken MAX232 illesztő és ATMEGA IC van. Szeretném ha a PC soros portjáról érkező adatot az összes panel megkapná adatveszteség nélkül. Alap ötlet az volt hogy a max232 IC nem használt második portjára visszavezetem a bejövő jelet amit tovább tudok "fűzni" a következő panelra.
Lábkiosztás szerint :
Rout1 -> Din2
Din1 -> Rout2
Ezután a Dout2 és Rin2 lábak a másik panelre mennének és így tovább....
Az eddigi eredmény az hogy az adatokat mindegyik panel megkapja , értelmezi , és még végre is hajtja, de ( ami probléma) a PC csak a legelső paneltől kap visszaválaszt. Akkor is ha időben teljesen eltolva érkeznének a különböző panelekről , tehát nem fordulhatna elő adatütközés.
Amikor az első panel programját törlöm és ebből kifolyólag azon a panelen semmi nem történik csak tápot kapnak az IC-k, és persze a max232-n adattovábbitás hajtódik végre akkor újabb PC-s utasítás küldésére a 2. paneltől kap választ a PC.

Remélem nem voltam érthetetlen
Van ötlete valakinek hogy mi lehet a megoldás arra hogy a választ minden panelről megkapja a PC?

Zoli
(#) erdoszoli válasza erdoszoli hozzászólására (») Márc 20, 2013 /
 
Méregettem kicsit, a 2es panelről jövő jel az első panel Rin2 lábán még megjelenik, de már a túloldalon a kontroller felöl már nem...
Létezik hogy a kontroller azt a lábat valahogy magas szinten tartja ?
(#) csabeszq válasza dB_Thunder hozzászólására (») Márc 20, 2013 /
 
Hát, időnként a fordító baromkodik a 2^x osztásnál, időnként meg jól csinálja.

Nehéz megmondani, hogy avr-gcc alatt a var/4 a shiftelést használja-e (var >> 2), vagy az integer osztást.

A shiftelés annyiban jobb, hogy kisebb valószínűséggel produkál hajmeresztő dolgokat, mint az integer osztás.
A hozzászólás módosítva: Márc 20, 2013
(#) icserny válasza erdoszoli hozzászólására (») Márc 20, 2013 /
 
A te problémád megoldására az RD-485/EIA-485 való.
Idézet:
„az első panel Rin2 lábán még megjelenik, de már a túloldalon a kontroller felöl már nem...”
A visszajelzésnél az a gond, hogy a totem-pole kimeneteket nem lehet egyszerűen összekötni. Egy VAGY áramkörrel (illetve itt a fordított logika miatt ÉS kell) fizikailag lehetővé teszi az összekötést, de neked kell gondoskodni arról, hogy egyidejűleg csak egy szövegeljen.
(#) feri023 válasza sikolymester hozzászólására (») Márc 20, 2013 /
 
Szia!
Valóban lemaradt egy mondat: Segítséget szeretnék kérni a következő témában. Sajnos a "hozzászólás szerkesztése" fület nem találtam. Üdv.: Feri
Következő: »»   526 / 840
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem