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   382 / 840
(#) zombee válasza röntgen hozzászólására (») Nov 21, 2011 /
 
Amit én észrevettem és belekötnék: az LCD 5-ös kimenete: LCD_RW.
Ezt én SOHA nem kötöm az AVR-re, sem máshová, mindig a földre(GND)!
Vágd el ezt a szálat. Az AVR oldalán hagyd csak lógni, a kijelzőnél pedig kösd a földpontra!

Ezt leszámítva csatlakozom az előttem szólóhoz: ha csak a felső sorban látni a teli karaktereket,
akkor nincs inicializálva az LCD. Ennek oka sok minden lehet, kezdve attól hogy az LCD nem támogatja
a 4 bites módot, vagy az AVR sebessége túl gyors az LCD inicializáláshoz, vagy a bekapcsolás után
túl hamar kezdi inicializálni amikor az LCD még nem áll készen. Ez utóbbit itt állítod: "SUT" FUSE bitek.
(#) kovacsj válasza zombee hozzászólására (») Nov 21, 2011 /
 
Én is úgy csináltam eddig. De a legutóbbi LCD-nél csak akkor működött 4-bites módban, ha bekötöttem az RW-t is rendesen. Ha a földre kötöttem, nem működött. Nem vizsgáltam miért, egy láb ide vagy oda, ebben az esetben nem számított, csak változókat nézegettem rajta.
(#) zolee1209 hozzászólása Nov 23, 2011 /
 
Bocsi, de hátha tetszik innen is valakinek... Bővebben: Link
(#) Robi98 hozzászólása Nov 23, 2011 /
 
Sziasztok!
Kijavítottam a programot ami annyit tesz hogy beolvassa a potméter értékét és PWM-jellel kirakja egy led-re.
Az előző pár oldalon már írtam a problémámról és ki is javítottak, de még így sem működik a program.
Tehát már halvány lila gőzöm sincs, hogy mi lehet a hiba.
A program a következő:
  1. #define F_CPU 1000000UL
  2.  
  3. #include<avr/io.h>
  4. #include<util/delay.h>
  5.  
  6. uint8_t ADConverter(unsigned char csatorna){
  7. ADMUX=csatorna;//csatornaválasztás
  8. ADCSRA|=(1<<ADSC);//egyszeri mérés elindítása
  9. while(ADCSRA&(ADSC));//várás az átalakításra
  10. ADCSRA|=(1<<ADSC);//ugyan ezek még egyszer
  11. while(ADCSRA&(ADSC));
  12. return(ADCH);//ADCH értékének visszaadása
  13. }
  14.  
  15. int main(void){//főprogram kezdete
  16.  
  17. DDRB|=(1<<PB3);//PB3 kimenet
  18. ADMUX=(1<<REFS0)|(1<<ADLAR);//VCCreferencia fesz és balrarendezett mérés
  19. ADCSRA=(1<<ADEN)|(1<<ADPS0)|(1<<ADPS1);//ADC enged. és 8-as előosztás
  20. TCCR2|=(1<<CS20);//1-es timer előosztás
  21. TCCR2=(1<<WGM20)|(1<<COM21);//nem invertált gyors PWM
  22.  
  23. TCNT2=255;
  24. OCR2=50;
  25.  
  26. while(1){
  27.  
  28. OCR2=ADConverter(1);//az ADC mérés eredményét átadjuk a komparátornak
  29.  
  30. }
  31.  
  32. return(0);
  33. }

Köszönöm előre is.
(#) sikolymester válasza Robi98 hozzászólására (») Nov 23, 2011 /
 
Szimulátorban futtattad már?

Így vagy úgy, futtasd szimulátorban és nézz rá a timer2 modulra, hogy van e valami fura vele. Mármint, hogy minden olyan, mint ahogyan szeretnéd.

Attól tekints el, hogy a studio4-ben a szimulátor bugos és rosszul mutatja a pwm módot (nem azt kell nézned úgysem).
(#) pintad hozzászólása Nov 24, 2011 /
 
Sziasztok.
Gyors kérdésem bánt engemet, mivel analóg elektronikához buta vagyok... Szeretnék kivezérlésjelzőt (és aztán mást is) építeni AVR-el, a ledek vezérlése és ADC beolvasása meg is van. Viszont: milyen egyszerű kapcsolással lehetne úgy rákötni az audio forrást az ADC bemenetre, hogy egy viszonylag pontos hangerőreprezentációt kapjak? (pl. hogyha számítógépről játszok le valamit, akkor pontosan ugyanazt lássam a kijelzőn mint a számítógépen) A problémám most ugyanis az hogy fix hangerőn játszott egyszerű szinusznál is összevissza ugrál (8ledből kettő +-1), illetve frekvenciájánál is válogatja hogy mit jelezzen vissza...

A program röviden:

  1. int main(void)
  2. {
  3. unsigned short adc;
  4. unsigned short actual=1, rise=10, fall=5;
  5. tmp16=0;
  6.  
  7. init();
  8.  
  9. for (;;) {
  10. adc = ADConvert(1);
  11.  
  12. if(actual<adc){
  13. if(actual<=adc-rise)
  14. actual=actual+rise;
  15. }
  16. if(actual>adc){
  17. if(actual>=adc+fall)
  18. actual=actual-fall;
  19. }
  20.  
  21. PORTB=~(0xff<<(actual>>5));
  22. }
  23. return 0;
  24. }


Ha valaki esetleg tudna olyan projektet ami ilyennel foglalkozik, az lenne a legjobb (én kerestem, de nem találtam)
(#) kovacsj válasza Robi98 hozzászólására (») Nov 24, 2011 /
 
Sziasztok!
Már korábban is meg akartam kérdezni:
  1. ADCSRA|=(1<<ADSC);//egyszeri mérés elindítása
  2. while(ADCSRA&(ADSC));//várás az átalakításra
  3. ADCSRA|=(1<<ADSC);//ugyan ezek még egyszer

Miért kell ezt kétszer? Pontosabb? A múltkori programomban csak egyszer hatottam végre és a mérésnek, valamint a számításnak csak néhány század eltérése volt. Amit okozhatott a multiméter pontatlansága is. Vagy nem jól gondolom?
Köszönöm előre is!
(#) sikolymester válasza kovacsj hozzászólására (») Nov 24, 2011 /
 
Eleg azt egyszer. Multkor en mondtam neki. De ugy latszik nem figyelt.
(#) sikolymester válasza kovacsj hozzászólására (») Nov 24, 2011 /
 
Van itt egy ilyen kapcsolas az oldalon. Amugy neked savszuro kell ehhez, vagy ha szoftverbol akarod, akkor FFT. Bar ahhoz gyenge szerintem egy mega avr.
(#) kovacsj válasza sikolymester hozzászólására (») Nov 24, 2011 /
 
Nekem biztosan nem, de azért köszönöm az előző hozzászólásodat! Fogalmam sincs, mit kezdhetnék most egy sávszűrővel, a Fast Fourier Transformation-ról nem is beszélve. Nekem egyszerűbb gondjaim szoktak lenni, de gondolom, csak mellényúltál a válasznál, én meg amúgy is meg akartam köszönni az előzőt.
(#) sikolymester hozzászólása Nov 24, 2011 /
 
kovacsj:

A válaszom pintadnak szólt, csak mobilon sikerült mellé nyúlnom.

Mellesleg, ha pontosabb ADC mérést szeretne az ember, akkor érdemes megnézni a különböző alvó állapotokat. Van egy ami kifejezetten az adc mérés pontosságát növeli meg. Gyakorlatilag ehhez a mérés időtartamára leállít minden perifériát, amik ugye digitális zajt (végső soron elektrohullámos zajt) keltenek amúgy.
(#) kovacsj válasza sikolymester hozzászólására (») Nov 24, 2011 /
 
Rendben, köszönöm szépen! Lehet, hogy lesz lesz olyan alkalom, amikor nekem is szükség lesz ezekre az állapotokra!
(#) pintad válasza sikolymester hozzászólására (») Nov 24, 2011 /
 
Értem, köszönöm a válaszod.
És pontosan milyen sávszűrőre lenne szükségem? vagy azt már ne itt nézzem meg?
Az adc alvó állapotról tudok, azonban most is csak a felsőbb biteket használom, az alsó öt felőlem bármi lehet. És ha 0..5V terjedelemben akarom mérni a hangot akkor szerintem ez már elég pontos.
(#) sikolymester válasza pintad hozzászólására (») Nov 24, 2011 /
 
Ja bocsánat. Hangerő reprezentációt akarsz. Valamiért egyből kombináltam és spektrum analizátorra gondoltam.

Ez esetben szerintem megteszi egy egyszerű átlagoló. Persze minél jobb átlagolót tudsz csinálni, annál jobb. Erről szerintem akad bőven szakirodalom.

Most természetes, hogy ugrál, hiszen nem egy konstans egyenfeszültség generál hangot. Ahogyan írod is: azonos hangerejű szinuszt játszol le. Te ennek a szinusz alaknak a pontjait méred be, ami persze, hogy össze-visszaságokat okoz.

Mielőtt durr bele neki esel átlagolókat írni, javaslom kicsit játssz el a szinusz függvény adataival számítógépen, vagy tőlem egy papírlapon is matematika barátunk segítségével.
(#) dB_Thunder válasza pintad hozzászólására (») Nov 24, 2011 /
 
Hali!
A kivezérlés jelzők mindig egy csúcsegyenirányítóval kezdődnek, ennek a jelét küldik a led oszlop meghajtását végző egységre.
Nyolc lábbal AVR IV. rész Kivezérlésjelző
vagy Plazmacsöves kivezérlés mérő
hirtelen ennyi példát találtam..
(#) zolee1209 válasza pintad hozzászólására (») Nov 24, 2011 /
 
Én így oldottam meg:
Bővebben: Link
(#) luxmanpower hozzászólása Nov 24, 2011 /
 
Lenne egy kérdésem. Van nekem egy karakter tömböm, amit megszakításban is használok. Elvileg ilyenkor volatile-nek kellene lennie. Másol pedig strstr egyik paramétereként felhasználom mert ebben keresek. Így viszont rinyál a fordító hogy nem oké. Mert a paraméternek nem jó volatile. Ilyenkor mi van? Castolás segít?
(#) luxmanpower válasza luxmanpower hozzászólására (») Nov 24, 2011 /
 
Úgy néz ki így működik hiba nélkül
(#) dB_Thunder válasza zolee1209 hozzászólására (») Nov 24, 2011 /
 
Nem túl elegáns vonalszintű jelet csak úgy beterhelni egy egyenirányítóval, illő elé valami leválasztó/ erősítő fokozatot tenni
(#) pintad válasza dB_Thunder hozzászólására (») Nov 24, 2011 /
 
Köszönöm a linket!
Egyébként parasztosan megoldottam, úgy hogy időközönként vett beolvasások maximumát veszem aktuális hangerőnek. Azonban ez sok időt elvisz... tetszik nagyon amit küldtél, Proteusban megnéztem mit generál, a picike áramkör nagyon megkönnyítené a dolgomat, szóval valószínűleg inkább azt építem bele...
(#) dB_Thunder válasza pintad hozzászólására (») Nov 24, 2011 /
 
Szivesen!
(#) X Sügi X hozzászólása Nov 25, 2011 /
 
Sziasztok!
Építettem egy Topi féle Doper-t. Ponyproggal szeretném felprogramozni, de nem igazán tudom, hogy miket kell bepipálni a fuse bitkenél. Valaki tudna segíteni? Olvastam a hozzászólások között, hogy másnak is volt ilyen problémája, de a megoldás sajnos nem lett leírva. Még csak ismerkedem az avr-ekkel, így magamtól nem megy. Esetleg ha valaki bepipálgatná..
(#) zombee válasza X Sügi X hozzászólására (») Nov 25, 2011 /
 
D9:FF - nálam így megy...
(#) rattanee hozzászólása Nov 25, 2011 /
 
Üdv mindenkinek!

Tudna e valaki segíteni egy kis programozásban?
PS/2 vagy USB porton keresztül szertnék egy különálló billentyűzetet megvalósítani PC-hez. A hardver részében viszonylag otthonosan mozgok a dolgoknak, de programozásban már sokkal kevésbé.
Egy nem mátrixos megoldást szeretnék amivel minimum 30 külön billentyűt tudok beolvastatni a PC-be.
Nyilván ehez egy olyan atmel ic kell aminek sok bemenete van(30+). Mit ajánlanátok erre a célra? Lehetőleg minél olcsóbb legyen.
Illetve hogyan lehetne ezt megprogramozni?
Fontos lenne hogy egyszerre több gomb is aktív lehessen ghostolás nélkül, ezért van szükség ennyi bemenetre, illetve ezért nem megoldás az ellenállásos mátrix amit mindenütt találtam.
(A felírás már nem gond, van egy elég komoly eszközprogramozóm.)

Köszi!
(#) UbiLinux válasza rattanee hozzászólására (») Nov 25, 2011 /
 
Nézd meg a kommersz digitális 4021-es IC-t. 4 db-ot sorba kötve egy Atmeles SPI buszon fél kézzel lekezelhető 32 bites láncot kapsz.
(#) pintad válasza UbiLinux hozzászólására (») Nov 25, 2011 /
 
ugyanez igaz a 74hc165-re. (4021-et nem ismerem, de 74hc165-el már dolgoztam és megbízhatónak tartom)
(#) zombee válasza UbiLinux hozzászólására (») Nov 25, 2011 /
 
Teljesen félreértitek. Aztán mi a lócitromot csinál a shift regiszterekkel?
USB kapcsolat nélkül lazán kitörölheti...

Szerintem valami ILYENRE gondolt a kedves delikvens.
Két baj van vele. Az egyik hogy csak 17 billentyűje van, a másik hogy ezek fixen vannak.
Ez utóbbin lehet segíteni a SCAN kódok átírásával és újrafordítással, de AVR Studio alatt nem fordul sehogyse.
Az AVR Doper-ben is csak úgy tudtam módosítani az SW-verziót hogy félnapos munkával kikerestem a
HEX kódban a helyét és kézzel átírtam PonyProg-al. Az eredeti forrás is kellett hogy tudjam, mi van körülötte.
(#) zombee válasza zombee hozzászólására (») Nov 25, 2011 /
 
Egyébként egy ATMega16-al biztos jó lenne(futólag valahol láttam is egy ilyet), mert akkor pont
30 billentyű lehetne rajta. Vannak átdolgozások és más "hidkeys" alternatívák, keresni kell!
(#) rattanee válasza UbiLinux hozzászólására (») Nov 25, 2011 /
 
A méret is számít, ezért inkébb egy db IC-vel szeretném kivitelezni a dolgot.
(#) rattanee válasza zombee hozzászólására (») Nov 25, 2011 /
 
Igen ilyen megoldás kellene, csak nyilván több billentyűvel.
30 billentyű már elég lenne, de a több jobb itt is igaz
Valaki tudna esetleg segíteni ezt egy nagyobb IC-hez átírni? Az Atmega 16 ahogy elnézem tökéletes lenne.
Még kiscsikó koromban tanultam C-t illetve pascalt de már szinte semmire nem emlékszem.
Következő: »»   382 / 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