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   303 / 840
(#) Andre90 válasza sgt hozzászólására (») Jan 29, 2011 /
 
A project beállításoknál már definiáltam a processzor sebességet 8000000-ra, szóval nem azzal volt a gond.
(#) kiborg válasza Ricsi89 hozzászólására (») Jan 29, 2011 /
 
Szia!

Ez ASM-ben is használható ?
Mert nekem nem akarja elfogadni.
Az SBI és a CBI utasítások nem fogadják el a szintaktika miatt
Vélemény ?
Kiborg
(#) sgt válasza kiborg hozzászólására (») Jan 29, 2011 /
 
ASM-ben is van ilyen. Húúúú de régen is volt .

  1. .cseg
  2. ...
  3.  
  4. .def tmp=r21 ; példa


Hirtelenjében nem tudom hogy lehet-e ezt portokra is, de van egy érzésem hogy lehet.

SBI, CBI:

  1. cbi PORTB, 5
  2. sbi PORTC, 3


Miért nem C-zel?
(#) kiborg válasza sgt hozzászólására (») Jan 29, 2011 /
 
Szia!

Köszi, ez, így nekem is működik:
.def temp = r16
.equ LED_PORT=PORTB ;Kimeneti port a LED-nek
.equ LED_PIN=PINB ;LED port lábak értéke
.equ L_R=0
.equ L_G=1
.equ L_B=2

sbi led_port,l_r
cbi led_port,L_G

Csak amit kérdeztem, abban az volt a vonzó, hogy nem kellett portot és bitet (led_port,l_r) megadni, hanem egy változóra hivatkozott csak.

Miért nem C-zek ? Mert még nem fogtam hozzá. Ahhoz sokat kellene tanulnom, szinte mindent az alapoktól. Így hamarabb megírok egy progit, és legalább pontosan tudom, hogy mit csinál(nem a fordító kreál egy kódot) a procim. (JTAG-el nyomon követem esetenként). Igazából ennyi, de azért szívesen kacsintgatnék a C felé. Csak pl hogy konfiguráljak egy Timer0-t, meg ilyen alap dolgoknál akadtam el. Jó lenne pár példaprogram amiből a fordulatokat,szokásokat el lehet lesni, és hogy mit miért.
Hallottam olyanról, hogy és-elni kell a kimeneteket,mert egyébként billegnek (vagy mi) és ilyen apróságok,ami kis buktatókat adnak. ASM-ben nincs ilyen, hiszen bitszinten játszok.

Kiborg
(#) Fizzy válasza kiborg hozzászólására (») Jan 29, 2011 /
 
Üdv!

Egy külföldi fórumon van egy nagyon jó leírás a timerekre: Bővebben: Link
Én ebből értettem meg a dolgokat, szerintem remekül leírja.

Remélem segítettem!
Üdv, Fizzy
(#) Reggie válasza kiborg hozzászólására (») Jan 29, 2011 /
 
Az adatlapon ott vannak a C ill. Assembly nyelvu peldakodok a periferiakhoz(a timerhez is).
(#) Reggie válasza Andre90 hozzászólására (») Jan 29, 2011 /
 
A hiba nem a forditaskor keletkezett, hanem valahol a scriptben. A makefile futasa megszakad a hiba helyenel, es mint latod neked az utolso avr-objdump -ig hibatlanul lefutott.
(#) Reggie válasza sgt hozzászólására (») Jan 29, 2011 /
 
Egyszeru. A master szabadon levo i/o labaira bekotod a slave-k slave select labait. Amelyikkel kommunikalni akarsz, annak a slave selectjet 0-ra rakod, a tobbi 1. Ha vege a kommunikacionak akkor celszeru mind 1-re rakni.
(#) Reggie válasza mario1111 hozzászólására (») Jan 29, 2011 /
 
Az adatlapon "Multi-processor Communication Mode" bekezdes alatt le vannak irva a lepesek, hogy mit kell csinalnia a kodnak. Konkretan nincs pelda kod hozza, de ez alapjan mar konnyu megcsinalni (nem sokban ter el a sima UART kezelestol).
(#) labu01wx hozzászólása Jan 29, 2011 /
 
Sziasztok!

Megpróbáltam írni/olvasni egy Mega644 eepromját a regiszterei segítségével. Az olvasás sikerült elsőre, de írni nem tudom, pedig mindent úgy csináltam, ahogy az adatlapon van. A kimeneten az
  1. eeprom_write_byte()
által írt 6-os jelenik meg a későb "regiszteresen" 3-as helyett.

A segítséget előre is köszönöm!

eeprom.c
    
(#) Reggie válasza labu01wx hozzászólására (») Jan 29, 2011 /
 
Probald ki ezt.
(#) labu01wx válasza Reggie hozzászólására (») Jan 29, 2011 /
 
Szia!

C függvényekkel megy az eeprom írás, használtam is a kódban, de szeretném ha az alap módszerrel is menne.
(#) Reggie válasza labu01wx hozzászólására (») Jan 29, 2011 /
 
A header fajlbol kilesheted, hogy hogyan lehet programozni. (Vagy az adatlapon ott van az assembly, vagy C pelda).
Az eeprom kezeles ele tegyel kesleltetest, mert ha nincs BOD, akkor lehet hogy alacsony a tap az elejen, es hibazhat az irasnal. Ez csak akkor problema, ha a main elejen mar rogton eepromot akarsz irni.

UI: Esetleg a main vegere nem artana egy vegtelen ciklus.
(#) Reggie válasza labu01wx hozzászólására (») Jan 29, 2011 /
 
Mondjuk ahogy a kodod elnezem jonak tunik, esetleg csinalj DUMP-ot, hatha a C optimalizacio hianya miatt van valami gond, sose lehet tudni. (Az olvasaskor nem muszaj varni, az EEDR-ben azonnal megjelenik az ertek).
(#) labu01wx válasza Reggie hozzászólására (») Jan 29, 2011 /
 
Szia!

Nem tudom, hogy mi az a DUMP, de kipróbáltam más optimalizációval(O2, 03, Os) és ezekkel működik.

Tudom, hogy nem kell várni az olvasás előtt(írja is az adatlap), de már annyi mindenre gondoltam, hogy mégis beleraktam a kódba.

Mégegyszer köszönöm a segítséget!
(#) Reggie válasza labu01wx hozzászólására (») Jan 29, 2011 /
 
A DUMP a leforditott kod visszafejtve(assemblyre), aminek a segitsegevel meg tudod nezni, hogy megfelelo kod keletkezett-e.
Nincs mit.
(#) sgt válasza Reggie hozzászólására (») Jan 29, 2011 /
 
Köszönöm! Több eszközöm egyenlőre nincs, de mindenféleképpen kifogom próbálni.
(#) mario1111 válasza Reggie hozzászólására (») Jan 29, 2011 /
 
Köszönöm a segítséget. Az is lehet,h majd szoftverből oldom meg valami egyedi módon, hogy ne kelljen master.
(#) sgt válasza kiborg hozzászólására (») Jan 29, 2011 / 1
 
Szaktársam olyan hogy képtelen C-ben programozni. Asm-ben szinte bármit megtud írni . Gyak vezérek is hidaltak hogy nem volt hajlandó C-ben írni . Anno az első uC-s programjainkat asm-ben kellett írnunk. Mind atmega, mind pic terén ez volt. Buborék rendezéstől kezdve, számológépig, kingiht rider effektusig.

Kényelmesebb lesz majd C-ben ügyködni.

TIMER0-al való szimpla LED villogtatás:

  1. #define F_CPU 1000000UL     //util/delay.h-nak jelezzük, hogy mekkora a freki, de ezzel nem állít semmi, ettől még lehet 2MHz
  2.  
  3. #include <avr/io.h>         //avr/io.h=m16def.inc-el csak itt automatikusan megy nem kell külön jelezni melyik uC
  4. #include <avr/interrupt.h>  //ez tartalmazza az ISR makrókat (megszakításokat)
  5. #include <util/delay.h>    //időzítés _delay_us(), és _delay_ms() függvényeket tartalmazza
  6.  
  7. ISR(TIMER0_OVF_vect)     //megszakítási vektor TIMER0 értelemszerű, OVF - overflow vagyis akkor fog ide ugrani (megszakadni a program futás) ha túlcsordult
  8.         {
  9.         PORTB^=1;                       //PORTB^=1 = PORTB=PORTB^1   ^ - kizáró-vagy kapcsolat
  10.         TCNT0=200;                      //ismét be kell írni a számlálóba mert túlcsordulás után 0x00 érték lesz benne
  11.         }
  12.  
  13. void init(void)                 //külső függvény nincs bemenő se kimenő paraméter, csak szimplán lefut
  14.         {
  15.         DDRB=(1<<PB1);          //DDRB=(1<<PB1) = DDRB=0b00000010
  16.  
  17.         TCCR0=(1<<CS00)         //előosztást beállítjuk
  18.                  |(1<<CS02);
  19.  
  20.         TCNT0=200;                      //feltöltjük a számlálót
  21.  
  22.         TIMSK=(1<<TOIE0);       //engedélyezzük a TIMER0-ról jövő megszakítást
  23.  
  24.         sei();                  //engedélyezzük hogy a megszakítás hívást
  25.         }
  26.  
  27. int main(void)
  28.         {
  29.         init();         //a fentebbi külső függvényt meghívjuk, ami lefut és utána megy tovább a program
  30.  
  31.         int i=1;        //int -> szám i nevű lesz a változó aminek az értéke 1
  32.         for(;;)         // végtelen ciklus, ez most csak azért kell hogy soha ne legyen vége a programnak, és így tud majd "megszakadni"
  33.                 {
  34.                 i+=1;   //i+=1 = i=i+1
  35.                 }
  36.         }


Különböző megszakításoknak mik a nevei ITT találhatod.

Sok sikert a tanuláshoz .
(#) Reggie válasza mario1111 hozzászólására (») Jan 29, 2011 /
 
Meg lehet oldani, de azert jok ezek a hardveres dolgok, mert leveszik a terhet. Nem szabad eltantorodni, neki kell esni azt menni fog. Nem nehezebb, mint kitalalni egy megbizhato szoftveres arbitraciot.
(#) kiborg válasza sgt hozzászólására (») Jan 29, 2011 /
 
Melyik suli, milyen szak ?
Írtam már pár dolgot ASM-ben. (Volt olyan progi, hogy optimalizálnom kellett,mert nem volt elég a 16k egy Mega16-ban).
Majd megpróbálom megtanulni.Idővel, de még hatékonyabb vagyok ASM-ben.
Kiborg

ui: azért köszi mindenkinek a biztatást és segítséget.
(#) sgt válasza kiborg hozzászólására (») Jan 29, 2011 /
 
ÓE-KVK-MAI-F1-en tanulok. Azaz Óbudai Egyetem - Kandó Kálmán Villamosmérnöki Kar - Műszer-automatizálás Intézet - Elektronikai-, orvostechnikai műszerek és tesztelés modul.

16k asm-ben . Jesszus mit csinált az a program?

Mindig is hatékonyabb lesz az asm, akár mennyire is intelligensre csinálják a complielert. Csak teszem azt megírod az adott programot egy hét alatt, míg C-ben 1-2 nap, ami azért ha nem házi dolog akkor komoly problémát jelent. De am C-ben is lehet asm-et írni, igaz erős megkötésekkel, de lehet.

Prog tanárunk nagyon elborult elme. 17 ezer soros asm-et írt pic-re.

Másik tanár aki óraadó, szintén nagy koponya. Elsők között volt Magyarországon akik uC-t programoztak, egészen pontosan DSP-t. Ő is mindig asm-ben írta a programjait, de csak azért mert mintavételezésnél nincs sok idő két minta között
(#) trudnai válasza sgt hozzászólására (») Jan 29, 2011 /
 
Idézet:
„Mindig is hatékonyabb lesz az asm, akár mennyire is intelligensre csinálják a complielert.”


Ez attol fugg, hogy az illeto mennyire ert az asm-hez... es attol is mennyire a C-hez... C-ben is lehet hatekonyan irni, ha ismered a forditok lelki vig=lagat akkor segitheted az optmalizalast -- sokszor kerdezik is, hogy optimalizalashoz ertesz-e.

De igen, az egyedi dolgok mindig hatekonyabbak, egy gyarban osszeallitott motor sohasem lesz ugyanolyan mint egy versenyre felkeszitett....
(#) Spumifater hozzászólása Jan 30, 2011 /
 
Szerevusztok!

Lassan már 2-3 hete olvasgatom az itt leírtakat.
Mindössze elindulnom kellene valahogyan.
Azt olvasgatom,hogy az Atmega8 az egyik olyan tipus, amit kezdetnek ajánl a többség.
Ha valamelyikőtök megtenné, hogy egy minimum kapcsolás nyák-rajzát megadná, amin a lehetőséghez képest a legtöbb funkció kipróbálható!
Még egy prózai kérdés. Otthonosan mozogtok ebben a témában. Biztos tudja valaki, hogy Budapesten hol lehet a legolcsóbban beszerezni az ic-t.
Segítségeteket köszi!

Még valami! Nem feltétlen ez a típus érdekelne, csak minimum ennyi i/o!
(#) sgt válasza trudnai hozzászólására (») Jan 30, 2011 /
 
Persze ez evidens, hogy asm-ben, és C-ben mennyire járatos az egyén, és attól függ. Én sajna egyáltalán nem vagyok járatos a complier lelkivilágában .
(#) sgt válasza Spumifater hozzászólására (») Jan 30, 2011 /
 
ITT őket ajánlom, de mindenféleképpen hívd fel előtte őket hogy mi van raktáron, tudtommal itt a legolcsóbb az egész országban. Amikor először mentem oda én is dip tokos atmega8-at akartam venni, de csak atmega16 volt dip tokos közül. De nem bánom, mert az atmega16-nak normálisan vannak kihozva a kivezetések. Am az avr-ekkel egy nagy bajom van, alig lehet kapni, és ahol lehet ott is csak a népszerűbbeket . pl. anno az ATtiny2313-ért fél várost végig kellett járnom.

Lényegében szinte mindegy melyiket veszed. Ugyanúgy kell programozni. Csak tudásban/láb számban/memóriában különböznek. Az atmega16-ot javaslom neked, sok láb, sok tudás. Analóg komparátor, ADC, SPI, TWI, USART, EEPROM, 3 TIMER, BOOT LOADER stb..

Sok sikert!
(#) luxmanpower hozzászólása Jan 30, 2011 /
 
Hello! Arra lennék kíváncsi hogy a WinAVR vagy AVRStudiot ajánljátok jobban? Eddig az előzőt használtam de most szemezgetek az AVR studioval. Melyiket érdemesebb használni?
(#) Topi válasza luxmanpower hozzászólására (») Jan 30, 2011 /
 
Esetleg mindkettőt, ha AVR-t akarsz programozni. Nem alternatívája igazából egymásnak.
WinAVR a windows rendszerre portolt avr-gcc, az AVRStudio meg amibe ez modulként beleépül.

Persze AVRStudio nélkül is lehet használni, de kezdésnek abszolút nem ajánlott a parancssoros kézzel írt makefile-al fordítás...
(#) luxmanpower válasza Topi hozzászólására (») Jan 30, 2011 /
 
(#) Reggie válasza sgt hozzászólására (») Jan 30, 2011 /
 
Egy ido utan nem art azt sem ismerni. Pl. a gcc-avr32 fordito egy utasitast rendszeresen felreforditott es ha dolgozni kell, akkor kenyszerul az ember sajatkezuleg kijavitani a forditot a hivatalos patch megerkezteig.
Következő: »»   303 / 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