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
Ez nem jó hír. Az IC most 7MHz környékén jár. Igazából amég a hangot generálom vele más dolga éppenséggel nem igen lesz, így nem feltétlen jelent problémát. De ha tudsz szebb/jobb megoldást javasolni arra természetesen vevő vagyok! Mint írtam, csak ismerkedek az ATMega8-al..
Nézd, fejszámoltam:
Mondjuk egy A hang 440 Hz-en szól, ha ebből "szinusz" szerű hangot akarsz kiadni, akkor ezt még legalább 20 részre illik tovább osztanod. 20x440=8800 azaz minden 1ms alatt 9-szer kell megváltoztatnod a PWM értékét. 7 MHz alatt erre még van is esélyed, de 1 MHz-nél már 2 PWM állapot között marad 113 ciklusod! Ez a 113 ciklus akkor megy, ha az interrupt tiltva van. C programozók tudják, hogy mit zabál egy interrupt AVR alatt. A hozzászólás módosítva: Feb 27, 2013
Ha semmi szükséged jó minőségre, a 7 MHz tökéletes lesz.
Egy AVR mod player projektben már általában 8-10 bites DAC-ot használnak, azzal meg a WAV játszás is menni fog.
Szia!
Itt találsz példát: szinusz generátor Ha vissza követed a linket, azt hiszem meg van angolul is. Nagyon szép szinuszt lehet generálni. Igaz, határokon belül. De HF-alkalmazásra mindenképpen elég. Végül is a kvarc értékét is, lehet még növelni. Ha megnézed a végén az oszci képét, látható a tripla R-C tag után az emitterkövetőn kifejezetten szép a jel. Ajánlom az oldal végig bogarászását, mert tanulságos.
Ezzel az a problémám, hogy a pdf választ ad, hogy hogyan kell 1700 Hz-es jelet szépen kiadni.
Ahhoz választasz RC szűrőt, az oszcillátort 9.6 MHz-re valahogy bevarázsolod, mindezt persze hardverből. AVR alatt a szoftveres megoldások nekem szimpatikusabbak, ha már úgyis "kéznél van" egy számítógép. Egyébként itt is látszik, hogy 1 MHz-ből 200 Hz-es szinuszt lehet PWM-mel még normálisan megcsinálni. Szerintem a DAC annyiban egyszerűbb, hogy nem kell RC szűrő hozzá, így 10 Hz-től 10 kHz-ig bármi simán megy és 400-ért már kapsz 8 biteset. De a döntés nagyon függ a feladattól.
Köszönöm a linket! Keresgéltem én is a neten, hogy hogyan kellene elindulnom. Találtam több lehetőséget is, többek közt ezt itt. Ettől bonyolultabb gyakorlatilag nekem nem is kell, DTMF generáláshoz ez épp elég. Fogtam hát, csináltam egy feszültség osztót, ahogy javasoltátok egy 1K-s és egy 2,2-es ellenállásból és arról megy a jel egyenesen a mikrofon bemenetre. Az ATMega mellett van egy 7,3728MHz-es kvarc és lényegében semmi más. Átnéztem a linkelt oldalon látható forrást és bár az ATtiny45-re íródott, úgy vettem észre nem igazán kell semmit módosítanom, hogy az ATMega8-on is működjön. Így egy az egyben felírtam a programot, levettem a programozó csatiját és halljuk... Sajnos nem a várt "dallamos" sipolót kaptam, hanem egy csattogó hangot. Fel is vettem, mp3-ban meghallgatható itt. Mit kellett volna módosítani? Első tippem, hogy az időzítések nem stimmelnek...
Ok, a pontos órajel beállítása és az optimalizáció bekapcsolása a fordításnál megoldotta a gondot!
Szia!
Örülök, hogy örülsz! Ha jobban beleszeretnél merülni az AVR-s signal-generator kérdésbe, úgy itt van még egy iromány nem kevés link-el. Olvasni való legalább egy hónapra. Arra mindenképpen jó, hogy tudjuk mit és hol keressünk.
Szép jó reggelt!
Az volna a problémám. hogy az avr bemenetein folyamatosan 0 értéket produkál, hiába a felhúzó. mega32a pina 0-5=output pina 6-7=input VccA, GNDA bekötve. Felhúzó ellenállás bekötve, próbáltam 4,7k és 1k is. Lehet az a probléma, hogy egyszerre nem lehet be és kimenet is egy adott port? Alább bemásolom a programkódot hátha az segít. $regfile = "m32def.dat" $crystal = 4000000 $hwstack = 32 $swstack = 8 $framesize = 24 Declare Sub Percbeallit Declare Sub Orabeallit Declare Sub Napbeallit Declare Sub Honapbeallit Declare Sub Evbeallit Cursor Off Config Porta.0 = Output Config Porta.1 = Output Config Porta.2 = Output Config Porta.3 = Output Config Porta.4 = Output Config Porta.5 = Output Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Porta.0 , Db5 = Porta.1 , Db6 = Porta.2 , Db7 = Porta.3 , E = Porta.4 , Rs = Porta.5 Config Porta.6 = Input Config Porta.7 = Input Enable Interrupts Config Date = Mdy , Separator = / ' ANSI-Format Config Clock = Soft 'this is how simple it is Date$ = "00/00/00" Time$ = "00:00:00" Cls Call Percbeallit Call Orabeallit Call Napbeallit Call Honapbeallit Call Evbeallit Main: Do Home Lcd Date$ ; " " ; Locate 2 , 1 Lcd Time$ Loop End Sub Percbeallit Minut: Cls Locate 1 , 1 Lcd "set minute" Locate 2 , 1 Lcd _min Wait 1 If Porta.6 = 0 Then Incr _min If _min = 60 Then _min = 0 If Porta.7 = 0 Then Return Else Goto Minut End Sub Sub Orabeallit Hour: Cls Locate 1 , 1 Lcd "set hour" Locate 2 , 1 Lcd _hour Wait 1 If Porta.6 = 0 Then Incr _hour If _hour = 24 Then _hour = 0 If Porta.7 = 0 Then Return Else Goto Hour End Sub Sub Napbeallit Day: Cls Locate 1 , 1 Lcd "set day" Locate 2 , 1 Lcd _day Wait 1 If Porta.6 = 0 Then Incr _day If _day = 31 Then _day = 0 If Porta.7 = 0 Then Return Else Goto Day End Sub Sub Honapbeallit Month: Cls Locate 1 , 1 Lcd "set month" Locate 2 , 1 Lcd _month Wait 1 If Porta.6 = 0 Then Incr _month If _month = 12 Then _month = 0 If Porta.7 = 0 Then Return Else Goto Month End Sub Sub Evbeallit Year: Cls Locate 1 , 1 Lcd "set year" Locate 2 , 1 Lcd _year Wait 1 If Porta.6 = 0 Then Incr _year If _year = 99 Then _year = 0 If Porta.7 = 0 Then Return Else Goto Year End Sub
Gondolom az If Porta.6 = 0 helyett If Pina.6 = 0 kellene.
Azt kérdezed le, hogy bemenet e.
Ujraégettem az AVR-t, mégsem működik, ahogy kellene....
Tudnátok segíteni ?
Csak próbáltam megoldást találni rá, ez nem jelenti szt, hogy nem bizom benned....
Üdv mindenkinek. Egy kis segítséget kérnék Atmega48pa-pu fuse bit beállításához. Avr studio4-nél hogy kell beállítani 20MHz kvarchoz.
Üdv mindenkinek!
Arduino: egyszerű számláló program
Ez az egyszerű kis számláló programom, kezdő ként ennyi futotta most. A problémám az ezzel a kóddal, hogy ha a nyomógomb(2) lenyomva marad, akkor tovább fut a számlálás. A cél az lenne, hogy egy gombnyomásra csak egyet ugorjon a számláló előre, impulzus számlálásra kellene egy jeladóhoz. Ezért fontos, hogy ne tévesszen.
Tudsz segíteni hogy ebből melyiket válasszam a 20MHz-hez? Gondolom "Ext. Full-swing Crystal" de melyik.
Bármelyik Full Swing megteszi.
A gomb lenyomásáról:
-> amikor a gombot lenyomod, akkor a bemenet átmegy LO-ra, vagy HI-re -> az átmenet nem azonnali, van kb. 10 ms idő, amíg LO/HI között véletlenszerűen ugrál Én a gombnyomást a következőképpen oldom meg: -> lenyomás: a gomb lenyomása miatti akció azonnali végrehajtása -> utána 10ms-ig nem csinál semmit, bármi van a gomb bemenetén -> ha továbbra is nyomva van, akkor sem csinál semmit -> ha visszamegy HI-re, LO-ra, akkor észreveszem, hogy már nincs lenyomva -> várok 10 ms-ig, hogy az elengedés lezáruljon -> ugrás az elejére Kicsit bonyolultul hangzik, de egyszerű. A lenyomás/elengedés utáni 10ms alatt történő dolgokat figyelmen kívül kell hagyni.
Üdv mindenkinek.
Szeretnék Atmega 48pa-pu-t 20MHz-es kristályhoz programozni, de sehogy sem jön össze. Ha az AVR studio4 -ben bármire is elállítom a fuse biteket lfuse:0x62 hfuse:0xDF efuse:0xFF ezeken kívül, akkor hibaüzenetet ír ki, és kizár a programozásból. Mit csinálok rosszul.
Kizártad magad. Vissza tudsz jutni?
L:0xEF H:0xDF E:0xFF Ezzel sem megy?
A visszajutás már nagyon megy a segéd órajel generátorral. Ha rajta hagyom a generátort programozás közben, akkor az általad adott kódokat be tudom állítani. Ha leveszem, és a fuse biteknél verify, akkor ismét az előző hibát írja ki. Ezt a frekimérőt építettem meg, de a tudás nem akar belemenni és nem műxik. Egyszerűen nem akarja tudni a 20 MHz-t.
A hozzászólás módosítva: Márc 4, 2013
Mekkora kondenzátor van a kristályra kötve?
Illetve a kristály adatlapja mit ír, mekkora kellene hozzá?
Fuse bit doctor kellesz neked szerintem , és megoldódik as problémád
Sziasztok!
Most jutottam el odáig, hogy megalkottam egy HVSP programozót az Attiny45-ömhöz. Persze azóta vettem még egy tinyit, de még hozzá se nyúltam Az eredmény az lett, hogy sikerült jól beégetni a programot, illetve a FUSE biteket is sikerült eltalálni, így most vígan felismeri az eszközöm a gép FUSE doctor helyett jobban jár az ember, ha inkább egy ilyet összedob, nem volt nagy mutatvány (hacsak azt nem számítom, hogy a rajzon fordítva volt az LPT bekötve, mint az Eagleben, s emiatt kénytelen voltam csinálni magamnak egy fordítókábelt, hogy az égetőm működjön). Meg persze a másik szuper dolog, hogy XP alatt megy az avrxtool, win7 alatt nem... (Ezért VirtualBOX alatt kell XP-vel játszani hozzá, amiben persze külön kell engedélyezni az LPT átvitelt a gazdagép és a vendég között és csak 4.2.0 felett megy jól...) Összességében végre elégedett vagyok, hogy sikerült megoldani ezt a FUSE dolgot, még ha ennyi idő is kellett hozzá
A fuse bit doctor hoz nem kell trükközni .Atmega8 van benne ,és ez tudja a HVSP +HVPP.Automatikusan felismeri a behelyezett csipet , és visszaállítja a rosszul beállított biteket.Ehhez nem szükséges PC , de összeköthető /RS232/, mivel van rajta két led a piros led jelzi , hogy hibás a csip , illetve rosszul lett programozva a nyomógomb megnyomása után, átvált zöld ledre , és jelzi , hogy jó , illetve kijavította , visszaállította az eredeti beállításokat. Cirka 100 féle csipet ismer a jelenlegi verzióban. Egyszerű a kezelése , és bármikor frissíthető a benne lévő program.Anno én úgy teszteltem , hogy direkt elrontottam egy csipet , és kíváncsi voltam , hogy helyre hozza e , és helyre hozta.Jó ha van egy ilyen sose lehet tudni.
Bővebben: Link
A helyzet az, hogy nem szánok magamnak ebben az AVR dologban akkora pályafutást, hogy megérje összerakni egy ilyen áramkört. A HVSP programozóhoz meg minden megvolt, hat tranyó, egy tucat ellenállás, meg egy printercsati a nyákon a három LED mellett... Nem mellesleg árban se mindegy, hogy 4000-ből jön ki, vagy 400-ból
Ha meg szoftveresen kell vele egy picit játszani, mert a 64bites win7 alatt nem megy az LPT portos égető? Na bumm, ebből is tanultam (ha mást nem, azt hogyan lehet VirtualBoxban beállítani a nyomtatóportot - miután annyit "játszottam" már virtualizációval, ez csak hab a tortán).
Ahogy a rajzon is van 47pF és 10-40pf trimm. Már teljesen tanácstalan vagyok hogy mitől nem megy.
A fuse bit doctor papírforma szerint nem tudja kezelni az Atmega48pa-t. Szerintem az órajel generátor is megteszi. Egyrészt egyszerű és occsó. Eddig visszahozta a "halottat".
|
Bejelentkezés
Hirdetés |