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
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   769 / 769
(#) viper3D hozzászólása Kedd, 23:18 /
 
Sziasztok!
Szeretném a segítségeteket kérni, három szervo motort szeretnék vezérelni egy kontroller(ATmega8/ATmega328/ATmega16) segítségével. Ehhez szükség lenne a megfelelő PWM jel generálására a 8 bites timer segítségével is. A szervo pozíciója nem fontos hogy pontos legyen(kb a -90 és +40 fokot fogja felvenni).
Megoldható ez?
Szükség lenne esetleg külső órajelre?
Hogy kéne létrehozni az 50Hz-es jelet?
Köszönöm!
(#) pont válasza viper3D hozzászólására (») Sze, 8:34 /
 
Nem tudom milyen nyelvhez ragaszkodsz, de pl a Bascom az minden feladatot elvégez a pozícióállításhoz, egy paranccsal pl. "Servo(1) = 100", de nem mindegyik szervo tud 130 fokot fordulni.
(#) minimodel hozzászólása Sze, 8:47 /
 
Sziasztok! Van egy projektem, ami nyomán elkezdtem ismerkedni és tanulni a C nyelvet. Szeretnék építeni egy teljesen müködö Forgalomkorlátozó táblát, amilyenek az autópályákon vannak.
Ilyent Cél a három jelzéskép egy nyomógombbal történö váltogatása, és a tábla motoros forgatása egyidejüleg. Már a LED-eket és a nyomógombot is tudom programozni. Mindent dokumentálok, egy kis tutoriálként és majd szeretném is közzétenni. Nagyon tetszik a C nyelvü programozás, mindent az Arduino-mon próbálok ki. Természetesen a "valódi" C-t használom és a CodeBlocks-ot. Szóval csak azt szeretném kérdezni, hogy jó irányba megyek-e, ha a jelzésképek közötti váltást megszakításokkal szeretném megoldani? A táblát szervóval gondoltam mozgatni. Szándékosan nem kérek kész programkódot, hiszen magam is így tudok majd minden apró lépést és információt elsajátítani. (mi miért van, hogyan lehet kivitelezni).
(#) minimodel válasza minimodel hozzászólására (») Sze, 9:06 /
 
Még valami eszembe jutott. A jelzésképek közötti váltásra a megszakítások helyett talán a switch, case, break ciklusok is jók lehetnek esetleg?
(#) viper3D válasza pont hozzászólására (») Sze, 10:43 /
 
Köszi a választ!
C-ben programozom AVR studio segítségével és a szervo 180 fokot tud fordulni.
(#) csabeszq válasza minimodel hozzászólására (») Sze, 14:40 /
 
Az Arduino másodpercenként 16 millió műveletet tud elvégezni. A szem másodpercenként 25 változást lát meg. A jó hír, hogy nem kell sietned. Az interrupt elbonyolítja túlságosan a dolgot. Nincs szükséged arra, hogy 10 us-en belül felvillantsd a LED-eket, a switch case tökéletes.

Mindenesetre nekem nem tiszta a feladat. A forgalomkorlátozó tábla tartalmaz leglább 500 LED-et, az Arduino-nak (Atmega328P) meg van 20 lába. A nagyobbaknak 50, de egyszerre nem fogsz tudni 50 LED-et felkapcsolni, mert ahhoz nincs benne elég nafta.

500 LED-et vezérelni nem piskóta, kell oda számítási sebesség és a tudás is. Arról ne is beszéljünk, hogy RGB ledek vannak rajta...

Nem ismerem a feladatot, de lehet akár eszméletlen nehéz is.
A hozzászólás módosítva: Sze, 14:43
(#) benjami válasza csabeszq hozzászólására (») Sze, 15:21 /
 
Szerintem nem a pálya fölötti mozgó fényújságra gondolt.
(#) minimodel válasza csabeszq hozzászólására (») Sze, 21:11 /
 
Elöször is köszönöm a választ. Valójában az elkorlátozó tábla képén látható, hogy ez egy vontatható tábla, alul egy forgatható kerek táblával. Természetesen modellben gondolkodom, az igazit már jó pár cég gyártja Szóval ezen a táblán felül van két erösebb villanófény, a felsö részen pedig a nyíl és az "X" kijelzésére szolgáló narancsosabb színü LED lámpák. Összesen 26 db LED van benne, amik persze nem egyidöben villannak fel. 13 LED a legtöbb, aminek egyszerre kell fellvillannia. 3 jelzéskép között lehet váltogatni: kikerülés balra, sáv teljesen lezárva (X), kikerülés jobbra.

Gondoltam még az egybeágyazott while ciklusokra is, a végén egy break-kel, ami visszatér a legelsö while-ba. Illetve gondoltam arra is, hogy az AVR lehet jobban szereti, ha az egyes jelzésképeket külön-külön nyomógombbal kapcsolgatom, mint, hogy lábat spórolva egy gombbal.
(#) viper3D hozzászólása Sze, 21:25 /
 
Idézet:
„Szeretném a segítségeteket kérni, három szervo motort szeretnék vezérelni egy kontroller(ATmega8/ATmega328/ATmega16) segítségével. Ehhez szükség lenne a megfelelő PWM jel generálására a 8 bites timer segítségével is. A szervo pozíciója nem fontos hogy pontos legyen(kb a -90 és +40 fokot fogja felvenni).”


Esetleg más is tudna segítséget nyújtani ebben?
Köszönöm előre is!
(#) Massawa válasza minimodel hozzászólására (») Sze, 21:30 /
 
Ezt meg lehet csinálni processzor nélkü isl. Legfeljebb egy villogo áramkör kell hozzá és 3-4 eres kábel a kapcsolohoz, ill a táphoz (Feltételezve a nyilakban valamennyi LED egyszerre villan. Ha oda is futofényt akarsz - van olyan is, de nem ebben a kivitelben - akkor egy kicsit bonyolultabb a helyzet.)
(#) minimodel válasza Massawa hozzászólására (») Sze, 21:47 /
 
Igen, a villogót meg lehetne oldani vele, de a szervót már talán nem. Az elektronika a jelzéskép váltásakor a kék KRESZ-táblát is elforgatja. A két nagy felsö lámpa csak nagyon rövidet villan, míg a sárga jelzéskép tovább látszik. Kb. így: Villanás-szünet-szünet-nyílkép-nyílkép-szünet-szünet. Futófény nincs benne, de jó ötlet, majd ha ezt a projektet megoldottam, jó lesz továbblépésnek.
(#) Massawa válasza minimodel hozzászólására (») Sze, 22:13 /
 
Milyen méretben épitenéd?
(#) csatti2 válasza viper3D hozzászólására (») Sze, 23:05 /
 
Gondolom rájöttél, hogy a 16bites időzítővel PWM módban hardveresen meghajthatsz két szervót. A harmadikat pedig kezelheted úgy, hogy megszakítást generálsz amikor a 16bites számlálód túlcsordul (ez történik 20-50Hz-es gyakorisággal attól függően mit eszik meg a szervód). Ebben a megszakításban indítod a harmadik szervód vezérlőjelét és itt állítod be vmelyik 8bites időzítőd (mennyi idő múltán generáljon megszakítást, illetve el is indítod). Amikor a 8bites lejárt, meghívja a saját megszakítását és itt leállítod a vezérlőjelet, ezzel kész is a harmadik szervó szabvány vezérlőjele.
(#) Fizikus válasza viper3D hozzászólására (») 4:44 /
 
Csinalhatsz Timer interrupt vezerelt szoftveres PWM jelet.
Beallitod a Timert, hogy 10us-kent adjon megszakitast. A megszakitasrutinban pedig novelsz egy szamlalot. A legelejen amikor a szamlalo erteke 0, bekapcsolod a labon a jelet. A szamlalo erteketol fuggoen kapcsolod ki a jelet a labon (100 es 200 kozotti ertek) es a szamalalot nullazod ha elerte a 200-et.
(#) killbill válasza Fizikus hozzászólására (») 9:02 /
 
Idézet:
„Beallitod a Timert, hogy 10us-kent adjon megszakitast.”
Nem tudsz ilyen surun megszakitast kerni. 80 orajelenkent? Nagyon necces. Akkor mar egyszerubb lenne a timer-t mindig annyi idore allitani, amekkora az impulzus hossza... Nem lesz pontos, de mukodni fog, mert a servo PWM impulzus 1..2ms hosszu.
(#) minimodel válasza Massawa hozzászólására (») 9:56 /
 
A terv 1:87, az elektronikát pedig egy tehergépkocsi rakfelületére tervezem betenni. De egy nagyobb kivitel, pl 1:24 biztosan nagyon tetszetös lenne az asztalon.
(#) Massawa válasza minimodel hozzászólására (») 10:23 /
 
Azért kérdezem mert az 1:87-be aligha tudod begyömöszölni a szervot, igy azt én két elektromágnessel billenteném. ( esetleg polaritás forditással egy elektromágnes is elég - rele tekercse).
Ha jol számolom 8 lépésben van az az egész. Igy még mindig egyszerübbnek látom a dioda mátrixos megoldást, azaz a sárga LED-ket 3 mátrix áramkörbe kötöd
1. jobb
2. közép
3. Bal

A bal meg a jobb áramkör mozgatná a táblát.
A felsö két villogo külön jelet kapna ( rövid villanás) a többi meg egy 8-s számlálo kimenetéröl kapná a jelet.. a számlálo bemenetét a felsö két villogo adhatná. A tábla mozgását meg egy - egy kondival lehetne szürni, hogy ne billegjen. Azaz egy 555 meg egy oszto kellene ill egy 3 (2) állásu kapcsolo. ( egy 1-0-0-1-1-0-0 bájtot kell körbe futtatni). Ez SmD-ben mind felfér a panelre, igy nem kell semmit az autoba rakni csak néhány vezetéket huzni ( ha a kapcsolot is a panelre teszed, akkor csak a tápot kell odavinni).
A hozzászólás módosítva: 10:24
(#) minimodel válasza Massawa hozzászólására (») 12:01 /
 
Köszönöm szépen, az elgondolás nem rossz. Egyelöre viszont mégis maradnék az AVR mellett, már csak a programozás és a technikák elsajátítása miatt is. Az elektronikát max. az úttest alá be tudom vinni. Ezt a modellt úgy sem fogom tologatni.

Viszont ha jól gondolom a lábakon kell majd alkalmazni diódákat, mert van olyan LED, amelyik több lábról is kapna jelet. Pl. amelyek az X-et alkotják.

Most épp a gomb pergésmentesítésén dolgozom, van rá rengeteg példa a neten. A kondenzátoros módszer nálam nem jött be. (220nF)
(#) Massawa válasza minimodel hozzászólására (») 12:30 /
 
Azért kell a dioda matrix. Az AVR-böl is gyakoraltilag ugyanazokat a jeleket kell kinyerned.
Villogo fent
Bal
Közep
Jobb
Semmi (kikapcsolva)

Azaz 4 kimenetre redukálod az egészet és néhány diodára. A nyilakat is ugy alakithatodod ki, hogy egy részük amugy is csak egy irányhoz tartozik (> jelek) azaz azt 1 LEDként kezelheteted. A többihez meg kell a dioda mátrix.
A pergésmentesithez sokkal egyszerübb a SW-s megoldás helyet sem foglal.
(#) kiborg válasza Massawa hozzászólására (») 13:30 /
 
Azért arról ne feledkezzen meg, hogy ha egy port lábra több ledet fog rakni, akkor illik majd rakni egy kapcsoló tranzisztort,mert a kimenet max 20-30mA-t tud.
(#) minimodel válasza Massawa hozzászólására (») 13:44 /
 
Igen, pontosan erre gondoltam én is. Majd a LED-ekkel kell ügyesen kalkulálni, hogy ne lépjem túl a lábankénti 35mA-t és az össz 180mA-t (biztonsággal számolva). A cikkek között található AVR jelzölámpás példán megvizsgálom majd az abban alkalmazott pergésmentesítést, hogy mennyire válik be.
A hozzászólás módosítva: 13:46
(#) kiborg válasza minimodel hozzászólására (») 14:04 /
 
Ne trükközz, ahány láb, annyi tranzisztor és bázisellenállás.Ne ez okozzon korlátot.Helyben és pénzben is minimális a szükséglet.
(#) Massawa válasza kiborg hozzászólására (») 14:09 /
 
Akkora méretben aligha fog majd 20 mA-s LED-eket használni
(#) Massawa válasza kiborg hozzászólására (») 14:10 /
 
Elment az eszed? 4 helyett 27 kimenet, 27 tranyo 27 ellenállás ???????
Ejnye ejnye...
(#) Massawa válasza minimodel hozzászólására (») 14:12 /
 
A legujabb LED-k 12V-rol 5k6 ellenállással is vakitanak
(#) Kovidivi válasza Massawa hozzászólására (») 14:13 /
 
Úgy is nézheted, hogy mit könnyebb leprogramozni egy kezdőnek. Lehet shift regiszterrel könnyebb lenne, mint egy LED-mátrixot összehozni. A legegyszerűbb mégis az lenne, ha lenne 27 kimenete. Shift regiszterhez is kell 27 ellenállás, a LED-mátrixhoz viszont tudás kell. Az egyiket megveszed a boltban, a másikat a kérdezőnek el kell sajátítania!
(#) Massawa válasza Kovidivi hozzászólására (») 14:16 /
 
Emberek, mire megprogramozol 27 portot 4 helyett ahol amugy is (fejben) ki kell találni a matrixot annyi idö alatt 10-t össze lehet forrasztani és kitesztelni. De ezt hagyjuk inkább a kollégára
(#) Kovidivi válasza Massawa hozzászólására (») 14:19 /
 
Neked lehet, de nem egy totál kezdőnek.
A hozzászólás módosítva: 14:20
(#) Massawa válasza Kovidivi hozzászólására (») 14:24 /
 
Én sem vagyik nagy programozo, éppen ezért a mátrix sokkal célravezetöbb, hiszen csak a 4 kimenetröl kell gondoskodni és nem 27-röl meg egy marha nagy procirol (3 portos). Itt meg a méretek is fontosak, azaz a hely.
A mátrixot szépen összeforrasztja kiprobálja és ha minden jo lehet programozni.
Következő: »»   769 / 769
Bejelentkezés

Belépés

Hirdetés
Frissek
2017. Márc, 30. Csü
14:39:40
Jelenleg 411 fő olvassa az oldalt
Online tagok:
Lapoda.hu     XDT.hu     HEStore.hu