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   247 / 840
(#) öregharcsa válasza Ideiglenes hozzászólására (») Júl 7, 2010 /
 
Itt egy link az angol nyelvű adatlappal...EADOGL128-6 grafikus LCD
Használd egészséggel !
(#) zsl.hu hozzászólása Júl 7, 2010 /
 
Sziasztok!

Csatlakoztam az AVR-el foglakozok lelkes táborához.
Nemrég kezdtem vele foglakozni, lassan, de biztosan jutok előrébb. Kis villogó már megy
Lenne azonban egy számotokra talán egyértelműnek tűnő kérdésem.
Honnan tudja az avr, hogy égetni szeretném vagy csak jeleket küldök neki, ha ugyanazok a lábak be/kimenetek mint amin a programot küldjük át neki?

A másik kérdésem az lenne, hogy az atiny soroztal is meg lehet csinálni, hogy soros porton komikáljon a pc-vel, nem programozás szempontjából hanem adatokat küldjön a pc? Mert mindehol eddig az atmegát láttam.
Meg a leirásokban amik a soros kapcsolatról szolnak c-ben vagy bascom-ban vannak a programok. Assemblyben hol lehet elérni a soros port regisztert?

(#) v alaki válasza zsl.hu hozzászólására (») Júl 7, 2010 /
 
Szia,

Az Attyny45 ben nincs UART, amivel könnyű lenne RS 232 kommunikációt csinálni. (a legtöbbször ezt azzal magyarázzák, hogy túl sok lábat köt le a UART, és nem marad másra.)
Szoftveresen emulálni a uartot sem túl népszerű.

ATTyny45-ben SPI van viszont arra nincs közvetlen megoldás a PC-vel való összekötésre. (viszont cserébe akár flash memóriával kommunikál csont nélkül)

Lehetőség van még az USB-re, de abban még nem tudok segíteni, mert most rágom át rajta magam.
Hátha valaki más.
(#) v alaki válasza toto hozzászólására (») Júl 7, 2010 /
 
Szia,

Kicsit tovább olvasgattam, és van egy atmel application notes erről, ezen rágom át magam.
Hát nem tűnik egyszerűnek...
Ha lesz valami,
itt
(#) zsl.hu válasza v alaki hozzászólására (») Júl 7, 2010 /
 
Kösz!
Azt nem tudod, hogy attiny26-ban van-e?
Annak elég sok lába van.
Az van nekem itton.
Vagy kell vennem egy atmega ic-t?
Mit keresek az adatlapon?
(#) zsuscsinyo válasza zsl.hu hozzászólására (») Júl 7, 2010 /
 
Idézet:
„Honnan tudja az avr, hogy égetni szeretném vagy csak jeleket küldök neki, ha ugyanazok a lábak be/kimenetek mint amin a programot küldjük át neki?”


Reset állapotban tudja programozni.
(#) zsl.hu válasza zsuscsinyo hozzászólására (») Júl 7, 2010 /
 
ok, ez így logikusnak tünik, de a reset láb egyben i/o port is akkor honnan tudja, hogy reset állapotban van vagy csak kap egy bemeneti jelet?
(#) Proci_85 válasza zsl.hu hozzászólására (») Júl 8, 2010 /
 
Ezért szokták mondani, hogyha I/O -nak használod (=annak állítod be) a resetet, utána nem tudod majd sima égetővel írni.
(#) Wiver hozzászólása Júl 8, 2010 /
 
Sziasztok! Szeretnék segítséget kérni, mert anyagilag és idegileg is rá megyek erre a kapcsolásra
Megépítettem és elsőre gyönyörűen, hangosan szólt minden féle mellék zörej nélkül. Ami a problémám az hogy lassan szól, nyújtva. megpróbáltam fuse biteknél a felprogramozásnál a frekvenciát variálni, és már elsőre kizártam magam belölle. (vettem másikat) Hol hibáztam? Mit csináltam rosszul, hogy lassan szól? Én a felprogramozásra gondolok az AVR studióval csináltam, és hagytam mindent alapállapotba ugy ahogy az avr studió beállította.
Ami még eltér az eredetitől hogy attiny13-al csináltam, ehez a programban annyi változást csináltam hogy 20db dallam helyett csak kettőt tettem bele, mert csak ennyi fért rá. Várom a megoldást, köszönöm
(#) vagnerjazon válasza Wiver hozzászólására (») Júl 8, 2010 / 1
 
CKDIV8- ból ki kell venni a pipát, hogy ne ossza 8-cal az órajelet.
(#) Fizikus hozzászólása Júl 8, 2010 /
 
Sziasztok!

Megkertek ra hogy segitsek az alabbi weboldalon levo kapcsolas megepitesenel.

Bővebben: Link

Az a gondom, hogy en Winavr-t hasznalok, a Bascom-hoz nem ertek.
Le tudna ezt a basic programot valaki forditani nekem hex-re? Elore is koszi a segitseget!
(#) echo11 hozzászólása Júl 8, 2010 /
 
Fizikusnak: Próbáltam avrStudioval lefordítani, de nem csinált semmit (Fatal error).Viszont nekem lenne egy kérésem, minden c-t használó emberhez:a mellékelt txt-ben egy olyan forráskód van, ami 150Hz-ig növeli, majd csökkenti a frekvenciát. De nekem a hex 12kb ezért nem fér rá az attiny45-re és azt szeretném megtudni, hogy mit módosítsak rajta, hogy a hex kisebb legyen?

hang.txt
    
(#) szabi83 válasza Fizikus hozzászólására (») Júl 8, 2010 / 1
 
Tessék, Atmega8 ?
(#) zolee1209 válasza echo11 hozzászólására (») Júl 8, 2010 /
 
Sajnos egyáltalán nem értek a C-hez, csupán érdeklődnék attól, aki tudja... Egy ilyen pár soros kódból hogy lesz 12kB-os gépi kód?
(#) Norberto válasza zolee1209 hozzászólására (») Júl 8, 2010 /
 
A float adattípus, azzal történő osztás és szorzás műveletek miatt.
(#) v alaki válasza v alaki hozzászólására (») Júl 8, 2010 /
 
Szia,
Azt hiszem nem voltam elég pontos, mert USI (egy egység) van a Attyny45 ben, és abból lehet SPI-t (egy funkciót ) csinálni. (és még egyebeket ..)
Sajna a Attyny 26-ban is csak ez van...
U(S)ART hiányában az egyszerű RS232 kilőve.

Adatlapot nézegetve, a lábkiosztásnál gyorsan kiderül, mert a U(S)ART-os AVR-knek van TX, és RX lábuk is.

Szerintem...
(#) (Felhasználó 4577) válasza echo11 hozzászólására (») Júl 8, 2010 /
 
Úgy van, ahogy Norberto mondja.
Ciklushoz nem kell float-ot használni, hisz egész számokkal számolsz.

  1. unsigned int i, j;
(#) Fizikus válasza szabi83 hozzászólására (») Júl 9, 2010 /
 
Igen, ATmega8. Koszi szepen a gyors valaszt! :worship:
(#) echo11 válasza (Felhasználó 4577) hozzászólására (») Júl 9, 2010 /
 
Így még nagyobb lett...(15kb) Lövésem sincs, hogy mi lehet a baja. Igaz, még nem igazán értek az avrekhez, de a példaprogramokat tekintve nem hiszem, hogy ez a két változó, meg a két számolás okozná a bajt...Ha valaki, aki ért a témához, venné a fáradságot, hogy otthon lefordítja és megnézné, hogy mekkora hex ugrott ki, nagyon hálás lennék, mert kezdek arra gyanakodni, hogy esetleg az avrstudioval van valami baj... :help: :help:
(#) echo11 válasza Norberto hozzászólására (») Júl 9, 2010 /
 
Te tudsz valamit mondani, ezzel a dologgal kapcsolatban, látom, hogy értesz a dologhoz?Amúgy végigpróbáltam az összes változótípussal és mindegyiknél csak nagyobb lett...
(#) IMi válasza echo11 hozzászólására (») Júl 9, 2010 /
 
Hello!
Nem rég esett szó róla:Bővebben: Link
(#) echo11 válasza IMi hozzászólására (») Júl 9, 2010 /
 
ez tudom, mivel ott is engem osztottak le, és valószínűleg ez is a baj, csak arra lennék kíváncsi, hogy hogyan lehet ezt kiküszöbölni...
(#) Proci_85 válasza echo11 hozzászólására (») Júl 9, 2010 /
 
Hello!

Nem csak a változók miatt hízik meg. Főként a delay kavar be.
Nálam linuxon fordítva többször is problémát okozott. Ha túloptimalizáltam a fordítást, akkor a delayt kivette vagy hibásan fordította le. Kicsi lett a hex, cserébe nem időzített

Ha benne hagyattam vele akkor meg felhízott. Ahogy a tiéd is.
Érdemes saját delayt írni, pl.:
  1. void Delay2_ms(unsigned int t)
  2.  
  3.   {
  4.    unsigned int i, aika;
  5.    aika = 250;
  6.  
  7.    while(t--)
  8.     for(i = 0; i < aika; i++)
  9.  
  10.        if(t==0) return;
  11.  
  12.   }


Ez 8MHz-s atmega88-nál dúrván 1másodpercet késleltet ha átadsz 100-at a függvénynek.
Ha valaki univerzálisabbá tudná tenni, pl. frekvencia deklarációból leosztja, kiszámolja hány műveletet végez el egy ciklusban a mikroprocesszor, akkor elvileg pontos 1mp-t is be lehetne vele lőni. Amikor kellett nem molyoltam el vele ennyire.

Szóval gyári delay mellőzése, mégjobb volna ha helyette timert lehetne használni. Az még annyit sem eszik elvileg.

A bemutatott delay kóddal a hexed 7kb let. Így is sok, de nem 12kb
(#) Topi válasza Proci_85 hozzászólására (») Júl 9, 2010 / 1
 
Az a gond, hogy változót adtok a delay-nek. Nincs semmi gond a delay-el, csak ne kapjon változót.
Ha nem fix időzítés kell, akkor ezt szokás csinálni:
  1. void m_delay_ms(unsigned short v) {
  2.   while(v--) _delay_ms(1);
  3. }


Ezt esetleg meg lehet fejelni egy időarányos korrekcióval, de így az utasítás végrehajtás ideje szinte elhanyagolható.
És legalább nem kell szöszölni az adjusztálással más F_CPU esetén.

Egyébként az így létrehozott bármilyen delay ugye kizárólag akkor igaz, Proci_85-é és az enyém is, ha előtte cli(); majd utána sei();...
Különben teljesen mindegy, mert az interrupt bekavar a valós időbe. De persze ugye általában így globálisan nem lehet a delay idejére lekapcsolni az interruptot (hisz pont azért használunk interruptot) így a ténylegesen fix idejű delay-ekre, ahol interruptok is vannak, ott én ezt használom:

Van egy volatile változó, mondjuk
  1. volatile unsigned char my_delay;


Timer interruptban:
  1. if(my_delay) my_delay--;


Majd bárhol ahol várni kell:
  1. my_delay = 100; while(my_delay);


Nem kell több my_delay változó sem, mert egyszerre mindig csak egy helyen használjuk úgyis. (Ahol várunk)
Én általában létrehozok mindig egy 1KHz vagy 100Hz-es timert, és egyetlen egy timer végez minden ütemezést.. Taskok, delay-ek, prell mentesítés, hosszú gombnyomás detektálás, stb...
(#) Proci_85 válasza Topi hozzászólására (») Júl 9, 2010 /
 
Ez nagyon hasznos volt, köszönjük Topi!
Kipróbálom én is, mert visszatérő problémám volt a delayek körül
(#) echo11 válasza Topi hozzászólására (») Júl 9, 2010 /
 
Hello! Köszi a választ de mivel kezdő vagyok,ezért még ezt meg kell emésztenem, de a hozzászólásban lévő első módszert értem és szerintem egyenlőre ezt is fogom használni...még nem próbáltam, mert nem vagyok gépközelben, de majd leírom, hogy így mekkora lett...mégegyszer köszönöm mindenkinek.
(#) echo11 válasza Topi hozzászólására (») Júl 9, 2010 /
 
Ez már megy, de közel sem azt a frekvenciát adja, mint kéne.Mit csináljak vele?Tudom írtad a "cli()"-t meg "sei()"-t, hogy ne szóljon bele a valós időbe, de ezekkel mit kell csinálnom? Bocsánat a kérdésért, mert valahol biztos le van írva (nagyon sokat olvasgattam,de nem találkoztam még ezzel), de ha én most úja elkezdek olvasgatni, akkor sosem jutok el addig, hogy írjak egy értelmes progit.Szóval mit kell ahhoz csinálnom, hogy rendes időben fusson?
(#) Topi válasza echo11 hozzászólására (») Júl 9, 2010 /
 
-Os legyen az optimalizáció.
Bármilyen más optimalizáció sűrűn tönkreteszi teljesen a delayt. Elég sokszor kitárgyaltuk már itt.
És nézd meg be van-e állítva az oszcillátor. Akár makefile-ban, akár project configban, akár kódból #define F_CPU-val.
(#) echo11 válasza Topi hozzászólására (») Júl 10, 2010 /
 
Hello! Minden ugyanúgy beállítva, ahogyan mondtad, de valami még mindig nem jó...Nem jut semmi az eszembe, hogy mi zavarhat be...A cli();-t meg az sei();-t is használtam (függvény void-ja elé a cli-t és a függvény mögé az sei-t), de így sem változott semmi.Máshova pedig nem engedte beírni ezt a kettőt.Mi lehet még a baja?
(#) gtk válasza echo11 hozzászólására (») Júl 10, 2010 /
 
Mit hova irtal?? Tedd fel mellekelve a kodot (v. reszletet), es majd valaki megnezi.
Következő: »»   247 / 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