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   766 / 837
(#) vargham válasza zombee hozzászólására (») Márc 25, 2017 /
 
"nem lehet keresztezni az átkötéseket, mert a galván átvezethet a keresztezésnél."
Vagy zománcszigetelt huzalt használok, vagy leragasztom a furatot hőálló ragasztószalaggal, vagy lakkozom. Egészen jól lehet több rétegben építkezni.

"A lötstop miatt nem egyszerű vezeték nélkül két szomszédos PAD-et összelöttyinteni."
Annyira nem is nehéz. Több lépcsőben, és gyorsan kell haladni, különben kijön a túloldalon.
(#) zombee hozzászólása Márc 26, 2017 /
 
Sziasztok!
SPI-vel (pontosabban Slave oldalról) csinált már valaki több-bájtos átvitelt? Értem ezt úgy, hogy a Slave 2 vagy több bájtot ad vissza, míg a /SS vezeték lehúzott állapotban van. Egy csomó, SPI-t használó periféria(Microchip, Analog Devices, Texas, Linear) megköveteli ezt a módot. De mintha AVR-ből eleve kihagyták volna ezt a lehetőséget.
(#) kapu48 válasza zombee hozzászólására (») Márc 26, 2017 /
 
Pedig aki keres az talál!
avr spi slave transmit pdf
(#) csabeszq válasza zombee hozzászólására (») Márc 27, 2017 /
 
Simán megy vele, valamit elronthattál a kódodban. Meg kell várni, míg az első bájt kimegy, utána küldd a másodikat. Vannak flag-ek, hogy a puffer üres-e.
A hozzászólás módosítva: Márc 27, 2017
(#) kiborg hozzászólása Márc 27, 2017 /
 
Sziasztok!

Csatolt kép szerinti beállítás Mega32-nél. Ezt SPI-vel beállítottam.
Ezután JTAG-al programoznám,de nem tudok hozzá csatlakozni.
Miért lehet ez?
A CKOPT micsoda?

Kiborg
(#) zombee válasza csabeszq hozzászólására (») Márc 27, 2017 /
 
Ha esetleg lényeges: ATMega8 a Slave, és SPI-t használok, nem USART-ot. Engem ez a rész zavar össze, ami alapján egyetlen SPI ciklusban (/SS lehúzott állapotban) csak egyetlen bájtot tud a Slave elküldeni, újabb bájt küldéséhez újabb SPI ciklus kell (/SS le, 8 bájtot shiftel).

Idézet:
„When configured as a Slave (...), software may update the contents of the SPI Data
Register, SPDR, but the data will not be shifted out by incoming clock pulses on the SCK pin
until the SS pin is driven low.”
A hozzászólás módosítva: Márc 27, 2017
(#) csabeszq válasza zombee hozzászólására (») Márc 28, 2017 /
 
A szöveg annyit mond, hogy nem fogad az Atmega semmit, amíg az SS pin-t le nem húzod.

Az SPI lényege, hogy akkor kommunikálsz, mikor az SS alacsonyan van. Ha nincs alacsonyan az SS, akkor figyelmen kívül hagyod a beérkező biteket. Értelemszerűen Slave esetén az CS-t az SS pinre kell kötni.

SS alacsony -> bájt 1 -> bájt2 -> SS magas

Általában az SS magasraállítása reseteli az SPI logikát. Ezért nem biztos, hogy az

SS alacsony -> bájt 1 -> SS magas -> SS alacsony -> bájt 2 -> SS magas

menni fog. Van eszköz, amelyik lenyeli, de meglepődhetsz ha így küldesz bájtokat.

Mesternél az SS/CS esetén azért várd meg, amíg kiküldődnek a bitek. Átvitel közben ne húzd magasra az SS-t.
A hozzászólás módosítva: Márc 28, 2017
(#) viper3D hozzászólása Márc 28, 2017 /
 
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 (») Márc 29, 2017 /
 
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 Márc 29, 2017 /
 
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 (») Márc 29, 2017 /
 
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 (») Márc 29, 2017 /
 
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 (») Márc 29, 2017 /
 
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: Márc 29, 2017
(#) benjami válasza csabeszq hozzászólására (») Márc 29, 2017 /
 
Szerintem nem a pálya fölötti mozgó fényújságra gondolt.
(#) minimodel válasza csabeszq hozzászólására (») Márc 29, 2017 /
 
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 Márc 29, 2017 /
 
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 (») Márc 29, 2017 /
 
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 (») Márc 29, 2017 /
 
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 (») Márc 29, 2017 /
 
Milyen méretben épitenéd?
(#) csatti2 válasza viper3D hozzászólására (») Márc 29, 2017 /
 
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 (») Márc 30, 2017 /
 
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 (») Márc 30, 2017 /
 
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 (») Márc 30, 2017 /
 
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 (») Márc 30, 2017 /
 
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: Márc 30, 2017
(#) minimodel válasza Massawa hozzászólására (») Márc 30, 2017 /
 
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 (») Márc 30, 2017 /
 
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 (») Márc 30, 2017 /
 
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 (») Márc 30, 2017 /
 
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: Márc 30, 2017
(#) kiborg válasza minimodel hozzászólására (») Márc 30, 2017 /
 
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 (») Márc 30, 2017 /
 
Akkora méretben aligha fog majd 20 mA-s LED-eket használni
Következő: »»   766 / 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