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   252 / 840
(#) atya válasza zsozsoX hozzászólására (») Júl 24, 2010 /
 
Igen, tobbek kozt, mikor uj projektet kezdesz. ( nem kell rogton finisht nyomni ) Igazabol ott is includeolodnak fileok, automatikusan, a megadott vezerlo tipus alapjan. Ezekben a fileokban vannak tarolva a chip specifikus dolgok, regiszterek nevei, IO labak, stb...
(#) edison14 hozzászólása Júl 24, 2010 /
 
Hali.

Azt szeretném megkérdezni, hogy valakinek nincsen e valamilyen részletes leírása LCD kezelésről? Pontosabban az AVR Studio-ban való beállításáról kellene egy leírás, hogy milyen parancsokkal lehet vezérelni. nagyjából már ismerek egy-két parancsot mert mikroC-ben már használtam de abban minden ki volt spórolva.

Előre is köszönöm a segítséget.
(#) (Felhasználó 4577) válasza edison14 hozzászólására (») Júl 24, 2010 /
 
Idézet:
„Azt szeretném megkérdezni, hogy valakinek nincsen e valamilyen részletes leírása LCD kezelésről?”

LCD kijelző adatlap, annál részletesebb nem kell. Egyébként itt az oldalon is van.

Idézet:
„Pontosabban az AVR Studio-ban való beállításáról kellene egy leírás, hogy milyen parancsokkal lehet vezérelni.”

Majdnem ugyan azokkal, amikkel a LED-eket is villogtatod.
(#) zombee válasza edison14 hozzászólására (») Júl 24, 2010 /
 
Ha megírod az LCD-re való adatküldés függvényeit(adatküldés, parancsküldés), akkor már csak az azokat használó könyvtári függvényeket kell beszúrni és használni.
Tényleg csak portkezelést kell megírni(4 vagy 8 biten).

Nálam megvan a HD44780 könyvtár ha kell, én írtam...
(#) edison14 válasza zombee hozzászólására (») Júl 24, 2010 /
 
Hali.

belekukkantanék. Nem volna rossz egy kis tapasztalatszerzés.
(#) papcsi95 hozzászólása Júl 25, 2010 /
 
Helló
Nemtudom hogy mennyire tartozik ide ...
Az lenne a kérdésem/kérésem ,Van egy Attiny45-ös AVR-em no most mivel kezdő vagyok és most ismerkedem a programozással is azt szeretném kérni valakitől hogy írna-e nekem egy olyan programot hogy : PB3-on van egy led(R-en keresztül megy Vcc re{értelem szerűen a negatív kivezetése van az AVR lábán}),PB4-en van egy kapcsoló(megy GND-re).A program azt csinálná hogy amikor megnyomom a gombot a LED (Vagy akármi más)bekapcsol és amikor újra megnyomom a gombot akkor kikapcsol.Ha ehelyett a kapcsolás hejett mutattok egy másikat az is jó csak a lényeg az hogy ezt csinálja.Előre is köszi mindenkinek aki legalább elolvast azt a szörnyen nehezen érthető kérést (Eddig addig jutottam el hogy hogyha egyszer megnyomom akkor bekapcsol de ha mégegyszer megnyomom akkor semmit nem csinál)
(#) freddyke válasza papcsi95 hozzászólására (») Júl 25, 2010 /
 
Több mint 10 éve programoztam PIC-et. AVR-be én is most vágok bele. Küldd el a program forráskódját, talán ki tudom neked javítani.
(#) zombee válasza papcsi95 hozzászólására (») Júl 25, 2010 / 1
 
4 éve programozgatok AVR-t, kb. 2 perc alatt leírom. Remélem C-ben írt program is megfelel...
Apropó. Késleltetés a pergésmentesítéshez kell. A 8MHz-et pedig azért adtam meg mert a CKDIV8 nevű FUSE bitet ki kéne venni...
Nem próbáltam ki, de reméljük jó lesz:

#define F_CPU 8000000
#include
#include
int main(void)
{
DDRB = 0b00001000;
PORTB=0b00011000;
while(1)
{
while(PINB&0b00010000); //várakozás lenyomásra...
PORTB = (PORTB & 0b11110111) | (~PORTB & 0b00001000); //kimenet invertálás
_delay_ms(50); //pergésmentesítés
while(!(PINB&0b00010000)); //várakozás felengedésre...
_delay_ms(50); //pergésmentesítés
}
}
(#) zombee válasza edison14 hozzászólására (») Júl 25, 2010 /
 
Hello!

Összeszedtem egy fájlba a lényeget. Csatoltam.
(#) edison14 válasza zombee hozzászólására (») Júl 25, 2010 /
 
Nagyon szépen köszönöm a fáradozásaid. Már a lényeget értem.
(#) morgo hozzászólása Júl 25, 2010 /
 
Sziasztok!
Az lenne a kérdésem, hogy az alábbi kapcsolásban lehet-e programozni az AVR-t? Soros égetővel, és ráforrasztott csatlakozásokkal gondoltam. Ugyanis megépítettem az égetőt, beforrasztottam a Tiny2313-at is, de lehet, hogy elfelejtettem felprogramozni előtte Mivel SMD-ről van szó nem akarom gyilkolni a nyákot a kiforrasztással. Egyébként van valakinek tapasztalata ezzel az égetővel?
(#) zombee válasza morgo hozzászólására (») Júl 25, 2010 /
 
Be lehet programozni, a programozó szálakat forraszd fel a panelra.
A MISO vonalon ott lóg a buffer kimenete, ezért vágd el a szálat, programozás után majd visszakötöd.

Véleményem a programozóról:
EGY NAGY RAKÁS F*******S <>&@<&>@<>&<

Használj Dopert! >
(#) (Felhasználó 4577) válasza zombee hozzászólására (») Júl 25, 2010 /
 
Idézet:
„Véleményem a programozóról:
EGY NAGY RAKÁS F*******S <>&@<&>@<>&<”

Szerintem semmi baj nincs vele.

Szerintem egyik utánépített programozó sem ér fel egy gyári Atmel programozóval.
(#) morgo válasza (Felhasználó 4577) hozzászólására (») Júl 25, 2010 /
 
Köszi a válaszokat, de ha mindig csak a gyáriban gondoznánk, akkor nem lenne szükség a programozóra sem...
"Nem ér fel a gyári Atmel programozóval" - az ára sem
(#) edison14 válasza (Felhasználó 4577) hozzászólására (») Júl 25, 2010 /
 
Hát szerintem is így van. Én egy USB ASP nevű programozót használok és tökéletesen működik de nem tud magasfeszültségű programozást és debuggolni sem tud. Ugyan ez van a doperrel is.
(#) zombee válasza (Felhasználó 4577) hozzászólására (») Júl 25, 2010 /
 
Egyszer megépítettem, oltári botrányos volt az egész.
Kellett hozzá még a driveren felül külön portemulátor program(com0com) amit csak konzolról lehetett élesíteni, na ezt még túléltem mert 1x kell megcsinálni. És még egy másik programot is folyamatosan connect-elni, futtatni kellett hogy az AVR Studio is lásson valamit belőle. Végül az AVR Studio mégsem szerette, rendeteg időt és energiát beleöltem, mire rájöttem hogy egy nagy rakás kaki az egész. Heawy júzer-ként inkább szívtam a nyomtatókábelessel és a Pony Prog - al, mintsem ezzel a szutyokkal!
Ha egy kezdő élné meg ugyanazt amit anno én, egy életre elmenne a kedve a kontrollerezéstől...

Az USBASP és az AVR Doper az amit ha bedugsz, driver fel, és utána már nem kell foglalkozni vele.
A Doper alapváltozata pedig HVPP-t is tud, hamarosan elkészül az én változatom ahol a 12V-ot is az USB-ről állítom elő.
(#) Wiver hozzászólása Júl 25, 2010 /
 
Sziasztok!
Szeretném megépíteni az itt található AVR-es tapskapcsolót, de van 3 kérdésem. Az egyik gondom nem találom a beégetéshez találó hex file-t. mert az oldalon található írás az gondolom csak egy kód részlet. A másik kérdésem nem tudom hogy lehetne megoldani hogy a csipogó helyett egy relé legyen, esetleg össze tudnátok dobni hozzá egy kapcs rajzot? A harmadik kérdésem az hogy a kapcsolási rajzban szereplő Attiny45 helyettesíthető Attiny13-al? remélem tudtok mind a három kérdésemre megoldást Köszönöm szépen.
(#) papcsi95 válasza zombee hozzászólására (») Júl 26, 2010 /
 
Nekem mindenféle hibát ír ki amikor "make all"-oz ok megnéznéd te is mert én nem jöttem rá mi lehet a baj.De amúgy kösz.
(#) Ricsi89 válasza papcsi95 hozzászólására (») Júl 26, 2010 /
 
Mivel nem tette code részbe, ezért egy pár részlet kimaradt, így sosem fog lefordulni.
(#) zombee válasza papcsi95 hozzászólására (») Júl 26, 2010 / 1
 
az include részeknél volt a hiba, azt nem eszi meg a fórum...
helyesen:
  1. #define F_CPU 8000000
  2. #include<avr/io.h>
  3. #include<util/delay.h>
  4. int main(void)
  5. {
  6.   DDRB = 0b00001000;
  7.   PORTB=0b00011000;
  8.   while(1)
  9.   {
  10.     while(PINB&0b00010000); //várakozás lenyomásra...
  11.     PORTB = (PORTB & 0b11110111) | (~PORTB & 0b00001000); //kimenet invertálás
  12.     _delay_ms(50); //pergésmentesítés
  13.     while(!(PINB&0b00010000)); //várakozás felengedésre...
  14.     _delay_ms(50); //pergésmentesítés
  15.   }
  16. }


Egyébként a feladatra lehet hogy egy JK-flipflop (vagy T-flip-flop) is megfelel, nem utolsó sorban olcsóbb.
Ha viszont tanulásnak szántad ezt a nagyon egyszerű feladatot, akkor nem szóltam...
(#) freddyke hozzászólása Júl 26, 2010 /
 
Használtátok már ezt a kijelzőt? SPI buszon lehet programozni? Nekem elég szűkösnek tűnik a leírás, ami a 8 oldalas adatlapon van.

Más: Látom, nem dícséritek az utánépített programozókat..Ez a programozó jó?
(#) (Felhasználó 4577) válasza freddyke hozzászólására (») Júl 26, 2010 /
 
Idézet:
„Használtátok már ezt a kijelzőt? SPI buszon lehet programozni? Nekem elég szűkösnek tűnik a leírás, ami a 8 oldalas adatlapon van.”

Ne az LCD típusára keress rá, hanem a vezérlő típusára.
Itt nézelődj, hátha már valaki foglalkozott ilyennel.

Idézet:
„Más: Látom, nem dícséritek az utánépített programozókat..Ez a programozó jó?”

Ilyen van nekem is! Szerintem nagyon jó, nekem nagyon tetszik.
Én az MSC Budapest-nél vettem, akkor ott volt a legolcsóbb, illetve minden más is. Ha veszel, érdemes rákérdezned, hogy mennyibe kerül az Atmega8, én valami 350Ft körül vettem vagy 10-et 1.5-2 éve a programozóval együtt.
(#) freddyke válasza (Felhasználó 4577) hozzászólására (») Júl 26, 2010 /
 
A kijelzőnél jobban megnéztem a 8 oldalas leírást, kis kísérletezéssel ki lehet hámozni belőle a lényeget. A leíráson belül van egy utalás a vezérlőre, illetve a hiányzó információk összeszedhetők. Jó móka lesz ehhez függvénytárat írni. Keresnem kellene neten egy karakter táblázatot, ha nem akarok pixelenként karaktereket tervezni. Főleg a kijelezhető legminimálisabb méretű, illetve egyedi karakterekre lesz szükségem, szóval lehet, hogy mégiscsak nekem kell tervezni.

Megnyugodtam. Kösz a tippet, nekem adódott egy lehetőség és kedvezőbben tudtam beszerezni a cuccokat, ATxmega61A1-re szeretnék fejleszteni.
(#) (Felhasználó 4577) válasza freddyke hozzászólására (») Júl 26, 2010 /
 
A HEStore-os linken ott van a kijelző vezérlő típusa.
Mondtam, hogy nézelődj a google-ben, még a kulcsszavakat is beírtam, valaki biztosan megírta már helyetted, csak meg kell találni.
(#) freddyke válasza (Felhasználó 4577) hozzászólására (») Júl 26, 2010 /
 
Igen, azt megtaláltam, majd kihámozom. Karakterkészletet keresek neten, de úgyis egyedire kell írnom a függvényeket az alkalmazáshoz. Grafikus kijelző meghajtása egy kicsit macerásabb mint a karakteres. Annyival jobban is fog mutatni, tiszta profi lesz.
(#) vagnerjazon hozzászólása Júl 26, 2010 /
 
Olyat próbáltam összehozni, hogy ha nyomogatok egy gombot, akkor egyre fényesebben világít egy LED. A program, amivel próbáltam:
  1. #include <avr/io.h>
  2. #include <util/delay.h>
  3.  
  4. int main(void)
  5. {
  6. DDRB = _BV(PB1);
  7. PORTB = _BV(PB0);
  8.  
  9. TCCR1B |= _BV(CS10);
  10. TCCR1A |= _BV(WGM10);
  11. TCCR1A |= _BV(COM1A1);
  12. TCCR1B |= _BV(COM1B1);
  13.  
  14. uint8_t i=0;
  15.  
  16.  while(1)
  17.  {
  18.   if(!(PINB &= _BV(PB0)))
  19.   {
  20.   i = i+5;
  21.   _delay_ms(100);
  22.   }
  23. OCR1A = i;
  24.  }
  25. }

A PWM része megy külön, azzal nincs gond, csak hiába nyomkodom a gombot, nem lesz fényesebb. A gomb a PB0-n van. A felhúzóellenállásra is figyeltem, szóval nem értem, mi lehet a gond.
(#) (Felhasználó 4577) válasza vagnerjazon hozzászólására (») Júl 26, 2010 /
 
Szeretem, amikor valaki nem egyből úgy kezdi, hogy "írjatok egy ilyen meg egy olyan progamot", hanem végre próbálkozik.

A 18. sor legyen ez:
  1. if( !(PINB & (1<<PB0)) )

Ezzel azt vizsgálod, hogy alacsony szinten van-e a PB0, tehát a nyomógombot majd a PB0 és a test közé kell bekötni és be kell kapcsolni az AVR beépített felhúzóellenállását.

A 7. sor felesleges, a 6. helyére:
  1. DDRB = (1<<PB1); // PB1 kimenet


A 7-edik sor után szúrd be ezt:
  1. PORTB | = (1<<PB0); // Felhúzóellenállás bekapcsolása

A felhúzóellenállás a portláb és a Vcc közt van, Atmega8-nál 22-50K körül van az értéke.

A main-ben deklarálj egy változót:
  1. unsigned int loop = 0; // Feleslegesek a negatív számok


Az if így nézzen ki, utána mehet az értékadás a PWM-nek:
  1. if( !(PINB & (1<<PB0)) )
  2. {
  3.         loop++;
  4.         if(loop == 1)
  5.         i = i+5;
  6. }else{
  7.         loop = 0;
  8. }


A 14. sort cseréld le:
  1. unsigned int i;
(#) vagnerjazon válasza (Felhasználó 4577) hozzászólására (») Júl 26, 2010 /
 
Nagyon szépen köszönöm!
A loop-os részt végül nem tettem bele, mert működik nélküle is, viszont azért érdekelne, hogy mi lett volna a célja, mert nem értem. A többit átírtam. Ezek szerint ezeken a helyeken nem használható a _BV(x); típusú módszer?
(#) (Felhasználó 4577) válasza vagnerjazon hozzászólására (») Júl 26, 2010 /
 
Idézet:
„A loop-os részt végül nem tettem bele, mert működik nélküle is, viszont azért érdekelne, hogy mi lett volna a célja, mert nem értem.”

Ilyenkor próbáld meg magadban értelmezni.
A loop változó értéke deklaráláskor nulla. Amikor megnyomod a gombot, egyből hozzáad egyet, vagyis az értéke egy lesz és ha az értéke egyenlő egyel, akkor növeli csak az i-t. Ha felengedted a gombot, akkor újból lenullázódik.
A gombot nem fogod tudni úgy lenyomni, hogy csak egyszer fusson le a végtelenciklusban, hanem folyamatosan pörög, tehát folyamatosan növeli egyel, Te azt írtad, hogy ha nyomogatod a gombot, akkor növekedjen a LED fényereje, tehát a kulcsszó a nyomogatod. A loop-os résszel csak gombnyomásra nő, mindig 5-el az i értéke, nélküle pedig mindig nő, amíg a gomb le van nyomva attól függően, hogy a végtelenciklus hányszor fut le.

Idézet:
„Ezek szerint ezeken a helyeken nem használható a _BV(x); típusú módszer?”

Ezt már nagyon ritkán használják.
Inkább használd ezt, az a neve, hogy shiftelés: (1< Szerintem sokkal átláthatóbb, de én ezt mindig át szoktam írni a szoftverfejlesztés után hexadecimális számokra.

Idézet:
„A többit átírtam.”

Működik?
(#) vagnerjazon válasza (Felhasználó 4577) hozzászólására (») Júl 26, 2010 /
 
Nagyon köszönöm a részletes magyarázatot, már értem. Igen, tökéletesen működik!
Következő: »»   252 / 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