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   793 / 837
(#) Massawa hozzászólása Ápr 16, 2018 /
 
Én is segitséget keresek. Egy AVR ATmega328P modult programozok. Amikor elöször a Dragonhoz kapcsoltam minden normálisan müködött. Betöltöttem egy félig kész programot, ami ugy ahogy müködik is. ( teljesen elfelejtettem, hogy ezen a kütyün csak ISP port van és azon nem lehet debuggolni, eddig többnyire JTAG-l programoztam hasonlo szerkezetet. Az ISP-n keresztül akartam összerakni a programrészeket, ami sajnos nem müködik).
A baj, hogy a betöltés ota a Dragon nem ismeri fel a chipet, a portok még szabadon vannak, azaz nincs rajtuk semmi aktiv jel. A kimenet (soros kommunikacion át) egy LED sort hajt meg, ami világit is ahogy kellene, de igy is marad.
Azota, ha megprobalom a Dragonnal összekapcsolni, az már nem tudja a Signaturet kiolvasni, igy kommunikálni sem. Az ISP portokon PB3,4,5, PC6 nincs jel. A kommunikacios freki 125 kHz. Semilyen Lock Bits nincs használva. Amikor a Dragon összekapcsolodik a modullal kialszik a piros LED és csak a zöld világit. Ilyenkor még hibajelentés nincs. Ha megprobálom kiolvasni a Signaturet akkor jön a hibajelentés, hogy nem jo az ISP kommunikacio a Dragon meg az AVR között.
Egy másik modult szo nélkül kiolvas, azaz nagyon valoszinü, hogy a beirt kod okozza a konfliktust.
Nem használok sem külsö kristályt, sem egyébb extra dolgot.
A proci müködik, mert felgyujtja a LED sort, de mintha ott megragadna, és a törölni/átirni sem engedi a kodot.
Van valami ötlet mit kezdhetek ezzel? Van még néhány modulom, de nem akarom azokat programozni, mig nem tudom a hiba okát.
Sajnos ez a modul ilyen formában már nem létezik, igy ha más 328P modult kell használni akkor át kell épiteni a szerkezetet, ezért vagyok egy kicsit gondban.
Kösz!
(#) Massawa válasza Massawa hozzászólására (») Ápr 16, 2018 /
 
Amiota betöltöttem a kodot ezt jelzi ki a Fuse Biteknél (Avr Studio 4), és nem tudom semilyen kommunikáciora rávenni.

capture.png
    
(#) Ivan93 válasza Massawa hozzászólására (») Ápr 16, 2018 /
 
Szia! A fuse biteket véletlenül nem állítottad el? Lehet letiltottad az ISP feltöltést vagy a reset lábat. Utóbbira reagál? A képen a kérdőjel tapasztalatom szerint csak annyit jelent, hogy nem tud kapcsolódni, ez lehet hardveres hiba is (nincs csatlakoztatva), nem feltétlenül a letiltott feltöltést jelenti. Még egy tipp, próbáld lejjebb állítani a kommunikáció frekvenciáját.
(#) Massawa válasza Ivan93 hozzászólására (») Ápr 16, 2018 /
 
Szia

Ezt már mind végigzongoráztam. a Fuse bitekhez nem szoktam nyulni ( most sem) mert eddig nem igen kellett semmihez. A hardware jo volt ( az elsö letöltést elfogadta) és a program egy bonyolultabb széria kod el is indult lehet, hogy annak a végén maradt valami ami zavart okozott, csak hát nem tudom igen kinyomozni, mert nem tudom léptetni a kodot ésnem tudok ujat se betölteni.
A frekivel lementem 100 Hz-ig de nem segitett. (125 kHz-n töltöttem be a kodot).
Ami érdekes, hogy a C4-s porton most 10 ms impulzusok vannak a jo modulon ( nincs benne ez a program) viszont nincs, ami valoszinü, hogy jo is mert az adja a CLK-t arra széria kommunikáciora ami a LED-t kezeli.
A resetre reagál, de érdekes modon. Ha megnyomom a resetet (C6) megállnak az impulzusok a C4-n. Ha kikapcsolom meg vissza, akkor viszont megjelennek.
A hozzászólás módosítva: Ápr 16, 2018
(#) Ivan93 válasza Massawa hozzászólására (») Ápr 16, 2018 /
 
Sajnos nincs több ötletem, remélem mások tudnak majd segíteni.
Idézet:
„ez a modul ilyen formában már nem létezik, igy ha más 328P modult kell használni akkor át kell épiteni a szerkezetet”
Ezt egyébként hogy érted? Az IC tokozása változott meg, vagy az cserélhető a panelon? Mert végső esetben leforrasztod az IC-t és teszel rá egy másikat, így maradhatna a hardver.
(#) Massawa válasza Ivan93 hozzászólására (») Ápr 16, 2018 /
 
Nem, csak a mechanikai kivitel illetve a modulra szerelt alkatrészek igy már nem kaphatok, én meg ehhez készitettem az egész fogado berendezéset ( 4-5 gépre valo NYÁKokat, stb) az IC-t lehet, hogy ki lehet cserélmi, de elöbb tudnom kéne miért döglött meg, ha egyáltalán. Szerintem nem ment tönkre, mert hajtja a LED displayt, csak nem tudom változtatni a kodot ill kinyomozni, hogy miben akadt meg.
(#) ics36 válasza RoliNyh hozzászólására (») Ápr 16, 2018 / 1
 
a .dep könyvtárat létre kell hozni. Nálam ott van, ahol a C file-ok.
(#) Massawa válasza Ivan93 hozzászólására (») Ápr 17, 2018 /
 
Egy kicsit nyomozgattam. A chipbe berakott program sajnos egy zárt hurokban fut. Okozhatja ez, hogy nem programozhato?. Nem tudom megállitani a hurkot.
A RESETre mintha megállna a program, de az SPIEN továbbra is szürke, benne a kérdöjellel.
(#) Zekageri hozzászólása Ápr 17, 2018 /
 
Sziasztok! Egy kis segítséget szeretnék kérni. Egy arduino uno-val dolgoztam és egy NodeMCU ESP8266-al hoztam össze egy webes felületet. Az UNO-n futott a fő program ami egy RFID-s beléptető rendszer volt , ahol a tagokat és minden egyebet feldolgoztam , majd az RFID-n bejövő adattól függően szóltam az ESP-nek sorosan hogy mit írjon ki a webes felületre. A helyzet az hogy van egy T-bird 3 asom egy Atmega 128A MCU-val. Az arduinon lévő MCU pedig Atmega328P-volt. A T-bird-re szeretném átírni az arduinós programot , viszont nem tudok standard C-ben programozni teljesen. A legnagyobb problémám a Baud Rate beállítással van inkább. Most Atmel Studio 7-ben rátaláltam egy olyan opcióra hogy az arduinó kódomat bele tudom illeszteni és befordítja magának C-be, amit aztán elvileg rá tudok tölteni az Atmega128A-ra. Viszont amikor rárakom a T-Bird 3 as lapot a gépre , az atmel studio 7 nem tud rácsatlakozni. Próbáltam AVR studió 4 ben , ott rátudtam tölteni egy alap programot ami C-ben volt írva. Viszont Atmel Studió 7 ben nem jön létre a kapcsolat. Megvan a "befordított" arduinó program , hiba nélkül lefordítja , viszont amikor tölteném rá a T-Birdre , kiválasztom hogy STK500 és Atmega128A , aztán a portot amin van , és ki írja hogy " Unable to connect to tool STK500 (COM4)". Valaki tudna valami megoldást mondani? Esetleg ha több információra van szükség , vagy a programra akkor szivesen megosztom.
(#) Kovidivi válasza Zekageri hozzászólására (») Ápr 17, 2018 /
 
Atmega128 és Arduino nem passzolnak össze! Vagy ezt megoldottad? "Unable to connect to tool STK500 (COM4)" - ez teljesen más problémára utal. Ki se tudja olvasni az AVR típusát. Az alapok rosszak, a kommunikáció sem működik.
(#) RoliNyh válasza ics36 hozzászólására (») Ápr 17, 2018 /
 
De jó, és ezt a program miért nem tudja elintézni? (Nyilván a kérdés a fejlesztőknek szól nem neked).

Na de valami még mindig nem kóser...

Program1:
  1. //Próba projekt
  2. //LED villogó
  3.  
  4. #include <avr/io.h>
  5. #include <util/delay.h> // a szóközt ki kell venni a < > jelek mellől, a fórummotor miatt...
  6.  
  7. //void kesleltet()
  8. //      {
  9. //      for(uint8_t i=0; i<10; i++)
  10. //              {
  11. //              _delay_ms(200);  
  12. //              }
  13. //      }
  14.  
  15. int main(void)
  16.         {
  17.         DDRD=0xFF;
  18.         while(1)
  19.                 {
  20.                 PORTD=0x00;
  21. //              kesleltet();
  22.                 PORTD=0xFF;
  23. //              kesleltet();
  24.                 }
  25.         }

Hibaüzenet1:
Idézet:
„> "make.exe" all

-------- begin --------
avr-gcc (WinAVR 20100110) 4.3.3
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Size before:
/bin/sh: avr-size: command not found

Creating load file for EEPROM: main.eep
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" \
--change-section-lma .eeprom=0 --no-change-warnings -O ihex main.elf main.eep || exit 0
/bin/sh: avr-objcopy: command not found

Creating Symbol Table: main.sym
avr-nm -n main.elf > main.sym
/bin/sh: avr-nm: command not found
make.exe: *** [main.sym] Error 127

> Process Exit Code: 2
> Time Taken: 00:00”

Mi az az Error 127?

Program2:
  1. //Próba projekt
  2. //LED villogó
  3.  
  4. #include <avr/io.h>
  5. #include <util/delay.h> // a szóközt ki kell venni a < > jelek mellől, a fórummotor miatt...
  6.  
  7. void kesleltet()
  8.         {
  9.         for(uint8_t i=0; i<10; i++)
  10.                 {
  11.                 _delay_ms(200);  
  12.                 }
  13.         }
  14.  
  15. int main(void)
  16.         {
  17.         DDRD=0xFF;
  18.         while(1)
  19.                 {
  20.                 PORTD=0x00;
  21.                 kesleltet();
  22.                 PORTD=0xFF;
  23.                 kesleltet();
  24.                 }
  25.         }


Hibaüzenet2:
Idézet:
„> "make.exe" all

-------- begin --------
avr-gcc (WinAVR 20100110) 4.3.3
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Size before:
/bin/sh: avr-size: command not found


Compiling C: main.c
avr-gcc -c -mmcu=atmega16 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=./main.lst -std=gnu99 -MMD -MP -MF .dep/main.o.d main.c -o main.o
main.c:8: warning: function declaration isn't a prototype

Linking: main.elf
avr-gcc -mmcu=atmega16 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=main.o -std=gnu99 -MMD -MP -MF .dep/main.elf.d main.o --output main.elf -Wl,-Map=main.map,--cref -lm

Creating load file for Flash: main.hex
avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock main.elf main.hex

Creating load file for EEPROM: main.eep
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" \
--change-section-lma .eeprom=0 --no-change-warnings -O ihex main.elf main.eep || exit 0
/bin/sh: avr-objcopy: command not found

Creating Extended Listing: main.lss
avr-objdump -h -S -z main.elf > main.lss
/bin/sh: avr-objdump: command not found
make.exe: *** [main.lss] Error 127

> Process Exit Code: 2
> Time Taken: 00:01”

A fügvénydeklarációval is van valami baja, de mi?
És a 127 -es hiba az megint ott figyel...

(Amúgy a hangszóró jár a megoldásért...)
(#) RoliNyh válasza RoliNyh hozzászólására (») Ápr 17, 2018 /
 
És ha már itt tartunk, ez nem írja ki, hogy az adott program mennyi tárhelyet és RAM -ot foglal az adott prociban, és mennyi szabad erőforrás áll még rendelkezésre?
(#) Ivan93 válasza Massawa hozzászólására (») Ápr 17, 2018 /
 
A legtöbb mikrovezérlős program egy hurok, ez nem lehet baj. Már csak azért sem, mert a programfeltöltés reset állapotban történik. A programozó földre húzza a reset lábat, és így tölti be a programot (meghatározott protokoll szerint).
(#) Massawa válasza Ivan93 hozzászólására (») Ápr 17, 2018 /
 
Akkor halvány fogalmam sincs mi és miért kapcsolodott ki a SPIEN ami miatt a Dragon nem látja már a procit...
(#) rolandgw válasza RoliNyh hozzászólására (») Ápr 18, 2018 /
 
Túlbuzgó víruskeresőre tippelek. Valamit kikapott az exe fájlok közül.
(#) RoliNyh válasza rolandgw hozzászólására (») Ápr 18, 2018 /
 
Telepítés közben nem szólt, hogy úgy lett volna. Mindenesetre úgy néz ki, nem szereti az ékezetes karaktereket a telepítési útvonalban. Uninstaláltam, aztán telepítettem egy sima ékezetes karakterek nélküli mappába, onnan megy rendesen...
(#) rolandgw válasza ics36 hozzászólására (») Ápr 18, 2018 /
 
A makefile hozza létre a .dep-et, nem neked kell.
(#) RoliNyh válasza rolandgw hozzászólására (») Ápr 18, 2018 /
 
Persze így, hogy az útvonal már rendben van, igen...
(#) nagy_david1 hozzászólása Máj 15, 2018 /
 
Szép esét mindenkinek!

Nem is tudom hol kezdjem. Én inkább HW terén érzem otthon magam de szükségem volt egy kontrollerre egy programmal amire megkértem egy ismerőst. A programot gyorsan meg is írta de mivel ő elég magas szinten programozik (java, phyton, C# stb) ezért arduinot használt. Szóval ő nem igazán szokott hozzá a registerek "piszkálásához".
A gond a következő. Én a kis projektem az adatlap (atmega328p) utáni árammal számoltam ami sehogy sem passzol a valósággal. A kontroller az arduino bootloderrel és semmi más programmal, belső oszcillátorral, 5V táppal 8MHz-en ~8,2mA-t, 1MHz-en ~3.2-5mA-t és 128kHz-en ~2mA-t fogyaszt. Ezek az értékek a FUSE bitek modósításával voltak mérve és nagyon eltérnek az adatlapban szereplő értékektől (~50-500%-ban). Az összes periféria aktiválva (legrosszabb esettel akartam számolni, hogy hátha kijön) kb 1,2mA többletfogyasztást jelent ami még mindig hozzáadva az alapfogyasztáshoz nagyon kevés a mért értékekhez viszonyítva. Az érdekes, hogy ahogy a feszültséget ejtem az áram nagyon drasztikusan esik, drasztikusabban mint az adatlapi görbén (vagyis nekem így tűnik, nem lineárisan), persze még így is nagyon távol áll az ottani értékektől. A tápfeszültséget nem módosítanám, főleg addig míg nem értem mi van a háttérben. nem szerteke HW módosítást alkalmazni míg SW-ből orvosolható. Jelenleg az "altatást" is kizárnám mert 1) az adatlapi áram, vagy legalább közeli érték megfelelne 2) jelenleg nincs egy felköltést támogató bemenet az interrupt portra kötve. Kizárva, hogy más panelen levő modulok fogyasztanának mivel már odáig jutottam, hogy egy új kontrollert egy tesztpanelre téve volt tesztelve. Rákerestem pár kulcsszóra de nem kaptam választ, remélem nem síklottam át rajta.

Valaki találkozott már ezzel a problémával? Előre is köszönöm.
Kellemes estét.
(#) Szasza9668 hozzászólása Máj 15, 2018 /
 
Sziasztok!

Avr hex file-t vissza lehet alakítani .bas-ra? Bascom ide-t használok mert a c az nekem magas. Át kellene írnom egy program lábkiosztását.

Üdv!
(#) Kovidivi válasza nagy_david1 hozzászólására (») Máj 15, 2018 /
 
Arduinon ott vannak a LED-ek, a soros-usb konverter IC fogyasztása is. Ezeket lekötötted?
Én Arduino nélkül tesztelgettem, hozta az adatlapi értékeket!
A hozzászólás módosítva: Máj 15, 2018
(#) nagy_david1 válasza Kovidivi hozzászólására (») Máj 15, 2018 /
 
Mint írtam, a kontroller külön pcbn is volt mérve, magára. 2 kontrollerrel is tesztelve volt.
(#) Kovidivi válasza nagy_david1 hozzászólására (») Máj 15, 2018 /
 
Nekem egyszer rajtamaradt a programozó kábel, és emiatt szívtam. Lehúzva jöttek a megfelelő áram értékek.
(#) nagy_david1 válasza Kovidivi hozzászólására (») Máj 16, 2018 /
 
Ezzel kezdem a méréseket jóideje mivel párszor én is megjártam, szóval sajnos kizárva. Nem tudom mi okozhatja. Esetleg valami tipp mivel kezdhetném? Az arudiono bootloder ami lehetővé teszi a soros interfészen való programozást okozhatja ezt? A tipikus aktív fogyasztást ilyen sokkal meghaladva? Nem konfigurált port okozhat ekkora eltérést? Bár ahogy tudom az arudino alapbol a nem használt portokat felhúzó ellenállással bemenetre teszi. Sajnos mint írtam időhiány miatt az én programozó tudásom nagyon alap. 100%, hogy SW és pontosan mérem de mint írtam rám maradt a kiderítése. Vajon megérné írjak egy "Hello World" kódot és lecseréljem az arduinó bootlodert? Mit ajánlotok kezdőknek C-ben való programozásra? GCC, WinAVR? Pár nap alatt szeretnék írni egy Hello World programot de úgy, hogy tudom "tiszta".
(#) Kovidivi válasza nagy_david1 hozzászólására (») Máj 16, 2018 /
 
A bootloader csak az első mp-ben fut, utána a te programod veszi át a szerepet. A lábak alap esetben magas impedanciás bemenetek, felhúzó ellenállás nélkül. Képet mutathatnál, ami eszembe jutott, azt már leírtam.
Én Atmel Studio-t használok.
(#) alita hozzászólása Máj 17, 2018 /
 
Szervusztok !

Mint kezdő a témában kérdésem,hogy az ATMEGA 8-at csak a D9-E1 fusebit-el lehet
programozni vagy a következő kijelölésekkel is:WDTON,SPIEN,CKORT,BOTSZ 1,BOTSZ 0,
BODLEVEL,BODEN.
(#) Szasza9668 hozzászólása Máj 18, 2018 /
 
Sziasztok!

Avr lábát szeretném beolvasni, hogy magas vagy alacsony állapotban van-e.
Van erre valami útmutató valahol?
(#) rascal válasza Szasza9668 hozzászólására (») Máj 18, 2018 /
 
Pl. innen megnézheted: Microchip. Amilyen AVR-ed van, annak letöltheted az adatlapját és annak az I/O Port fejezete részletesen taglalja a témát. Még minta program részlet is van benne.
Rég néztem bele, de szerintem itt a 8 lábú cikkekben is találsz pár egyszerű példát rá: Bővebben: Link
(#) Massawa válasza Szasza9668 hozzászólására (») Máj 19, 2018 /
 
Ott is minden ott van, ahol a kolléga irta. Meg van egy sereg ezzel kapcsolatos oldal is (AVR kezdöknek stb) ahol az ilyen alapinfirmáciok nagyon jol le vannak irva.
(#) pont válasza Szasza9668 hozzászólására (») Máj 19, 2018 / 1
 
Ennek önmagában nem sok értelme van, mert hogy mihez kezdesz a beolvasott értékkel az a lényeg. De bármilyen programnyelv kb. második pársoros példa programja bemutatja ezt. Tehát például BASCOM-ban az inputként definiált port értékét hozzárendeled egy változóhoz:

config pinb.1 = input
dim a as bit

a=pinb.1
Következő: »»   793 / 837
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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