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   306 / 840
(#) Topi válasza vagnerjazon hozzászólására (») Feb 5, 2011 /
 
A cikknél a driverek között ott a 64 bites driver. Nekem kiválóan megy. Eredeti Win7 Home Premium x64.

avrcdc_inf.zip\avrcdc_inf\vista64 (ez w7 64 is)
(#) vagnerjazon válasza Topi hozzászólására (») Feb 5, 2011 /
 
Köszönöm, majd megpróbálom, egyenlőre 32 bit alatt vagyok. Bár nekem úgy tűnt, mintha nem a driverrel lenne baja hanem a digitális aláírást hiányolja. Mindegy, majd kipróbálom.
(#) joco53 hozzászólása Feb 5, 2011 /
 
Sziasztok!
Olyan Veszprémi fórumtársat keresek aki segiteni tudna nekem egy Atmega8-as microcontroller felprogramozásában. Programozó az van (avr doper),csak még ezt a fajta controllert nem programoztam
Köszönöm:Joco
(#) bzolitb válasza joco53 hozzászólására (») Feb 5, 2011 /
 
Szia, nem veszprémi vagyok, de ha már a főrumba írtál, akkor segítek. Szóval ajánlani tudom az Nyolc lábbal AVR cikksorozatot, amely nagyon szépen leírja hogy kell programozni, és az avr doper bemutató oldala is leírja, hogy hogy kell felprogramozni egy avr-t. Ha pedig a szoftveres programozásra gondoltál, azt is szépen bemutatja a 8 lábú cikksorozat. Jó olvasgatást kívánok hozzá.
(#) joco53 válasza bzolitb hozzászólására (») Feb 5, 2011 /
 
Köszönöm a válaszod.Átolvasgatom cikket.Igazából
ezektöl a fuse bit állitgatásoktól félek,nem igazán tiszta még elöttem ez a része.Ez idáig PIC programozással foglalkoztam.Véleményem szerint egyszerübb programozni őket,de sajnos most egy olyan feladat van,ahol Atmega8-as van az áramkörbe.
Még egyszer köszönöm szépen a segitséged
(#) Ricsi89 válasza joco53 hozzászólására (») Feb 5, 2011 /
 
AVRStudio-ban viszonylag egyszerű állítani mindent, mert rendes szöveges kiírás van, nem bitenként kell mindent beállítani. Órajelet is egy listából ki lehet választani és ha az ember nem nyom véletlenül félre, akkor gond nem lehet.
(#) kovacsj hozzászólása Feb 5, 2011 /
 
Sziasztok!

Eclipse + AVR plugin + JTAG ICE mkII. Debian Linux.
Az mkII-vel nem tudom beírni a programot a kontrollerbe. Míg parancssorból a -Pusb működik, Eclipse alól ugyanez nem megy. Tud valaki erre megoldást?
(Az STK500-zal be tudom tölteni a programot az Atmega16-ba.)

Másik kérdésem az lenne, hogy az .elf-et át kell alakítani, .hex-szé, vagy így is beírható? (Ez utóbbi esetben valamit nem jól csináltam, mert nem jó a program.)
Ha át kell alakítani akkor az avr-objcopy-val kell?
(#) Spumifater hozzászólása Feb 6, 2011 /
 
Hali!

Találtam egy "valamit"!
link:Bővebben: Link
A gond csak annyi, hogy hadilábon állok az idegen nyelvekkel. Google fordítoja számomra nem érthető modon adta vissza.
Az oldal Link

Segítsen valaki a megértésében!


Még egy kérdés: Felhasználhato-e programletöltésre, ha van már bootloader a chipben?
Köszi
(#) Reggie válasza kovacsj hozzászólására (») Feb 6, 2011 /
 
Hat igazsag szerint ezekkel a dolgokkal anno annyit szivtam en is linux alatt, hogy mar tobb mint 6 eve konzolban programozok avr-t, a mcedit-et hasznalva szerkesztonek (Midnight Commander editor). Az avrdude nekem nem ment kozvetlen elfbol, ezert irtam ra egy bonyolultabb agyon include-olt Makefile rendszert, ami vegeredmenyben a kulonbozo teruleteket kulonvalasztotta binaris alomanyokka. A lenyeg a lenyeg igy tudod kinyerni az elf-bol a szukseges dolgokat:

  1. $(OBJCOPY) -R .fuse -R .lock -R .eeprom -I elft32-avr -O binary $(TARGET_NAME) $(TARGET_FLASH_IMAGE)
  2. $(OBJCOPY) -j .eeprom -I elft32-avr -O binary $(TARGET_NAME) $(TARGET_EEPROM_IMAGE)
  3. $(OBJCOPY) -j .eeprom -I elft32-avr -O binary $(TARGET_NAME) $(TARGET_EEPROM_IMAGE)
  4. $(OBJCOPY) -w -s -j .fuse -I elf32-avr $(TARGET_NAME) $(TARGET_FUSES_HEX)
  5. $(Q)echo -n "0x" > $(TARGET_LFUSE)
  6. $(Q)echo -n "0x" > $(TARGET_HFUSE)
  7. $(Q)echo -n "0x" > $(TARGET_EFUSE)
  8. $(Q)cat $(TARGET_FUSES_HEX) | cut -b 1-2 >> $(TARGET_LFUSE)
  9. $(Q)cat $(TARGET_FUSES_HEX) | cut -b 3-4 >> $(TARGET_HFUSE)
  10. $(Q)cat $(TARGET_FUSES_HEX) | cut -b 5-6 >> $(TARGET_EFUSE)


ahol:
OBJCOPY = $(Q)avr-objcopy
TARGET_NAME = az elf file ami keletkezett
TARGET_FLASH_IMAGE = az a fajl ahova a binaris flash memoria tartalom kerul
TARGET_EEPROM_IMAGE = az a fajl ahova a binaris eeprom tartalom kerul
TARGET_FUSES_HEX = az a fajl ahova a fuse bitek kerulnek hexadecimalis formaban (de nem intel hex csak sima hex)
TARGET_LFUSE = az a fajl ahova az lfuse erteke kerul hexaban (pl 0xFF)
TARGET_HFUSE = az a fajl ahova az lfuse erteke kerul hexaban (pl 0xFF)
TARGET_EFUSE = az a fajl ahova az lfuse erteke kerul hexaban (pl 0xFF)

ha Q = @ akkor az outputra nem kerul ki a parancs, ha Q = akkor kikerul.
(#) kovacsj válasza Reggie hozzászólására (») Feb 6, 2011 /
 
Köszönöm szépen!

Abban reménykedtem, hogy menni fog Eclipse alól is, de ha nem, akkor marad a konzolos itt is. Vagy az AVR Studio. Ott mindig jó, bár a Windowst csak erre használom, semmi másra.
(#) Reggie válasza kovacsj hozzászólására (») Feb 6, 2011 /
 
Ne add fel, lehet hogy fog menni, en mar nagyon sok eve nem probalkoztam, azota sok minden valtozhatott.
(#) Reggie válasza Spumifater hozzászólására (») Feb 6, 2011 /
 
Ez egy usb-virtualis soros port illesztesnek a leirasa. Akkor hasznalhato letoltesre, ha tamogatja a bootloader(valoszinuleg nem), de ehhez tudni kene, hogy mifele bootloaderrol is van szo...
(#) Spumifater válasza Reggie hozzászólására (») Feb 6, 2011 /
 
Köszi!

Igazából az usb-s kommunikáció érdekelne laptop és avr között.
Persze "szájbarágva" kellene, mert totál kezdő vagyok.
(#) vagnerjazon válasza vagnerjazon hozzászólására (») Feb 6, 2011 /
 
Kipróbáltam, azzal sem ment, de már mindegy, mert visszaköltöztem 32 bitre.
(#) vagnerjazon hozzászólása Feb 6, 2011 /
 
Ez a kód miért nem akar menni ATMega8535-ön? A Fizikus cikkei alapján ollóztam össze, amelyekben ATMega8-ra van írva, de a fordító nem jelez hibát. Igazából a LED-et villogtatja is, de ha küldök neki valamit sorosan, akkor úgy marad a LED ahogy éppen volt, de nem küldi vissza az adatot, és itt vége. A LED lefagyásából arra következtettem, hogy addig jó, hogy megkapja az adatot, és megvan a megszakítás, de nem tudja visszaküldeni(próbáltam úgy is, hogy ne küldje vissza, hanem csak annyi legyen a megszakításban, hogy olvassa be, de úgy is ugyanez van). Miért?
  1. //atmega8535 soros próba
  2.  
  3. #define F_CPU 7372800UL  // rendszer orajel: 7.3728 MHz
  4. #define USART_BAUDRATE 9600  // soros kommunikacio sebessege: 9600 bps
  5. #define UBRR_ERTEK ((F_CPU / (USART_BAUDRATE * 16UL)) - 1)  // UBRR
  6.  
  7. #include <avr/io.h>
  8. #include <avr/interrupt.h>
  9. #include <inttypes.h>
  10. #include <util/delay.h>
  11.  
  12. void KonfigUART()
  13. {
  14. UBRRL = UBRR_ERTEK;
  15. UBRRH = (UBRR_ERTEK>>8);
  16. UCSRC |= (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1);
  17. UCSRB |= (1 << RXEN) | (1 << RXCIE) | (1 << TXEN);
  18. }
  19.  
  20. char UARTAdatFogad()
  21. {
  22. while(!(UCSRA & (1<<RXC)))
  23. {
  24. }
  25. return UDR;
  26. }
  27.  
  28. void UARTAdatKuld(char data)
  29. {
  30. while(!(UCSRA & (1<<UDRE)))
  31. {
  32. }
  33. UDR=data;
  34. }
  35.  
  36. int main(void)
  37. {
  38. DDRB = (1<<PB0);
  39.  
  40. KonfigUART();
  41. sei();
  42.  
  43. while(1)
  44. {
  45. PORTB |= _BV(PB0);
  46. _delay_ms(500);
  47. PORTB &= ~_BV(PB0);
  48. _delay_ms(500);
  49. }
  50.  
  51. }
  52.  
  53. ISR(USART_RXC_vect)  // RX interrupt, ezek az utasitasok futak le ha adat erkezik a TX vonalon
  54. {
  55. char data;     
  56. data = UARTAdatFogad();  // A berekezo bajt fogadasa
  57.  
  58. UARTAdatKuld(data);
  59. }

Szerk.: most látom, hogy ha mindent kiveszek a megszakításból, akkor is lefagy.
(#) bzolitb válasza Spumifater hozzászólására (») Feb 6, 2011 /
 
Szia!

Ha kezdő vagy, akkor szerintem ne pont ezzel a projektel kezd a tanulást, hanem valami könnyebbel. De tudok ajánlani más alternatívát, amivel ugyan úgy megtudod valósítani az usb avr kommunikációt. Az FTDI chipjei közt nézz körül pl. az FTDI232RL megfelelő ilyesmire. Ez a chip biztosítja, hogy a pc usb portját átalakítsa az avr-nek UART kommunikációvá. Szóval az avr annyit lát az egészből, mint egy UART kommunikációból.
(#) sikolymester válasza Spumifater hozzászólására (») Feb 6, 2011 /
 
Az alábbi oldalakat ajánlom akkor neked, amennyiben ezeket alaposan átolvasod, akkor nem kellene gondod legyen.

AVR CDC232
LUFA
LibUSB
USB szabvány
(#) sikolymester válasza vagnerjazon hozzászólására (») Feb 6, 2011 /
 
A driver nincsen aláírva digitálisan, mivel az nem kevés pénzbe kerül. A 64 bites windows pedig biztonsági okokból nem engedi a nem aláírt driverek telepítését, mivel a legtöbb oprendszer összeomlást a hibás driverek okozzák.
Ellenben a windows indításánál az F8 billentyűt nyomkodva feljön egy indítási menü, ahol van egy olyan bejegyzés, hogy digitális aláírás megkövetelésének megtiltása (vagy valami ilyesmi).
(#) sgt válasza vagnerjazon hozzászólására (») Feb 6, 2011 /
 
  1. char UARTAdatFogad(void) //void kimaradt!
  2. {
  3. while(!(UCSRA & (1<<RXC))); // csak szimplán pontos vessző
  4. return UDR;
  5. }
  6.  
  7. void UARTAdatKuld(char data)
  8. {
  9. while(!(UCSRA & (1<<UDRE)));
  10. UDR=data;
  11. }


Így szokták ha nem akarunk semmi egyebet se csinálni a while-al.

Am én a helyedben a megszakítást megcserélném. Vagyis timer0-val villogtasd a ledet, és main-ben legyen az uart kommunikáció, és ellenőrzés céljából amit kap az avr azt kitenném egy portnyi ledre.
(#) vagnerjazon válasza sgt hozzászólására (») Feb 7, 2011 /
 
Köszönöm, de itt az a gond, hogy atmega8-cal ez tökéletesen működik, atmega8535-tel viszont nem. És nem tudom mit kell átírni, hogy jó legyen. Nézegettem az adatlapot, de nem értem el vele semmit(lehet, hogy rossz helyen néztem, meg azért ennyire még nem tudok angolul sajnos).

sikolymester: Ezt kipróbálom majd, hátha beválik, köszönöm.
(#) vagnerjazon válasza sikolymester hozzászólására (») Feb 7, 2011 /
 
Kipróbáltam, csak az a baj, hogy hiába jó, ha újra indítom, és akkor nem állítom be, akkor megint nem jó. Kár, hogy nem ugyanúgy tölti be mindig. Azért köszönöm.
(#) trudnai válasza sgt hozzászólására (») Feb 7, 2011 /
 
A 'void' es a pontosvesszo nyilvan csak formai szepsegek -- pontosvesszo helyett en megis inkabb a kapcsos zarojeleket preferalom, hiszen ugy lehet latni, hogy nincs a ciklunak magja. Sot, lehet akkor oda egy megjegyzest is tenni, hogy nem kell semmit sem csinalni a ciklus magjaban -- es akkor meg olyan hiba sem lehet, hogy a pontosvesszo lemarad veletlen, es akkor a kovetkezo sor automatan vegrehajtodik, es nyilvan ha faradt az ember, akkor nehez kiszurni a pontosvesszo hianyat (hisz a hianya hibat nem okoz).

Na mindegy, ezek helyett en inkabb azt kifogasolnam, hogy nincs timeout betervezve, azaz ha a feltetel nem teljesul akkor az idok vegezeteig ott varakozik. Emiatt en mindig valami hasonlot szoktam alkalmazni:

  1. char UARTAdatFogad(void) //void kimaradt!
  2. {
  3.     unsigned tOut;
  4.  
  5.     // max varakozas 1 mp!
  6.     for ( tOut = 1000; --tOut; delay_ms(1) )
  7.         if (UCSRA & (1<<RXC) ) {
  8.             break;
  9.         }
  10.     }
  11.  
  12.     if ( 0 == tOut ) {
  13.         // itt lehet ;ekezelni mi tortenjen ha nem jott meg idoben az adat
  14.         return 0; // jelezzuk a hibat felfele?
  15.     }
  16.  
  17.     return UDR;
  18. }


Most a tobbi reszet a logikanak nem neztem!
(#) bzolitb válasza bzolitb hozzászólására (») Feb 7, 2011 /
 
Helló!

Leformáztam, újratelepítettem a win xp-met, és továbbra is gond van a doper programozóval. Felismeri, hogy új eszköz van rádugva, utána kiírja, hogy telepítve van az eszköz, és utána pedig az eszközt nem lehet felismerni szöveg jön a buborék ablakban, és ismeretélen eszközként látszik.... Innentől nem hiszem, hogy a pc-vel lenne a probléma, de az meg kizárt, hogy 2 programozó is ugyan akkor ugyan úgy hibásodik meg. Valakinek valami ötlete?

Már én is csak arra tudok gondolni, hogy a 3,6V-os zenerek a hibásak, ugyanis csak az okozhat hibát az usb kommunikációban, vagy legalábbis nagyobb az esélye, mint hogy az avr belső szoftvere sérül meg.
(#) Ricsi89 válasza bzolitb hozzászólására (») Feb 7, 2011 /
 
A pc-nek nem csak szoftveres oldala van, hanem hardveres is. Másik gépben megy a programozó?
(#) bzolitb válasza Ricsi89 hozzászólására (») Feb 7, 2011 /
 
Megy másik gépen. Hárdveres oldalt hogy teszteljem le?
(#) vagnerjazon válasza trudnai hozzászólására (») Feb 7, 2011 /
 
Kipróbáltam, és megszakítás nélkül, úgy, hogy a főprogram folyton beérkező adatra vár, és azonnal visszaküldi, úgy jó az UART. De ha már kell a megszakítás akkor nem. Pedig ha jól néztem az adatlapot, ennek ugyanannak kell lennie atmega8535-nél, mint atmega8-nál.
De akkor vajon miért nem megy?
(#) sgt válasza vagnerjazon hozzászólására (») Feb 7, 2011 / 1
 
Én tudom miért , (most jöttem rá).

ISR makrók ha ISR-ezel előtt érdemes itt megnézni hogy hogy is van pontosan a név.

Atmega8 -> ISR(USART_RXC_vect)
Viszont
Atmega8535 -> ISR(USART_RX_vect)

Most már menni fog.
(#) Fizikus válasza sgt hozzászólására (») Feb 8, 2011 /
 
Epp most akartam megnezni az ATmega8 es az ATmega8535 megszakitasok kozotti kulonbseget, de latom mar megeloztel!
(#) vagnerjazon válasza sgt hozzászólására (») Feb 8, 2011 /
 
Nagyon köszönöm, már működik! Jó kis oldal amit linkeltél, még kellhet máskor is, köszönöm!
(#) Topi válasza vagnerjazon hozzászólására (») Feb 8, 2011 /
 
Én ezeket a neveket általában a header-ből veszem ki. Első fordításnál a kiválasztott uC-nek megfelelő .h-t automatikusan belinkeli. Azt megnyitom és ott vannak benne a nevek
Következő: »»   306 / 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