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   671 / 838
(#) Kovidivi hozzászólása Jún 6, 2015 /
 
Találtam egy érdekes részt. A PORTA=0x0f-t átírtam PORTA=0xff-re, és bekövetkezett a hibás működés! Ha visszaírom, megint jól megy. Ahányszor módosítom, annyiszor lesz hibás a program.
Ennyi a kód C-ben:
  1. #define F_CPU 8000000UL //8Mhz belső
  2. #include <avr/io.h>
  3. #include <util/delay.h>
  4. int main(void)
  5. {
  6.         DDRC=0xff;
  7.         DDRA=0xff;
  8.         DDRF=0xff;
  9.         DDRD=0xff;
  10.         DDRB=0b11111111;
  11.         PORTA=0x0f;     //amikor 0x0f - akkor jó, ha 0xff, hibás.
  12.         PORTF=0xff;
  13.         PORTC=0xff;
  14.         PORTB|=(1<<PB6);
  15.         PORTB|=(1<<PB5);
  16.         PORTB&=~(1<<PB5);
  17.         while(1)
  18.         {
  19.         }
  20. }


Hibajelenség: PORTB 6. bitje nem 1, pedig mindkét ASM fájlban ott a parancs...

Készítettem a hex-ből asm fájlt, itt van először a működő:
  1. avr0046:  clr    r1           ; 0046 2411
  2.           out    SREG, r1     ; 0047 BE1F
  3.           ldi    YL, 0xFF     ; 0048 EFCF
  4.           ldi    YH, 0x10     ; 0049 E1D0
  5.           out    SPH, YH      ; 004A BFDE
  6.           out    SPL, YL      ; 004B BFCD
  7.           rcall  avr004F      ; 004C D002
  8.           rjmp   avr005F      ; 004D C011
  9. avr004E:  rjmp   avr0000      ; 004E CFB1
  10. avr004F:  ldi    r24, 0xFF    ; 004F EF8F
  11.           out    DDRC, r24    ; 0050 BB84
  12.           out    DDRA, r24    ; 0051 BB8A
  13.           sts    0x0061, r24  ; 0052 9380 0061
  14.           out    DDRD, r24    ; 0054 BB81
  15.           out    DDRB, r24    ; 0055 BB87
  16.           ldi    r25, 0x0F    ; 0056 E09F
  17.           out    PORTA, r25   ; 0057 BB9B
  18.           sts    0x0062, r24  ; 0058 9380 0062
  19.           out    PORTC, r24   ; 005A BB85
  20.           sbi    PORTB, 6     ; 005B 9AC6
  21.           sbi    PORTB, 5     ; 005C 9AC5
  22.           cbi    PORTB, 5     ; 005D 98C5
  23. avr005E:  rjmp   $            ; 005E CFFF
  24. avr005F:  cli                 ; 005F 94F8
  25. avr0060:  rjmp   $            ; 0060 CFFF
  26.  
  27.          .exit

Majd a hibás kód:
  1. avr0046:  clr    r1           ; 0046 2411
  2.           out    SREG, r1     ; 0047 BE1F
  3.           ldi    YL, 0xFF     ; 0048 EFCF
  4.           ldi    YH, 0x10     ; 0049 E1D0
  5.           out    SPH, YH      ; 004A BFDE
  6.           out    SPL, YL      ; 004B BFCD
  7.           rcall  avr004F      ; 004C D002
  8.           rjmp   avr005E      ; 004D C010
  9. avr004E:  rjmp   avr0000      ; 004E CFB1
  10. avr004F:  ldi    r24, 0xFF    ; 004F EF8F
  11.           out    DDRC, r24    ; 0050 BB84
  12.           out    DDRA, r24    ; 0051 BB8A
  13.           sts    0x0061, r24  ; 0052 9380 0061
  14.           out    DDRD, r24    ; 0054 BB81
  15.           out    DDRB, r24    ; 0055 BB87
  16.           out    PORTA, r24   ; 0056 BB8B
  17.           sts    0x0062, r24  ; 0057 9380 0062
  18.           out    PORTC, r24   ; 0059 BB85
  19.           sbi    PORTB, 6     ; 005A 9AC6
  20.           sbi    PORTB, 5     ; 005B 9AC5
  21.           cbi    PORTB, 5     ; 005C 98C5
  22. avr005D:  rjmp   $            ; 005D CFFF
  23. avr005E:  cli                 ; 005E 94F8
  24. avr005F:  rjmp   $            ; 005F CFFF
  25.  
  26.          .exit

Mit lehet ezzel tenni? Köszi.
(#) Kovidivi válasza Lucifer hozzászólására (») Jún 6, 2015 /
 
A melegedés normális, mert LED-eket hajtok soros ellenállással a lábain.
(#) zombee válasza Kovidivi hozzászólására (») Jún 6, 2015 /
 
Nem lehet hogy nem kap megfelelő tápot az IC? Esetleg állítsd 1MHz-re a FUSE biteknél, és kellenek minimum 100nF kerámia kondik a táplábaknál. Ja igen, ha kristályról megy akkor a hidegítő kondik hatványozottan szükségesek. Szerintem olyan nincs hogy "kínai" és rosszul működik, csak olyan ami vagy rendesen működik vagy sehogy sem...
(#) Kovidivi válasza zombee hozzászólására (») Jún 6, 2015 /
 
1MHz-en profi a cucc! 8MHz-en instabil volt. Raktam 100µF-ot a táplábaihoz, előtte csak 47nF volt, 2x, meg az USB tövébe is raktam 100µF-ot, úgy tűnik, megoldotta a problémát (kopp-kopp). Plusz a CKOPT-ot bekapcsoltam, nem tudom, belső órajelnél van-e jelentősége. Minden esetre ártani nem fog. Azért még megfigyelés alatt tartom a cuccot! Köszi mindenkinek a segítséget!
(#) kapu48 válasza Kovidivi hozzászólására (») Jún 6, 2015 /
 
A 2* 47nF eleve kicsi, Kel a 2* 100nF kerámia, és a 100µF nem helyettesíti őket.
Mind kettőnek más a szerepe.

100nF digitális kapcsolások okozta nagyfrekvenciás zajt szűri.
47 µF pedig a hálózati zavarokat szűri. Ha nagyobb, akkor bekapcsoláskor nagyon meg rántja a tápfesz stabilizátort!
A hozzászólás módosítva: Jún 6, 2015
(#) Gj válasza Gj hozzászólására (») Jún 6, 2015 /
 
Egy kicsit elveszett a kérdésem, senki sem tud javasolni semmit?
(#) killbill válasza kapu48 hozzászólására (») Jún 6, 2015 /
 
Idézet:
„100nF digitális kapcsolások okozta nagyfrekvenciás zajt szűri.”
Nem a zajt szűri, hanem az IC labaihoz vezeto tapfoliak (vezetekek) induktivitasa es ellenallasa okozta problemakat kompenzalja. Az IC nagyfrekvencias aramigenyet elegiti ki. A 47µF sem zavart szűr.
(#) Kovidivi válasza kapu48 hozzászólására (») Jún 6, 2015 /
 
Ezek után megjegyeztem örökre szerintem!
(#) zombee válasza Kovidivi hozzászólására (») Jún 7, 2015 /
 
A CKOPT csak kristályos meghajtásra van hatással. Legegyszerűbben úgy lehet elmondani hogy a kristályoszcillátor kimenetét TTL jelszintre kapcsolja, ezzel stabilizálja azt. Bizonytalan tápellátásnál vagy nem túl tiszta áramkör esetén nagyon hasznos, de az IC ezzel a megoldással kicsit többet fogyaszt. Én a "végső" termékekben mindig bekapcsolom, így a megrendelőnél 100% hogy stabil lesz. 8MHz-es hajtásnál lehet hogy a 2x100nF nem lesz elég, én 3x220(-470) nF -ot javasolnék (3 tápláb pár van!) plusz egy kisebb elkót valahol az IC közelében.
(#) zombee válasza Gj hozzászólására (») Jún 7, 2015 /
 
A hiba konkrétan azt jelenti hogy nincs kapcsolat az IC-vel. Adok két képet, hátha ez jobban segít megérteni a dolgokat, egyébként esélyes hogy pontosan ugyanaz áll rajta mint a színes ábrádon, amit - szerintem - képtelenség értelmezni. Én jobban szeretem ha a vezetékeknek neve is, és nem "piros-zöld valamiket" kell ide meg oda kötögetni. Ha már itt tartunk: amennyiben nem működne, először a tápokat, majd a RESET vonalat ellenőrizném. Utóbbinál +12V körüli feszt kell mérned amikor programozna, de az is lehet hogy olyan gyors lesz hogy multiméterrel nem fogsz sokat látni.
A hozzászólás módosítva: Jún 7, 2015
(#) freechat hozzászólása Jún 7, 2015 /
 
Hogyan lehetne a lehető legegyszerűbben programozni egy ATTiny45-öt?
Van itthon laptop és raspberry pi B+-om.
Utóbbira gondoltam, de mindenhol csak full-extrás és így nagyon bonyolult megoldást találtam.
Egy egyszerű kis villogóra lenne csak szükségem. (annyi, hogy a villogás véletlenszerű, de ezt le tudom programozni akár asm-ben, c-ben,bascom-ban bármiben)

Azt már megtaláltam, hogy a GPIO-n keresztül lehetne és, hogy a 45-ösnek, ha jól látom nem okoz gondot a 3.3V-os probléma.
A Bascom-al még egy BIN fájlt is elő tudtam állítani, gondolom ezt kellene valahogy rávarázsolni a chip-re.
Se debug se semmire nincs szükségem, sőt, ha magyarul le tudja valaki írni a lépéseket le is programozom
(#) Bell válasza freechat hozzászólására (») Jún 7, 2015 /
 
Egy ilyen lehet olcsó és egyszerű megoldás.
(#) freechat válasza Bell hozzászólására (») Jún 7, 2015 /
 
Pontosan ezt szeretném elkerülni, hogy ne kelljen még n+1. dolgot is megvennem.
Mondjuk úgy nem látom mi akadályozza meg a raspberry-t abban, hogy fel tudja programozni a kis 45-ösömet .
Annyit látok, hogy ezzel sokan foglalkoznak, de csak amolyan opensource módon vagyis nincs összehangolva. Mindenki megcsinálja saját magának, de egyik sem működik (ez-az hiányzik stb...).
Vagyis meg lehet oldani csak nincs egy összefoglaló jól működő megoldás.
(#) killbill válasza freechat hozzászólására (») Jún 7, 2015 /
 
Ha fizikailag ossze tudod kotni a RPI-t az AVR-rel, akkor azt programozni mar nem nehez. Raadasul le van irva az AVR adatlapjaban a Serial Programming fejezetben, hogy hogyan kell programozni. En az AVR aradlap alapjan csinaltam nullarol AVR egetot. Igaz, az adatlap angolul van.
(#) freechat válasza killbill hozzászólására (») Jún 7, 2015 /
 
Az összekötés nem probléma, igazából az angol adatlappal van problémám. (azzal sem teljesen, de azért nem szeretném tönkretenni egyik alkatrészem sem, ezért kértem segítséget).

Szóval GPIO-val össze tudom kötni és tudok úgymond jelet küldeni bármelyik lábra. 3.3V-on megy az egész, de ez, ha jól tudom Tiny45-nél nem probléma.

Megpróbálom leírni ide amit eddig kiderítettem:
1. rákötöm a MISO-MOSI-RESET-SCK lábakat a GPIO-ra valahova.
innentől tudom állíta a GPIO-kat, hogy 0 vagy 1 legyen.

2. RESET-0, SCK-0
3. várok 20 ms-t
4. átköldök bitről bit-re egy ilyen sort: $AC $53 $00 $00 - ezzel aktiválom a "programozást"
5. és jön a bin fájl szintén bitről bitre.

Valószínűleg kihagytam 1-2 lépést illetve nem világos, hogy a küldés hogyan zajlik:
beállítom a MiSO-t
SCK->1
SCK->0
újra az elejétől?
Vagyis amikor az SCK 0-ról 1-re lép akkor olvassa be a MISO-t?
(#) Gj válasza zombee hozzászólására (») Jún 7, 2015 /
 
Ugyan az, mint az atmeles ábrán.
A tápok rendben vannak, de a reseten nincs +12V, végig +5V van.
Hogyan tovább?
(#) freechat válasza killbill hozzászólására (») Jún 7, 2015 /
 
Sikerült megcsinálni, bár nem ennyire "lowlevel"-ben.
Mindenesetre rögzíteni fogom valahova, mert 4 órám ment el arra, hogy kikeressem stb..stb...
(#) Sick-Bastard válasza freechat hozzászólására (») Jún 7, 2015 /
 
1. az AVRt csatlakoztasd a Pi-hez
2. húzd le az AVR Reset lábát a földre (logikai 0)
3. várj legalább 20ms-et
4. küld el a(z) Programming Enable parancsot
5. olvasd ki a Signature byte-okat
- ha a kapott byteok nem egyeznek meg az adatlapon szereplővel, akkor a programozást szakítsd meg
ha stimmel, akkor mehet az írás, vagy olvasás:
6. (írás esetén) A Pages Buffer feltöltése a Load Program Memory Page, High byte és a Load Program Memory Page, Low byte parancsokkal. A Buffer mérete az attiny45 esetében 64 byte-os.
7. Amikor a Buffer megtelt, akkor jön a Write Program Memory Page parancs.
8. egy kis delay min 4,5 ms vagy Poll RDY/BSY parancs használata (még nem használtam)

6-7-8 as utasítások ismétlése, amíg át nem megy a hex vagy bin file

Load Program Memory Page és a Write Program Memory Page parancsoknál ügyelni kell a megfelelő memória címek használatára!


Ezután jönne a flash visszaolvasása és ellenőrzése.


Ez nem a 100%-os lépésről lépésre leírás. Ez csak irányadás.


Kérdés:
A Raspberryn miért GPIO lábakkal, bitbanging-el küldenéd át a filet, ha van benne dedikált SPI interface?

FONTOS:
Az küldés sebessége 12MHz-es AVR órajel alatt max. 1/4-e(3Mhz), 12MHz felett, max. 1/6-oda(2MHz) lehet.
(#) freechat válasza Sick-Bastard hozzászólására (») Jún 7, 2015 /
 
Közben rájöttem, hogy van MISO-MOSI stb... láb és véletlenül sikerült is mindent lefordítanom avrdude-vel pedig már át is töltöttem úgyhogy reszket az összes egér a padláson
Köszönöm a segítséget.
(#) freechat válasza Sick-Bastard hozzászólására (») Jún 7, 2015 /
 
Tovább gondolva a dolgot, ha jól láttam az ATMega programozása még bonyolultabb a 3.3 és 5v probléma miatt.
Azon gondolkodtam nem lehetne-e 4N25-el kiváltani ezt a problémát.
A reset,miso,mosi,sclk rákötni a 4N25-re amikkel kapcsolgatják az 5V-ot (ami szintén van raspberry-n).

A képen megpróbáltam lerajzolni mire gondoltam, így végül is a reset-el együtt 4 db 4n25 kell.
A kérdés, hogy kibírja ez ezt a sebességet vagy esetleg le lehet-e csökkenteni annyira, hogy működjön.
(na meg, hogy mennyire hülyeség a rajzom )
(#) mrbini hozzászólása Jún 7, 2015 /
 
Sziasztok!
A segítségeteket szeretném kérni a következő problémában.
Megépítettem ezt az órát, de a szegmenseket nem a rajz szerinti sorrendben kötöttem a kijelzőre. A forrásban át írtam, hogy jó legyen a sorrend. Majd fordítom beégetem és megy az óra csak nagyon halvány a kijelzés és az óra beállítása is lehetetlen mert túl gyorsan peregnek a számok.
Tudna segíteni valaki mi lehet a gond?
(#) zombee válasza freechat hozzászólására (») Jún 7, 2015 /
 
Sajnos a 4N25 nagyon-nagyon lassú hozzá, a határfrekije kb. 100kHz körül van.
Én 6N137-et javasolnék, az 10MHz-et is bír és nem utolsó dolog a belső Schmitt-trigger sem.

Ha csak a tápfeszt akarod illeszteni akkor lehet hogy egy optós megoldás teljesen felesleges,
és a helyedben valamelyik tranzisztoros megoldást alkalmaznám. A kedvencem ez:
(#) freechat válasza zombee hozzászólására (») Jún 7, 2015 /
 
A 100 kHz annyira nem probléma, ha működik a dolog.
Sőt, ha jól emlékszem akkor 10.000-es baud rate volt amit ma használtam. Igaz nem tudom, hogy ezt 1-4-8 bitesre értik, de még ha 8 bit akkor is teljesen elfogadható volt sebesség.
A tranzisztoros megoldást azért nem szeretném, mert itt egy 10.000 Ft-os kütyüről van szó amit nem szívesen ront el az ember. A 4n25 bekötése egyszerű, de egy kezdőnek (mint én) egy tranyó bekötése bonyolult. Valahogy soha nem úgy néznek ki az alkatrészek ahogy a neten látom. A chippek egyszerűek van X lába és könnyű kiszámolni mit hova kötsz.
Na meg elsődleges szempont a minél kevesebb alkatrészből való elkészítés.
(#) zombee válasza freechat hozzászólására (») Jún 7, 2015 /
 
A 6N137-el garantált a legkevesebb alkatrész, igazából a LED-hez kell előtét ellenállás, meg felhúzó a kimenetre.
(#) pont válasza freechat hozzászólására (») Jún 7, 2015 / 1
 
Legegyszerűbben ezzel: Bővebben: Link A bascommal is működik...
(#) freechat válasza pont hozzászólására (») Jún 7, 2015 /
 
eBay-en még nem vásároltam, de valóban ez a legolcsóbb, ha új eszközt akarsz venni.
(itthon miért nem lehet kapni? ), csak azok a nagyon drága cuccok vannak....., illetve nem tudom mennyire védi a laptopot, de egy 200.000-es cuccot nem igazán tennék tönkre, szóval jobb a raspberry igaz azt sem szívesen, de a kettő között van különbség.
Egyébként most úgy csinálom, hogy Bascom-ban írom a programot és fejlesztettem pár kis programocskát amivel fordítás után a raspberry azonnal ki is írja a chip-re úgyhogy végül is kényelmes

Jelenleg itthon halomban áll a 4n25 és ezért gondoltam erre a megoldásra, de ezek szerint nem halott ötlet
(#) kapu48 válasza mrbini hozzászólására (») Jún 7, 2015 /
 
Szerintem elkerülte a figyelmedet ez a sor a megjegyzésben:
* Clock : 16Mhz Kvarc /8-os órajel osztó fuse bit = 2Mhz valós belső órajel

És rosszul állítottad be a fordítóban az órajelet.
(#) mrbini válasza kapu48 hozzászólására (») Jún 7, 2015 /
 
Biztos, hogy nem ez a baj, mert rendesen számolja a mp-ket.
Csak a kijelző fényereje nagyon gyenge.
Biztos, hogy a programban van a hiba. A panelt teszteltem proci nélkül. Úgy jó a kijelző fénye.
(#) Kovidivi válasza mrbini hozzászólására (») Jún 7, 2015 /
 
Mivel multiplexálva vannak a kijelzők, ezért a fényerő is kisebb, mint ha csak simán bekapcsolsz egy szegmenst. Ez normális működés. Megpróbálhatod a soros ellenállásokat csökkenteni. Nyugodtan számolhatsz 20mA-rel, esetleg kicsivel többel is. Az áramot érdemes mérni is, nem csak számolni LED nyitófeszültség alapján.
A hozzászólás módosítva: Jún 7, 2015
(#) mrbini válasza Kovidivi hozzászólására (») Jún 7, 2015 /
 
Ezt értem, de szerintem akkor is elég gyenge mert csak sötétben dereng kicsit.
És a gombok még akkor is peregnek rendesen.
Következő: »»   671 / 838
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