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   522 / 840
(#) karika200 válasza csabeszq hozzászólására (») Feb 27, 2013 /
 
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..
(#) csabeszq válasza karika200 hozzászólására (») Feb 27, 2013 /
 
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
(#) csabeszq válasza karika200 hozzászólására (») 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.
(#) pluto válasza karika200 hozzászólására (») Feb 27, 2013 /
 
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.
(#) csabeszq válasza pluto hozzászólására (») Feb 27, 2013 /
 
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.
(#) karika200 válasza pluto hozzászólására (») Feb 27, 2013 /
 
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...
(#) karika200 válasza karika200 hozzászólására (») Feb 27, 2013 /
 
Ok, a pontos órajel beállítása és az optimalizáció bekapcsolása a fordításnál megoldotta a gondot!
(#) pluto válasza karika200 hozzászólására (») Feb 27, 2013 /
 
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.
(#) Szasza9668 hozzászólása Feb 28, 2013 /
 
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
(#) tej válasza Szasza9668 hozzászólására (») Feb 28, 2013 /
 
Gondolom az If Porta.6 = 0 helyett If Pina.6 = 0 kellene.

Azt kérdezed le, hogy bemenet e.
(#) Müszi válasza Müszi hozzászólására (») Márc 1, 2013 /
 
Ujraégettem az AVR-t, mégsem működik, ahogy kellene....
Tudnátok segíteni ?
(#) zombee válasza Müszi hozzászólására (») Márc 1, 2013 /
 
Ennyire nem bíztál bennnem...
(#) Müszi válasza zombee hozzászólására (») Márc 1, 2013 /
 
Csak próbáltam megoldást találni rá, ez nem jelenti szt, hogy nem bizom benned....
(#) csdominik hozzászólása Márc 2, 2013 /
 
Ü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.
(#) blackdog válasza csdominik hozzászólására (») Márc 2, 2013 /
 
(#) 75roll hozzászólása Márc 2, 2013 /
 
Üdv mindenkinek!

Arduino: egyszerű számláló program

  1. #include "LiquidCrystal.h"
  2.  LiquidCrystal lcd(4, 5, 6, 7, 8, 9);
  3.  
  4.  //int i=0;
  5.  int szaml= 0;
  6.  
  7.  void setup() {
  8.     lcd.begin(16, 2);
  9.     Serial.begin(9600);
  10.     pinMode(2,INPUT);
  11.   pinMode(13,OUTPUT);
  12.   digitalWrite(2,HIGH);
  13. }
  14.  void loop(){
  15.    digitalWrite(13,digitalRead(2));
  16.    if (digitalRead(2) == HIGH ){
  17.    szaml = szaml+1;
  18.   delay(10);
  19.    }
  20.   delay (10);
  21.   Serial.print(szaml);
  22.   lcd.setCursor(4, 1);
  23.   lcd.print(szaml);
  24. }


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.
(#) csdominik válasza blackdog hozzászólására (») Márc 3, 2013 /
 
Tudsz segíteni hogy ebből melyiket válasszam a 20MHz-hez? Gondolom "Ext. Full-swing Crystal" de melyik.
(#) sikolymester válasza csdominik hozzászólására (») Márc 3, 2013 /
 
Bármelyik Full Swing megteszi.
(#) csabeszq válasza 75roll hozzászólására (») Márc 4, 2013 / 1
 
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.
(#) csdominik hozzászólása Márc 4, 2013 /
 
Ü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.
(#) blackdog válasza csdominik hozzászólására (») Márc 4, 2013 /
 
Kizártad magad. Vissza tudsz jutni?
L:0xEF H:0xDF E:0xFF Ezzel sem megy?
(#) csdominik válasza blackdog hozzászólására (») Márc 4, 2013 /
 
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
(#) sikolymester válasza csdominik hozzászólására (») Márc 5, 2013 /
 
Mekkora kondenzátor van a kristályra kötve?
Illetve a kristály adatlapja mit ír, mekkora kellene hozzá?
(#) eyess válasza csdominik hozzászólására (») Márc 5, 2013 /
 
Fuse bit doctor kellesz neked szerintem , és megoldódik as problémád
(#) bbb válasza csabeszq hozzászólására (») Márc 5, 2013 /
 
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á
(#) bbb válasza eyess hozzászólására (») Márc 5, 2013 /
 
Szia!

HVSP programozó is jó
(#) eyess válasza bbb hozzászólására (») Márc 5, 2013 /
 
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
(#) bbb válasza eyess hozzászólására (») Márc 5, 2013 /
 
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).
(#) csdominik válasza sikolymester hozzászólására (») Márc 5, 2013 /
 
Ahogy a rajzon is van 47pF és 10-40pf trimm. Már teljesen tanácstalan vagyok hogy mitől nem megy.
(#) csdominik válasza eyess hozzászólására (») Márc 5, 2013 /
 
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".
Következő: »»   522 / 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