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   243 / 840
(#) TavIR-AVR válasza öregharcsa hozzászólására (») Jún 26, 2010 /
 
A regisztert a chip határozza meg, nem a Bascom.
Valószínű a chipedben nincs ilyen regiszter.
A bascomot javasolt frissíteni, a 11.9.0 kb 1.5 éves!
(#) öregharcsa válasza TavIR-AVR hozzászólására (») Jún 26, 2010 /
 
Atmega8 chip-et használok,az adatlap szerint van GICR regisztere... A BASCOM-ra valóban ráférne egy frissítés
Mivel AVR -ben kezdő vagyok, azért kérdezek ilyen alapdolgokat.
Nem tudom hogy kell érteni [quote]A regisztert a chip határozza meg, nem a Bascom...
Bocs ha nagyon butaságot kérdezek...
(#) sgt válasza echo11 hozzászólására (») Jún 27, 2010 /
 
Idézet:
„" c:/winavr-20100110/lib/gcc/../../avr/include/util/delay.h:90:3: warning: #warning "Compiler optimizations disabled; functions from won't work as designed"”


Ez pedig az időzítőnek a header fájlát hiányolja.

Így teljes, és így nem lesz már warning:
  1. #define F_CPU 8000000
  2.  
  3. #inculde <avr/io.h> // ez alap
  4. #inculde <util/delay.h> // ez pedig a _delay_ms(), és _delay_us() függvény hedaer fájlja


Amúgy ha kíváncsi vagy az időzítő függvényeknek az intervallumára, akkor benne van a header fájlban . Itt van: WinAVR-20100110\avr\include\util\delay.h, vagy üsd bé gugliba.
(#) sgt válasza Topi hozzászólására (») Jún 27, 2010 /
 
Jogos, igazad van. Felé kell írni.
(#) TavIR-AVR válasza öregharcsa hozzászólására (») Jún 27, 2010 /
 
Bascombol 1.11.9.8 demo a legfrisebb, ill a regisztráltból a 1.12.0.0.

A m8def.dat állomány alapján (chipleíró) a GICR régi neve: GIMSK.

Miért kellkézzel írnod a regisztert? Ez az INT1 és az INT0 kezelésért felel, ami a Bascom alaputasításaival is elérhető....
(#) öregharcsa válasza TavIR-AVR hozzászólására (») Jún 27, 2010 /
 
Siker ! A GICR helyett GIMSK-t írva a prg. lefordul, és működik ! Egyébként nem kell valami csoda bonyolult prg.-ra gondolni, két nyomógombbal kigyújtok,majd eloltok egy LED-et.
Utánanézve a GIMSK = &B11000000 tényleg az INT0 és az INT1 aktiválása. Nem tudom a BASCOM milyen alaputasításait lehetne használni..
Köszönöm a gyors segítséget !

(Meg fogom próbálni a BASCOM-ot frissíteni, de úgy néz ki,egyelőre ezzel a verzióval is boldogulok)
(#) TavIR-AVR válasza öregharcsa hozzászólására (») Jún 27, 2010 /
 
Enable INT1
Enable INT0
Enable interrupts

Megszakítások basom alatt
(#) öregharcsa válasza TavIR-AVR hozzászólására (») Jún 27, 2010 /
 
Kösz, kipróbáltam, ahogy írtad, valóban egyszerűbb és logikusabb ! Köszönöm linket, itt tényleg mindent megtaláltam ! ( Ha nem vagyok ilyen lusta, én is rákereshettem volna...) Most megyek a Tavir-AVR-re, és mindent kikukkolok belőle !
Szia !
(#) zsuscsinyo válasza Hp41C hozzászólására (») Jún 27, 2010 /
 
Szia! Ez így nem fog helyesen végbemenni.. Az ha az 'if' feltételkezelés több parancsot hajt végre, akkor { } közé kell tenni, különben csak a közvetlenül utána levőt veszi figyelembe, és ami következik azt már nem.

Így fog kinézni a kód:

  1. if (Mode == 0){      
  2.                
  3.                 sprintf(lcd_buffer1, "Hofok    Tc=%03i", T_disp);
  4.                        
  5.                 sprintf(lcd_buffer2, "Menu%i  Set=%03i", program , T_set[Mode - 1]);
  6.                
  7.         }else{
  8.                 if(Mode == 1 || Mode == 2 || Mode == 3){
  9.                        
  10.                         sprintf(lcd_buffer1, "Tc=%03i Celsius-fok", T_disp);
  11.                        
  12.                         sprintf(lcd_buffer2, "Setpoint=%03i Menu%i", ee_tmprSet, program);
  13.                        
  14.                 }
  15.         }
  16.                
  17.         lcd_gotoxy(0, 0);
  18.        
  19.         lcd_puts(lcd_buffer1);
  20.        
  21.         lcd_gotoxy(0, 1);
  22.        
  23.         lcd_puts(lcd_buffer2);
  24.        
  25.        
  26.        
  27.         OCR1AH = (unsigned char)(pwm_val>>8);        
  28.        
  29.         OCR1AL = (unsigned char)pwm_val;


és a kapcsos zárójel után nem kell pontosvesszőt írni, kivéve, ha tömb értéket adsz meg pl:
  1. uint8_t valtozo[3]={ 0x01, 0x02, 0x03};
(#) echo11 válasza sgt hozzászólására (») Jún 27, 2010 /
 
Kösznöm, így már megy, de azt a bizonyos értéket nem sikerült megtalálnom maximum kísérletezek...
(#) echo11 válasza echo11 hozzászólására (») Jún 27, 2010 /
 
Ja, és például egy egyszerű led villogtató program lefordított .hex- nek mekkora mérete van.Én 10kb-ot látok az lehetséges?
(#) trudnai válasza echo11 hozzászólására (») Jún 27, 2010 /
 
Lehetseges, fugg attol milyen opciokkal forditottal, sot attol is, hogy hasznaltal-e _delay_ms() fuggvenyt! Mivel az alapertelmezesben float (ill. double) tipusu parametert var, es ha csak nem '1'-et adsz meg neki, akkor berantja az egesz float point aritmetikai konyvtarat -- az pedig nagyon-nagy!

Mellesleg a HEX ben binaris, Notepaddel nyisd meg es nezd meg hogy nez ki.
(#) Hp41C válasza zsuscsinyo hozzászólására (») Jún 27, 2010 /
 
Szia!

Ennyiből nem tudom megfejteni,mi is a célja a programrészletnek, a hiba helyére utaltam csak. Mondjuk if nélkül a sornak nem sok értelme van, de ; -vel a végén szintaktikailag helyes...

  1. (Mode == 1 || Mode == 2 || Mode == 3);
(#) herzsolt válasza Hp41C hozzászólására (») Jún 27, 2010 /
 
Ez egy hőfokszabályzó lenne, csak eredetileg az előre definiált gombok vannak benne.
3gomb van a hőfok program átállításra, de én egy gombra szeretném leredukálni. Eddig, amit kipróbáltam annyi tett, hogy le nem nyomot gomb mellett is váltogatta a hőfokot, és a két kijelzési formát.


Az eredeti és a módosított forráskódot csatoltam.
(#) echo11 válasza trudnai hozzászólására (») Jún 27, 2010 /
 
Köszi a választ ki is próbálom, de valahogy nem tudom elképzelni, hogy egy ilyen egyszerű program 10kb-t foglal és az attiny45 flash memóriája csak 4kb. Szóval ez nem fog rámenni.Amúgy a programot egy az egyben Topi cikkjéből másoltam ki, és főleg ezért nem értem, hogy hogy lehet ez...
(#) gtk válasza echo11 hozzászólására (») Jún 27, 2010 /
 
A .hex file merete nem azonos a program meretevel !
Azt nezd meg hogy mikor leforditod mennyi bytetot ir ki.
(#) tokixxl hozzászólása Jún 27, 2010 /
 
Az szeretnem ha tudnatok ajanlani nekem egy konyen megepitheto programozot amivel tudom programozni a atf16v8 .
Koszi elore is
(#) echo11 válasza gtk hozzászólására (») Jún 27, 2010 /
 
Értem...De nem a .hex fájlt másolja be a flashbe? Amúgy ha jegyzet tömbben nyitom meg, akkor nem csak 1 és 0 van, hanem: A,F....ez kezd egyre furábbá válni....
(#) Lucifer hozzászólása Jún 27, 2010 /
 
Üdv mindenkinek!

A problémám a következő:
Upgradeltem az ubuntumat 10.04-re.
Azóta az eeprom olvasó illetve író függvények nem fordulnak le egy linkelési hiba miatt:

  1. undefined reference to `__eerd_byte_m32'


Bármilyen CPU-ra forgatáskor ezt kapom.
Van-e bárkinek bármi ötlete azon kívül, hogy takarítsam le és pörgessek új avr-libc-t?
(#) Sir-Nyeteg válasza echo11 hozzászólására (») Jún 27, 2010 /
 
Pont emiatt HEX! Hexadecimális számokat tartalmaz, azaz 0-tól F-ig.
A méretet fordítás után kiírja a programod. A windows meg a minimális foglalási területet írja ki, ami a féjlrendszer tulajdonsága.
(#) echo11 válasza Sir-Nyeteg hozzászólására (») Jún 27, 2010 /
 
OK! Köszi a választ, tudom hogy idegesítőek a hozzá nem értő emberek hülye kérdései, de csak így lehet valamire jutni.Amúgy most jut eszembe(a hozzá nem ertő emberekről), hogy nem tudja valaki, hogy az avrStudio miért csak a sorszámok és a programon belüli "//" megjegyzések kitörlése után hajlandó lefordítani?
(#) gtk válasza Lucifer hozzászólására (») Jún 27, 2010 /
 
Ha tudod melyik libben van, megadod a forditaskor a lib elereset.
Nem lehet hogy valamelyik globalis valtozot felulirta az upgraddel, es amiatt van? Nezd meg (fejbol nem tudom, elfelejtettem hogy melyik globalis valtozo az pontosan,..)
(#) gtk válasza echo11 hozzászólására (») Jún 27, 2010 /
 
En mar megneztem volna hogy mi az az az Intel HEX formatum. Mindjart latnad is, hogy nem csak a kodot tartalmazza.
(Lehet hogy van akinek tetszik az oldal hosszu kod, de mellekelni ertelmesebb talan.)
(#) novarobot hozzászólása Jún 27, 2010 /
 
Sziasztok.

Tegnap összekötöttem egy ATMEGA88-20PU AVR -t soros porton a számítógéppel, egy buherált szintillesztővel (holnap beszerzek egy MAX 232, vagy egy USB-TTL szintillesztőt).

Ez alapján a mintaprogram alapján dolgoztam Bővebben: Link (mintakód a lap alján) A kódon csak annyit módosítottam (mert nem működött) hogy nem cseréli meg a kis és nagy betűket, hanem közvetlenül azt küldi vissza amit kapott, és csökkentettem BAUDRATE 110 -re.

Ha HyperTerminal -al betűt küldök akkor ugyan azt a betűt vissza is kapom, de ha számot vagy ékezetes karaktert, akkor mindenféle írásjel jön vissza.

Ha az eredeti programot futtatom, akkor nem cseréli meg a kis és nagybetűket, hanem az is mindenféle írásjelet stb-t dob vissza.

Ha az AVR -be beírok egy betűt (vagy a kódját pl "a" vagy DEC"97" vagy HEX "61) teljesen mást kapok, és nem csak a betűt alakítja rosszul, hanem a két HEX érték sem stimmel.

Jelenleg a belső RC-t használom 8MHZ-n (ezért, meg a buherált szintillesztő miatt BAUDRATE 110), de ha ez a baj, akkor a betűket miért küldi vissza helyesen?


Mi lehet a baj ?
(#) Lucifer válasza gtk hozzászólására (») Jún 27, 2010 /
 
Igazából lövésem sincs mit kellene és hova.

Itt bukik:
  1. avr-g++ -L/usr/lib/avr/lib  -o bin/avr.elf .objs/adc.o .objs/global.o .objs/i2c.o .objs/main.o .objs/motor.o .objs/serial.o .objs/servo.o   -mmcu=atmega32  
  2. .objs/motor.o: In function `pidInit':
  3. motor.c: (.text+0x590): undefined reference to `__eerd_byte_m32'

Tehát az avr-g++-al linkelné össze a tárgykódokat?

Az /usr/lib/avr/lib mappa megvan, benne vannak dolgok, eepromra hajazó dolgot nem találtam.

Ha linux alatt tolod csinálsz nekem egy ls -R -t a /usr/lib/avr/lib mappában?
Gyanús nekem, hogy semmi eepromos cucc nincs nekem ott.
(#) Lucifer válasza Lucifer hozzászólására (») Jún 27, 2010 /
 
No némi avrfreaks olvasás után lefordult.
A megoldás:
Az eeprom könyvtár függvényeit az avr-libc a libc.a állományba fordítja be, és ezt kellett a linker (esetemben avr-g++) parancsának végére bigyeszteni. Valószínűleg az van, hogy a /usr/lib/avr/lib mappában a ATTiny2313 és társai libje van a gyökéren. A többi avr libjei külön külön mappában figyelnek. Az Atmega32-é pld a /usr/lib/avr/lib/avr5/libc.a. Ezzel direktben linkelve fordul. Öröm.
(#) Proci_85 válasza novarobot hozzászólására (») Jún 27, 2010 /
 
A kód tuti jól megy, 9600 bauddal kell csatlakozni terminálban. Minden OK a kóddal. Én is használtam, meg prog. laboron ezt használtuk, mikor ismerkedtünk a "nanoboard" nevű csodával
(#) Norberto válasza novarobot hozzászólására (») Jún 27, 2010 /
 
Az aszinkron kommunikáció bizonyos esetekben nagyon érzékeny tud lenni a beállított sebességre. Ezért célszerű mindkét oldalon pontosan beállítani pl. a 9600 baud rate-et (és ehhez mérten, használni az ajánlott, speciálisabb értékű kvarcokat is). Emlékeim szerint azokkal a kódokkal nekem sem volt gondom, mikor mi is NanoBoard-oztunk.
(#) trudnai válasza echo11 hozzászólására (») Jún 28, 2010 /
 
Sot, nem csak attol nagy a HEX, mert binaris helyett hexa szamokkal kodolja a tartalmat, hanem mert mas egyeb informaciokat is tartalmaz, mint pl memoria cim.

Bovebb leiras az Intel HEX formatumrol
(#) echo11 válasza gtk hozzászólására (») Jún 28, 2010 /
 
Köszönöm! Amúgy nem én raktam be azt a nagy kódot.
Következő: »»   243 / 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