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   675 / 837
(#) zombee válasza Massawa hozzászólására (») Jún 23, 2015 /
 
Ha PCINT-el használod akkor nem maga a megszakítás beállítása nem befolyásolja a működést.
Arra azért figyelj, hogy ha programból történik a port átbillentése, arra is megszakítással reagál.
(#) Massawa válasza zombee hozzászólására (») Jún 23, 2015 /
 
Ezt nem értem, akkor a port csak akkor billen, ha az interrupt billenti, vagy akkor amikor a program billenti. (3 másik portot billentek, ugyanabbol a rutinbol a másik 3 gond nélkül megy - PD4,3,2), csak a PD5 nem).
(#) zombee válasza Massawa hozzászólására (») Jún 23, 2015 /
 
Az interruptban azt csinálsz amit akarsz.
Egy komolyabb hibakeresés előtt még megnézném hogy melyik láb hova megy, mert az OC1A az
elég messze van a PD5-től, még a port is más. Nevezetesen PD5=OC0B és PB1=OC1A.
Véletlenül nem ATMega32 akart lenni? Ott tényleg PD5=OC1A...

Mielőtt hülyeséget írok, inkább megkérdezem hogy milyen megszakításról beszélünk:
PCINT vagy timer?
(#) Massawa válasza zombee hozzászólására (») Jún 24, 2015 /
 
Bocs, én kevertelek meg, most a 644-s procin dolgoztam ( két hasonlo programot irok a 644-re meg a 328-ra), és azon bizony az ocr1a=pd5)
Közben már egy kedves barátom megtalálta a hibát. Nem tudni miért rossz kodot irtam a TCCR3A-ba ( igy jár az ember, ha sok alprogrambol rakja össze az ujat - elnéztem), és az billentette vissza a PD5-s portot.
(#) freechat hozzászólása Jún 24, 2015 /
 
Találtam egy ilyen motort, ha jól sejtem ez egy bipoláris léptető motor.
Ezt szeretném meghajtani egy L293-as IC-vel és AVR-el.
A logikáját értem csak a vezetékeket nem tudom hogyan kellene összekötni és, hogy mekkora áramot vehet fel.
Elkezdtem méregetni az ellenállást van ami között 600K és van ahol 180.
(#) Massawa válasza freechat hozzászólására (») Jún 24, 2015 / 1
 
2-2 drot között kell egyforma ellenállást mérned. Azok a drotok lesznek a 2 tekercs kimenetei. ( az esetedben 2x180 Ohmot). Ennyi elég amit tudnod kell. A két tekercsen kell felváltva átvezetni némi áramot és változtatni az irányát ( azaz 4 lépés a ciklus).
Ha majd idáig eljutsz akkor egy labortáppal növelheted a motorra juto feszültséget és figyeld a motor reakcioját ( forgását és melegedését). Szerintem kb 24V-s motor lehet, de ezt meglátod.

Van egy léptetömotoros topik, ott rengeteg olvasnivalot találsz a motorok müködéséröl.
(#) freechat válasza Massawa hozzászólására (») Jún 24, 2015 /
 
Köszönöm, akkor neki is állok még jó, hogy csak 4 vezeték van .

Van még egy 5 vezetékes unipoláris motorom is. Ott minden rendben van egy ULN2003-as IC-vel fogom vezérelni csak mivel nem akarom tönkre vágni már az első próbálkozásnál szeretném úgymond levédeni.
Olvastam, hogy egy mezei ellenállással meg lehet oldani, de az értékének meghatározásáig sajnos nem jutottam el
A nyomaték nem lényeges mivel csak teszt lesz utána PWM-el fogom megcsinálni.
Ez lenne a motor:
Unipoláris léptető motor

Raspberry PI-vel fogom meghajtani és a tápot is onnan kapja.
(#) Massawa válasza freechat hozzászólására (») Jún 24, 2015 /
 
Szinte minden meghajtoban külön táp bemenet van. Ha itt 5V-l kezdesz semmi rossz nem történhet. Esetleg az unipoláris motor esetén sorbaköthetsz egy 100-200mA-s izzot, az megvédi a motort és látod is, hogy mikor folyik az áram. Ezek a motorok nem igen mennek tönkre, illetve azt észreveszed, ha nagyon melegszik.
Az viszont nem jo ötlet, ha ugyanarrol a táprol megy a motor, mint a proci, mert a motornak komoly áramfelvétele is lehet...
(#) Massawa válasza freechat hozzászólására (») Jún 24, 2015 /
 
Most látom, hogy te is ugyanazokat a motorokat használod mint én. Ezek az unipoláris motorok kb 5V-ra mennek és eddig nagyon beváltak. Már fél tucatot beépitettem mindenféle szerkezetbe Most is két uj projekten dolgozom 4 ilyen motorral.
( amugy ez az elsö hely, ahol helyesen irják a lépésszámot, amikor én vettem öket a bolt irásban is adta, hogy 64 lépés tud/ fordulat - s mindenki ezt a marhaságot másolta mindenhova....). Nekem meg mindenütt más lépésszám jött ki......
(#) freechat válasza Massawa hozzászólására (») Jún 24, 2015 /
 
Sikerült beüzemelni és tényleg nagyon jó. Feltúrtam a műhelyt és csak 1 db ULN2003-ast találtam, de van 2 db ULN2004-esem. Ha jól láttam az nem igazán megfelelő erre a célra

Most még átnézem a dolgokat, mert jó lenne, ha 1 db IC-vel kettő motort tudnék vezérelni, de ahogy elnéztem a pin-ek elfogytak
(#) Massawa válasza freechat hozzászólására (») Jún 24, 2015 /
 
Érdekes én a motorkat mind az ULN interfaceszel kaptam, rajta 4 LED jelzi az állapotokat.
(#) freechat válasza Massawa hozzászólására (») Jún 24, 2015 /
 
"Jóvanna" gyakorlatlan vagyok egyelőre egy itthoni cégtől vettem a motort 1600 Ft-ért, a vezérlő meg 1690 lett volna ez így rablás úgyhogy inkább vettem külön IC-t hozzá, vagyis volt itthon.
(#) Massawa válasza freechat hozzászólására (») Jún 24, 2015 /
 
Csak mondtam, mert már sok helyen, sok árban látni ilyen motorokat. Egyesek az interfaceszel adják mások meg nem.
(#) Massawa hozzászólása Jún 25, 2015 /
 
Sikerült kiizzadnom végre a motoros vezérlömet ( egy jo barátom hathatos segitségével). A vezérlö egy 4 soros display meg 6 nyomogombot ill az ATmega644 procit jelent. Az LCD-n beállithatom mindkét motorra az idöt, a lépések számát, irányt meg az ismétléseket. A berendezésnek 3 modusa van:
1. Manual - amikor a gombokkal mozgathatom a motorokat
2. Program - programozhatom a fenti jellemzöket ( 0-59,59 perc, 0-200 lépés, irány és 0-200 ismétlés
3. Automatikus - amikor lefut a beállitott program
Még dobozolnom kell ( részben már megvan).

Igy néznek ki a jelek:
( majdnem 2 éves munka volt - kisebb nagyobb megszakitásokkal - de rengeteget tanultam.)
A hozzászólás módosítva: Jún 25, 2015

image.jpg
    
(#) Max26 hozzászólása Jún 26, 2015 /
 
Sziasztok!

Mitől fagyhat egy AVR program?(Már elnézést a kérdésért, de már napok óta próbálok rájönni hol lehet a hiba a programomban. A szerző szerint ez egy működő program. Amit hozzáadtam a saját LCD.c és LCD.h fájljaim.)
Hardver: Atmega32, 3.6864MHz, BMP180 nyomásérzékelő.
Szoftver: UART-on kiírja a hőmérséklet, légnyomás, tengerszint feletti magasság értékeket.
LCD-n kiírja a hőmérsékletet 1/10-ed pontossággal.

Pl: Működés közben resetre nem indul újra, vagy ha lefagyás utáni resetre sem indul újra.

Csatoltam a projektemet.

Talán a FUSE bitek táján kellene keresnem a hibát?
A hozzászólás módosítva: Jún 26, 2015
(#) gabi20 válasza Max26 hozzászólására (») Jún 26, 2015 /
 
I2C porton rendesen be vannak kötögetve a felhúzóellenállások? A kapcsolási rajzban miért ATmega8 szerepel?
(#) Kovidivi válasza Max26 hozzászólására (») Jún 26, 2015 /
 
Lefagyni az AVR nem fog. Inkább a program áll meg valahol. Pl: while ( amig valami feltetel), és ez a feltétel sosem következik be, pl. I2C kommunikációs hiba miatt. Ezeket a hibákat le kell kezelni, megadni egy időt, ameddig maximum várhat a feltételre, ha túllépte ezt az időt, akkor megszakítani, vagy újraindítani azt a részt. Ez véleményem szerint programozási hiba lesz.
(#) Max26 válasza gabi20 hozzászólására (») Jún 26, 2015 1 /
 
Az eredeti projekt Atmega8-ra készült. Csatoltam a kapcsolást, amit használok.

kapcs.jpg
    
(#) gabi20 válasza Max26 hozzászólására (») Jún 26, 2015 /
 
A kapcsolásnak jónak kell lennie, esetleg még megmérném a tápfeszültséget hogy rendben-e van az 5V. Szerintem is valami szoftveres hiba lesz. Meg kell tudnod, hogy hol áll le a program. Hozzákötsz a processzorhoz egy LEDet, amit aztán szoftverből fogsz kapcsolgatni. Például valamelyik while ciklus előtt megpróbálod bekapcsolni a LEDet, ha ott még bekapcsol, de a ciklus után már nem akkor tudod hogy ott valami feltétel nem teljesül.
(#) killbill válasza Max26 hozzászólására (») Jún 26, 2015 / 1
 
Ez igy nem lesz jo, mert tonkreteheti a szenzort. Ugyanis az I2C labain sem kaphat nagyobb feszultseget, mint a tapja. Marpedig kap, mert a felhuzo ellenallasok 5V-ra vannak kotve. Szintilleszto kellene a szenzor es a mikrokontroller koze. Pl. 1-1 FET es tovabbi ket ellenallas.
Azon felul a 6 dioda is kifogasolhato megoldas.
A hozzászólás módosítva: Jún 26, 2015
(#) zombee válasza Max26 hozzászólására (») Jún 26, 2015 /
 
Csatlakozom az előttem szólóhoz, a diódasor és az 5V-ra felhúzás nem egészséges! Ezen felül ott a két 47kOhm felhúzó ellenállás, ami túl nagy! Ha mástól nem, ettől biztosan fagyhat a cucc! Az I2C specifikáció 1.8k-10k közötti értéket ad meg. Én 2.2kOhm-ot javasolnék, és egy-egy 3.3V-os zener diódát az SCL/SDA lábak és a föld közé. A 3.3V-ot az AVR még bőven logikai magasnak fogja érzékelni, és nem is túl bonyolult. A barométernek meg tegyél be egy tisztességes tápot, pl. LT1117-3.3 vagy ha nincs más akkor a "klasszikus" zener+ellenállás kombó...
(#) killbill válasza zombee hozzászólására (») Jún 27, 2015 /
 
Idézet:
„Ezen felül ott a két 47kOhm felhúzó ellenállás, ami túl nagy!”
A rajzon 4.7k van, csak rosszul latszik. Viszont a zener teljesen felesleges. Egyszeruen a 3.3V oldalra kell tenni a ket felhuzo ellenallast. Es igy valoszinu, hogy tenyleg magas szintnek veszi az AVR. Ugyanis 5V tapnal 3V a magas szint kuszob (0.6 x Vdd), es egy 3.3V-os zener 1mA mellett nem biztos, hogy felmegy 3V-ig.
A hozzászólás módosítva: Jún 27, 2015
(#) csatti2 válasza zombee hozzászólására (») Jún 27, 2015 /
 
Zener nem igazán játszik. A kis feszültségű verziók karakterisztikája borzalmas. Az illesztést vagy erre kitalált kétirányú busz illesztő IC-vel, vagy mivel itt csak két vezeték van, egyszerűen csak két szignál mosfet-el lehet elegánsan megoldani.
(#) zombee válasza csatti2 hozzászólására (») Jún 27, 2015 /
 
Ahhoz képest az AVR-Doper elég stabilan működik a zeneres megoldással, I2C esetén se lehet gond. A felhúzót mindig az I2C master tápjára kell tenni. Eddig rendes áramkörben még nem is láttam hogy a 3.3V tápra tennék, az mégiscsak független (egy kicsit) a master tápjától(késik hozzá képest kicsit) és akkor fagyhat. Ha egy panelen van mindkét cucc, fölösleges még +1 IC-vel (+1 hibalehetőség) babrálni, jó oda a zener (profi vezérlőkártyákon ilyet láttam), sznoboknak meg a FET-es megoldás. De ha már illesztő IC kell akkor ADUM1280, az galvanikusan is leválasztja. Ha jó karakterisztikájú zener kell akkor TL431...
A hozzászólás módosítva: Jún 27, 2015
(#) csatti2 válasza zombee hozzászólására (») Jún 27, 2015 / 2
 
A felhúzó ellenállás azért kell a 3V3 oldalra, mert a két mosfet teljesen lezárja azt az 5V-tól. A mosfet-ek csak akkor engednek át, amikor a földre kell húzni a másik ágat. A sznobizmusról annyit, hogy a két mosfet együtt nem kerül 40Ft-ba (de két 8Ft-os mosfettel is megoldható, ha a 40Ft sok), viszont a szabványnak megfelelő szép jelet kapsz mindkét oldalon... A TL431 valóban használható a 3V3 stabil előállítására, de nem optimális. A működéséhez úgy kell méretezni az áramkört, hogy legalább 1mA mindig átfolyjon rajta (főleg elemes alkalmazásoknál pazarlás), ráadásul hasonló áron (picit olcsóbban: 50Ft) kapható 100mA-s lineáris regulátor is, ami sokkal praktikusabb erre a feladatra (ráadásul a szenzor is meghajtható róla).
A kis feszültségű zener-eken viszonylag nagy áramot kell átkergetni ahhoz, hogy megfelelő sebességgel működjenek, illetve a feszültség is jó legyen (ha összehasonlítod mondjuk egy 12V-os zener-el, láthatod mennyivel csúnyább a letörési feszültség karakterisztikája). Mondjuk a I2C általában nem olyan gyors, de nagy sebességű SPI-nál már komoly meglepetések érnének (2+MHz).
(#) zombee válasza csatti2 hozzászólására (») Jún 27, 2015 /
 
Egyet elnéztem: profi áramkörökben nem sz*roznak holmi illesztgetéssel, 3.3V-on megy a PIC/AVR is, kimenetillesztésre meg kizárólag optós megoldást alkalmaznak, sznob körökben CAN busszal...
A hozzászólás módosítva: Jún 27, 2015
(#) csatti2 válasza zombee hozzászólására (») Jún 27, 2015 /
 
Ez azért nem ilyen egyszerű. Sok olyan szabvány van, ami magasabb feszültséget ír elő a kommunikációra (pl. 12V) mint amit a vezérlő használ, legyen az mikrokontroller vagy mikroprocesszor. Természetesen az az ideális ha nem kell a jelillesztéssel foglalkozni, de nem mindig megoldható (ha valamit 1 millió példányban gyártanak, ott már biztos megéri beszerezni az összes alkatrészt ugyanarra feszültségre méretezve, ha viszont csak 10db-ot, akkor már lehet nem optimális/kivitelezhető).
A CAN busz már régóta velünk van. Még az egyetemen kellett róla egy prezentációt összeállítanom, már akkor sem voltak képes megegyezni egy közös protokollban egymással (az alsó két rétegen túl). A helyzet azóta sem javult. Iparban mostanában inkább az ethernet van elterjedőben (persze mindenféle kiegészítéssel, hogy az alapvető gondokat kiküszöböljék. pl. PROFINET), sok előnye van a CAN buszhoz képest.
(#) killbill válasza zombee hozzászólására (») Jún 28, 2015 /
 
Idézet:
„A felhúzót mindig az I2C master tápjára kell tenni.”
Ezt honnan veszed? Es kulonben is, mit csinalsz egy multimaster bus eseten?
Idézet:
„Eddig rendes áramkörben még nem is láttam hogy a 3.3V tápra tennék, az mégiscsak független (egy kicsit) a master tápjától(késik hozzá képest kicsit) és akkor fagyhat.”
Namarmost, amig a tapok nem alltak be stabilan, addig a mikrokontrollernek RESET-ben kellene lennie. De ha nem is igy van, a sw-nek meg kell varnia, hogy minden tap stabil legyen, es majd akkor inicializalja az I2C-t.
Idézet:
„sznoboknak meg a FET-es megoldás.”
Ebben mi a sznobsag? Az, hogy rendesen van megcsinalva, nincs kiteve a tapfesz es zener szorasoknak az aramkor, nem lassitja a jelfelfutast a zener kapacitasa?
Idézet:
„De ha már illesztő IC kell akkor ADUM1280”
Es azzal hogyan illesztesz egy I2C buszt? Erre tenyleg kivancsi vagyok.
(#) zombee válasza killbill hozzászólására (») Jún 28, 2015 / 1
 
ADuM1250 akart lenni, elnézést.
(#) Max26 hozzászólása Jún 29, 2015 /
 
Hogyan módosíthatnám DDRx, PORTx, PINx-et egy betű átírásával? Próbáltam ezt, de erre hibát ír ki:

  1. #define x A
  2. #define SOR_DDR     DDR(x)


Ezzel mi lehet a kifogása a fordítónak? :

  1. while((valtozo!=1) || (valtozo!=5))
  2. {
  3. ...
  4. }


Ha csak ezt alkalmazom, akkor lefordítja.:

  1. while(valtozo!=1)
  2. {
  3. ...
  4. }
Következő: »»   675 / 837
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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