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   135 / 840
(#) gtk válasza gtk hozzászólására (») Júl 5, 2009 /
 
Alap FUSE beallitasokkal nem 9.6MHz a Tiny13 orajele, hanem 9.6MHz/8 ! Ez volt a gond.

Mumtaz: Lehet hogy nalad is ez a gond. Vagy allitsd at a FUSE biteknel a CKDIV8 -at unprogrammed-re, vagy a programban ird at 1.2MHz -re.
(#) Mumtaz válasza gtk hozzászólására (») Júl 5, 2009 /
 
Azt hiszem, hogy a CKDIV8 állításával már próbálkoztam.
Egyébként szerény tudásommal megpróbáltam átfutni a kódot és egy hibát már felfedeztem benne, amit feltehetőleg a kód írója vétett. Ez egy hibás érték volt, ami a relé idejére vonatkozott. Ez adja meg, hogy a relé meddig maradjon behúzva.

Kikövetkeztettem, hogy a szaki levezette, hogy milyen értékek milyen időket jelölnek az adott (9,6MHz) frekvencián.
Láttam, hogy a 40-es érték jelent 1s-ot:

Idézet:
Const Minimum_interval = 40 ' 1sec


Viszont ezzel szöges ellentétben áll a következő sor, amiről helyesen azt feltételeztem, hogy a relé idejét adja meg:

Idézet:
Const Wiper_threshold = 500 ' 500ms (for waitms statement)


Ahogy a korábbiakat néztem, az 500-as érték nem jelenthet 500ms-ot, hanem 12,5s-ot. Tehát elírás, mivel az értéket 80-ra átírva a relé pontosan 2mp-ig marad behúzott állapotban.

Egyébként az időzítés nem "mentség" arra, hogy minden második (talán harmadik) kapcsolásra a relé nem csinál semmit és az egész cucc nem hajlandó megtanulni új időzítéseket. Mindig egész pontosan 34mp-enként húz be a relé. Tehát itt biztosan van valami a kóddal, de ez nekem kínai.

Ezért kértem, hogy valaki nálam járatosabb fussa át a kódot, hátha talál benne hibát, esetleg másként módosítaná a kódot, hogy rendesen működjön.

Ennek a kapcsolásnak a másik funkciója az lenne, hogy ablakmosó használatakor az ablaktörlő is elindul és töröl néhányat. Bár erre a funkcióra nekem nincs szükségem, de azért kipróbáltam és ez a funkció működik rendesen.
(#) gtk válasza Mumtaz hozzászólására (») Júl 5, 2009 /
 
Majd Valaki, aki erti a bascomot, en nem.
(#) Ricsi89 válasza gtk hozzászólására (») Júl 5, 2009 /
 
Helló!
Nem okoskodás végett, mivel keveset értek hozzá, de ennek a cikknek a programját esetleg át lehetne írni tiny45-re vagy talán 13-ra, akkor megoldódna a dolog. Mivel nem igazán értek hozzá, csak találgatok, hogy a fő rész az jó lenne, csak az elejét kellene átírni avr-re.
(#) gtk válasza Ricsi89 hozzászólására (») Júl 5, 2009 /
 
Szia. Nem is kell atirni, meg kell csinalni ugy ahogy van.
(#) Ricsi89 válasza gtk hozzászólására (») Júl 5, 2009 /
 
Ja, csak aki avr-re van berendezkedve, az nem fog égetőt csinálni pic-hez.
(#) zombee válasza Ricsi89 hozzászólására (») Júl 5, 2009 /
 
Ő úgy értette, hogy a C nyelvű kódot felhasználhatod az AVR - edhez, max a portokat és az időzítőt(ha van) állítod be neki megfelelően.

Ha ez nem megy, akkor a PIC-est javaslom, még ha nagy AVR-es fan vagyok akkor is.

Amúgy én megírnám a szoftvert egymagam a PIC-es változat mintájára, és az legalább saját volna.
Így tettem az induktivitásmérővel is. A hardver részt meghagytam(kivéve a PIC-et), a programot meg én írtam meg rá, LCD driverrel együtt...
(#) Mumtaz válasza zombee hozzászólására (») Júl 5, 2009 /
 
Amit én belinkeltem, az egyszerűbb és elvileg ugyanazt tudná. Viszont ebben a PIC változatban ott van a motor végállás kapcsolója is, amit plusz be kéne kötni és szerintem nincs is semmi szükség rá, ha egy minimum időköz be van állítva és a relé is max 2 mp-ig marad behúzva, mivel ennyi minden ablaktörlőnek elég hosszú, de nem annyira, hogy ne kapcsoljon le még azelőtt, hogy a motor elérjen a végállásig. Nem kell azt figyelni.
(#) zombee válasza Mumtaz hozzászólására (») Júl 6, 2009 /
 
Én meg igazából azt nem értem, minek ehhez kontroller?
Ha egyszer ott a végálláskapcsoló, akkor legyen olyan kapcsolás hogy kikapcsolt állapotban addig megy az ablaktörlő míg a végálláskapcsolót el nem éri és le nem kapcsolja az egészet.

Amúgy meg téged nem értelek, hogy érted hogy "a PIC változatban ott van a motor végállás kapcsolója is, amit plusz be kéne kötni". Az AVR-es változatba talán nem kell? Végálláskapcsoló nélkül hogy a jó élet rákjába oldanád meg? Beleépítesz egy dzsint és ő megmondja mikor kell lekapcsolni?

Esetleg kontroller kellhet a szakaszos működtetéshez, pl. 5 másodpercenként töröl egyet szemerkélő esőnél, de ahhoz is van egyszerűbb és olcsóbb megoldás: astabil multivibrátor. Ha be van építve a végálláskapcsoló, akkor ez utóbbi nem lehet gond...
(#) zombee hozzászólása Júl 6, 2009 /
 
A sok okoskodás után most én kérdezek:
ATMEGA16-on szeretnék külső eseményt számlálni a 16 bites TIMER1 számlálóval.

Mivel 16 bites, a két legalsó helyiértéket a TCNT1L és TCNT1H regiszterekből olvashatom ki, az ezek feletti helyiértéket egy interrupt(a túlcsordulás-interrupt) növeli mindig 1-el.

Annak már utánanéztem, hogy a T1 portbenemetet(PB1) lefutó vagy felfutó élére kell ráhangolni. Ezt a TCCR1B regiszter 2:0 bitjein lehet beállítani, és a TIMSK-n lehet a megfelelő interruptot engedélyezni.

Kérdéseim: hogy kell a TCCR1A-t és B-t felprogramozni, hogy egyszerűen csak számláljon T1 felfutó élére 65535-ig, majd egy interrupt kíséretében lenullázódjon?

Amúgy mi a különbség az Output Compare Register A, B, és az Input Capture Register között?
(#) Mumtaz válasza zombee hozzászólására (») Júl 6, 2009 /
 
Mikrokontroller nélkül hogyan oldanád meg, hogy taníthaató legyen? Ennek a cuccnak az a lényege, hogy szabadon beállítható legyen, hogy milyen időközönként töröljenek az ablaktörlők (szakaszos üzemmód). Persze lehetne 555-el is, de azzal is csak találomra lehet beállítani a megfelelő időközöket. A mikrokontrolleres megoldásnak viszont az a lényege, hogy egyszer egy pillanatra felkapcsolod a kapcsolót, a számláló elindul, ugyanakkor töröl egyet. Mikor úgy érzed, hogy elegendő víz összegyűlt, akkor felkapcsolod szakaszos állásba és az előző kapcsolás óta eltelt időt állítja be és innentől ilyen időközönként töröl egyet.

A végálláskapcsolót a mikrokontrollernek nem kell figyelni. A szakaszos üzemmód reléje sem figyeli, hanem mondjuk 10 másodpercenként meghúz 1-2 másodpercre. Az ablaktörlő pedig alapból máshonnan is kap szuflát, amivel addig működik, míg el nem ér az alapállapotba.
(#) zombee válasza Mumtaz hozzászólására (») Júl 6, 2009 /
 
Ezt az 555IC - t de rohadtúl útálom. Mikor helyette két tranzisztor is megteszi. Persze kinek a pap, kinek a papné...

Az időköz állítását én potival oldanám meg(csak legyen hová becsavarni), számomra nem tűnik túl nagy kényelmi extrának az előbb említett funkció, bár hasznos is lehet.
(#) zaik válasza zombee hozzászólására (») Júl 6, 2009 /
 
szia,
az Output Compare Register a számlálóval (TCNTn reg) való összekomparálásra hivatott. Ez az, amit -megfelelő beállítások (lsd adatlap) mellett- összehasonlítunk a timer aktuális értékével és akár (dedikált) portbiten logikai szint változás írható elő. Ezzel oldható meg a CTC, PWM.. pl.
Ezzel szemben, illetve mindezek mellett az Input Capture Register a külső események ( lábon érkező szntváltozás pl) regisztrálására hivatott regiszter. Amennyiben "esemény" van a lábon, úgy a futó timer regiszter (TCNTn) értéke beíródik ezen regiszterbe (ICRn). (ahogyan az adatlap fogalmaz, time-stampet generálhatsz ezzel)

ha trivialitásokat írtam, elnézést.

előbbi kérdésedre:
hirtelen nem is értem, miért a timer regisztert (TCNTn) szeretnéd növelni külső eseményre. illetve nem emlékszem ilyen üzemmódjára a timernek.
(#) zombee válasza zaik hozzászólására (») Júl 6, 2009 /
 
Hello!

A TCNTn - et külső eszköz frekvencia mérésére akarom használni. Amúgy az induktivitásmérőmhöz lesz. Ehhez mindenképpen egy hardveres számláló kell.

Egyelőre megint C-ben próbálkozom. Pár órás adatlap böngészés és egy kis angolozás után végre sikerült felkonfigurálnom a 16 bites TIMER1-et, egyelőre még csak belső órajelre, a 20MHz-es kvarcot pedig kicseréltem 4-esre:
TCNT1H = 0;
TCNT1L = 0;
TCCR1A = 0b00000000;
TCCR1B = 0b00000101; //1024-es osztás
TIMSK = 0b00000100; //TIMER1 túlcsordulás interrupt

Amúgy a TCCR1B -t kell majd 0b00000111 - re állítani, hogy a T1 pin felfutó élére reagáljon. A többi maradhat.
Kicsit utánaszámoltam, egy 500kHz-es külső jel kevesebb mint 8Hz - nyi interruptot eredményez, ami már nem fog bezavarni egy timert!

Jelenleg egyszerű szoftveres időzítéssel multiplexeli a kijelzőt, 16 bites hardveres számláló értékét decimális formában folyamatosan kiküldi rá a képen látható módon. Baloldalt a rezgőkörös rész látható, tápellátás újratervezés miatt egyelőre még nincs bekötve. A relét pedig a legnagyobb ökörségnek tartom egy ilyen műszerben, azt is kivettem(több a hely )

kis előzmény:
Az utóbbi hetekben már megcsináltam a hozzá való szoftveres számlálót is, az INT0 megszakítást használva. Időzíteni viszont nem lehetett, mert a sűrű INT0 hívogatások miatt a timer és az INT0 összeakadt, egymást botrányos módon megzavarták(C-ben és assembly-ben is, csak a határok voltak mások).

Ha C-ben programoztam, akkor 12MHz-es kvarccal kb. 120kHz-ig volt életképes, míg assemblerben 600KHz-ig.
Ez utóbbihoz egy olyan kiegyensúlyozott ciklusmagot kellett írnom, ami minden esetben(akár van interrupt akár nincs, akár csordul valamelyik számláló akár nem) ugyanannyi órajelig(22 CLK) tartott. Aztán jött a LED-es kijelző multiplexelésének igénye. Az órajelszükséglet 36-ra növekedett, és 20MHz-es kvarccal kb. 540kHz-ig életképes(elméletben). Ja, és ez utóbbinál eléggé vibrált + váltásoknál bevillant a kijelző...

DSC00222.JPG
    
(#) Mumtaz válasza zombee hozzászólására (») Júl 6, 2009 /
 
Azért nem potival, mert azzal hosszadalmasan lehet pont jó időközre beállítani. Egyébként VW-k többségében alapfelszereltség.
(#) zombee válasza Mumtaz hozzászólására (») Júl 6, 2009 /
 
alapfelszereltség. a poti?

Visszatérve a frekiszámlálóhoz:
T1 lábra vezettem rá az oszcillátort, TIMER1 - et felkonfigoltam egyszerű számlálásra+túlcsolduláskor interruptra. Ezzel párhuzamosan fut a TIMER0, mely a CPU órajeléről, 1024 előosztással és ugyanúgy túlcsordulásos interrupttal megy. Ha ez utóbbi túlcsordul, lementi a kijelző-adattárba a TIMER1 értékét és lenullázza azt.

4MHz-es kristállyal hajtom meg, nagyon stabil, csak a legutolsó számjegy ugrál, de nem összevissza, hanem mindig csak két érték között. Amúgy a kijelző multiplexálást a fő hurok végzi, az oszcillátort a hardveres TIMER1 számláló figyeli.
Megpróbáltam 2MHz-en is, de ezen már nem képes kielégítően működni. Szerintem a PIC-es változatnál is hasonló okok miatt van 4MHz-es kvarc...
(#) Mumtaz válasza zombee hozzászólására (») Júl 6, 2009 /
 
Idézet:
„alapfelszereltség. a poti?”


Nem a potis megoldás alapfelszereltség, hanem ez a tanítható időzítő. De nem mindben. Viszont a céges, 2000-es évjáratú VW Transporterünkben benne van.
(#) zombee hozzászólása Júl 8, 2009 /
 
Üdv mindenkinek.

Kivételesen, kérdéssel fordulok hozzátok.
Motor fordulatszámmérőt szeretnék Skoda Favorit gépkocsimhoz. Digitálisat tervezek, a 8 szegmenses kijelző összerakás+vezérlés gyerekjáték ATMEGA16-al.

Azt tudom, hogy valahol a gyújtómű környékén kell kivenni az impulzusokat, de sem a kontrollert, sem a gyújtásvezérlőt, sem pedig jómagamat nem szívesen vágnám haza a kísérletezgetés közben.

Az mindjárt világos, hogy nem a nagyfeszről kell levenni a jelet. A kisfesz részen ott a gyújtótrafó, valamelyik kapcsára kell rákötni a bemeneti fokozatot?
(#) Tomi20 válasza zombee hozzászólására (») Júl 8, 2009 /
 
Szia

Pontosan, a gyujtótrafó egyik csatlakozása a gyujtás áram, a másik a "szaggatott test". Innen kell levenni a feszültséget a fordulatszám mérőnek is. Kérhetnék egy kis segítséget is? Én is ilyen gyújtásra szeretnék építeni egy "szabályzó elektronikát". A lényege annyi lenne, hogy elér egy bizonyos fordulatot (legyen 5000RPM) elveszi a szikrát, és 4800 körül visszaadja. Eddig analóg eszközökkel próbáltam megoldani a feladatot, de ez elég pontatlan+lassú. Most kezdtem a tanulását az AVR-eknek, szóval ez nekem nagy falat lenne. Lehetne egy olyan kérésem, hogy írnál egy ilyen programot, és forráskóddal együtt elküldenéd nekem? Azért kellene a forrás, hogy módosítani tudjam a fordulatszám értékeket. Nagyon hálás lennék érte, mert az illető addig nem szeretne várni, míg meg tudnám írni magamtól a programot. Előre is köszi.
(#) Mumtaz válasza Tomi20 hozzászólására (») Júl 8, 2009 /
 
Bár ez nem AVR, de lényeges. Az ilyen leszabályzást jól kell belőni, mert, ha túl sokáig nincs szikra, attól még a benya bejut a motorba és onnan a kipufogóba. Mikor visszajön a gyújtás, a kipufogóban ez berobban(hat). Ha katalizátor is van, akkor pláne nem kell ecsetelni a lehetséges következményeket. Bár a gyújtás kimaradás rövid ideig tart, de akkor is okozhat meglepetéseket.
Szóval mérlegelni kell.
(#) Thomm hozzászólása Júl 9, 2009 /
 
Sziasztok
Tereveztem és lassan építek egy újszerü napkollektort, amihez egy napkövető elektronikára van szükségem.
Neki is keztem a megépítésének, de aztán rábukkantam egy AVR-hez készült programra amit szabadon hozzáférhetővé tett a programozója.
http://users.atw.hu/sirleslie/projektek/napkollektor/index.html
Sajnos AVRekkel csak nemrég kezdtem foglalkozni, de szegényes hozzáértésemmel próbáltam a forráskód alapján alpján egy kapcsolásirajzot készíteni. Ha valaki lenne kedves ellenőrizni hogy ejtettem-e valami hibát benne /biztos/, roppant hálás lennék érte. Ami kérdés felmerült: A szenzornak használt ledeket jól alkalmaztam, nincs szükség külső órajelre, én m168-hoz rajzoltam, müködni fog igy is?
Örök hálám a program elkövetőjének!!!
Elörre is köszönöm a segitségeteket.
(#) TavIR-AVR válasza Thomm hozzászólására (») Júl 9, 2009 /
 
Sirleslie-t érdemes megkergetni...
A LEDek helyett én inkább PINdiódás raknék. A LED baromi érzéketlen....
SFH203 vagy hasonló....

Tranzisztor bázisellenállása hova lett?
A relék tekercsére - ha a tranzisztor hosszú életű legyen - tégy védődiódát.

Estleg tranzisztor helyett FETet berakni...
PC0...PC5 igaz az AD bemenet?


Reset lábra a 100n+4k7 páros hol van?
Analog es digit Vcc és GND is van, VCCbol nem talalom az 1iket....

PD2, PD3 felhúzóellenállás?
13-15 lábakon is javasolt...

A GND és a -12V összekötése nem túl bölcs dolog (tápIC környéke...)
7805 kimenetére nem rakunk nagykapacitású kondit mert idővel a 7805 megdöglik...

(#) Thomm válasza TavIR-AVR hozzászólására (») Júl 9, 2009 /
 
Szia
Próbáltam, valószinüleg nem ér rám
Ledből 10mm-es viztisztákra gondoltam, ez elvileg egy bevált és gyakran hasznát megoldás, ha minden igaz SirLeslie is igy használja.

Upsz a korlátozóellenállások tényleg lemaradtak a rajzról.

A diódákra már rávilágitott az egyik ismerősöm is, jogos.

A fetek már nekem is eszembe jutottak.

Igen, pc0-5 az AD de nem tudom hogy mekkora potikat kellene használno, illetve hogy a ledeket jó irányban rajzoltam-e be.

A reset lábra a kondit és az ellenállást hogy kellene bekötni?

Vagyis a kontroller AVcc-ként jelzett 20as lábára is 5v-ot kell adni hogy müködjön az AD konverter?

Nem elég bekapcsolni a belső felhúzóellenállásokat a pd2-3-7 és pb0-1 lábakon?

A tápIC után már elvileg az 5v negativja kellene hogy megjelenjen, én ezt jeleztem gnd-nek, nem vagyok rutinos kapcsolásirajz készítésben.

Én 100µF 16v-os L-cokra gondoltam, ezt szoktam használni. Kinyirhatja a 7805-öst?

Köszönöm a segitségedet.
(#) Thomm válasza TavIR-AVR hozzászólására (») Júl 9, 2009 /
 
Megrajzoltam az általad javasolt módositásokkal a kapcsolást. A FETekhez is kell használni előtét ellenállást?
A két kapcsolóhoz és a jumperekhez mekkora ellenállást kell használni? Mekkora potikat használjak? Valószinüleg a 4 végálláskapcsolót kihelyettesitem hall-elemekkel de elöször a "mag" működjön. A tápICnél a gnd leválasztását nem igazán értem.
Köszi a segitséget
(#) csakaszamok hozzászólása Júl 12, 2009 /
 
Sziasztok!

Lehet, hogy kizártam magam?
ATtiny13-ban gondoltam, hogy a PB5 lábat (ami a RESET is egyben) átállítom I/O-ra, de amikor bepipálltam az ehhez tartozó fuse bitet, akkor ledobott, és azóta nem tudok rácsatlakozni.


Mit lehet ilyenkor tenni? A Topi által írt "pacemaker" azért gondolom, hogy nem jó az én esetemben, mivel próapanelre helyezve, az utoljára felírt program szépen fut rajta, tehát a belső oszcillátor megy.

Remélem nem zártam ki magam örökre..

Bármi ötlet?
(#) gtk válasza csakaszamok hozzászólására (») Júl 12, 2009 /
 
Nagyfesz programozo.
(#) csakaszamok válasza gtk hozzászólására (») Júl 12, 2009 /
 
Köszi.

Nos így már újra tudok csatlakozni (nagyfesz módban), de amikor a fuse-t akarom állítani, akkor azt tippeli nekem a program (AVR Studio), hogy nem vagyok 4.5-5.5 volt között, és ezért bár olvasni tudja a fuse-t, de írni nem. Természetesen 4.5 és 5.5 volt között vagyok.

Lehet, hogy az STK500-al van vmi gond, vagy én vagyok csak szimplán béna?!
(#) gtk válasza csakaszamok hozzászólására (») Júl 12, 2009 /
 
Nem ismerem az STK500-at, majd valaki mas hatha segit.
(#) csakaszamok válasza gtk hozzászólására (») Júl 12, 2009 / 1
 
No végül is sikerült.
Az volt a gond elsőre, hogy benne hagytam egy atmega8515-t, amit bár a jumperelés miatt nem szabadna, h lásson, még is zavarta a HV programozót.
Köszi még1x gtk.
(#) atiotezer hozzászólása Júl 15, 2009 /
 
Tudna nekem valaki csinálni a zip-ben található fájlokból egy HEX-fájlt? ATMEGA8 16 MHz. Melóhelyen vagyok nem tudok letölteni semmilyen programot. Előre is kösz.
üdv:
Következő: »»   135 / 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