Fórum témák
» Több friss téma |
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
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:
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ő:
Majd a hibás kód:
Mit lehet ezzel tenni? Köszi.
A melegedés normális, mert LED-eket hajtok soros ellenállással a lábain.
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...
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!
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
Egy kicsit elveszett a kérdésem, senki sem tud javasolni semmit?
Idézet: 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. „100nF digitális kapcsolások okozta nagyfrekvenciás zajt szűri.”
Ezek után megjegyeztem örökre szerintem!
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.
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
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
Egy ilyen lehet olcsó és egyszerű megoldás.
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.
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.
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?
Ugyan az, mint az atmeles ábrán.
A tápok rendben vannak, de a reseten nincs +12V, végig +5V van. Hogyan tovább?
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...
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.
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.
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 )
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?
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:
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.
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.
Legegyszerűbben ezzel: Bővebben: Link A bascommal is működik...
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
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.
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.
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
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. |
Bejelentkezés
Hirdetés |