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   589 / 840
(#) szili83 válasza csabeszq hozzászólására (») Feb 4, 2014 /
 
Jó lett minden, szerintem a nem megfelelő vezetékek okozták a problémát a próbapanelen (nem jött meg még a hozzá való vezeték, és vékony huzalokat dugdostam bele)
Ráwrappeltem tüskékre a huzalt, és megy minden. A kontraszt állító poti is valószínűleg nem ért bele a próbapanelbe.
(#) erdoszoli hozzászólása Feb 6, 2014 /
 
Sziasztok!
Megint zavarnék egy EEPROM kérdéssel.
Atmega88 IC -be STK500-al beletöltök egy programot, ami egy default értéket beír a saját epromjába. 0x00 tól 0x10 címig.
Namost a gondom az hogy van pár panelem, amin nem sikerül ez a beírás. AVRStudio4-el csinálok egy EEPROM read-et, és csupa 0xFF -el van tele.
Az felmerülő alapkérdésekre a válasz : BOD be van állítva 4.3V-ra, Reset lábon az atmel Reset Circuit van használva (felhúzó 10k ellenállás,vele párhuzamos dioda, illetve Reset láb->GND egy 100nF kondi)
Az IC-k is vadi újak.
Nekem néha az volt már az érzésem hogy el se indul a szoftver , de akkor a többi panelemen miért jó ? Valakinek lenne segítő ötlete?
Zoli
(#) HöTö hozzászólása Feb 6, 2014 /
 
Helló!

A következő problémával fordulnék hozzátok.
Szeretnék sebességet mérni egy gyorsulásmérő szenzorral, ehez ugye a mért
gyorsulást idő szerint integrálnom kéne ezt az integrálást nem tudom megoldani szükségem
lenne egy integráló algoritmusra.
A segítséget előre is köszönöm.
(#) csabeszq válasza HöTö hozzászólására (») Feb 6, 2014 /
 
http://hu.wikipedia.org/wiki/Simpson-m%C3%B3dszer

Simpson integrálásnak nézz utána.

Minden integrálás lényege a függvény alatti terület kiszámolása.

Ezt többféleképpen teheted, lehet favágni, megkockáztatva, hogy mellé mérsz, meg becsülni.

Megméred a jelet t0 t1 időpontban f(t0), f(t1), veszed a számtani közepét f(t1)-f(t0)/2 és ezt megszorzod t1-t0-lal. Ez durván közelíti a függvény alatti területet. Bár a Simpsonnak jobban utánanéznék.
A hozzászólás módosítva: Feb 6, 2014
(#) zombee válasza erdoszoli hozzászólására (») Feb 6, 2014 /
 
Kapcsold be az EESAVE nevű FUSE bitet és hidd el, jó lesz.
(#) zombee válasza HöTö hozzászólására (») Feb 6, 2014 /
 
Szerintem nem fog menni. Integrálni csak a "klasszikus" módon tudsz, tehát minél gyakrabban
kiolvasod a szenzor értékeit és az értéket összeadogatod. Az időalappal pedig megkapod
az aktuális sebességet. Jóval pontosabb mint a Simpson. A dolognak azért van pár szépséghibája:
1: a rendszerben lévő zajok(különösen az A/D átalakítás) miatt az integrálás kimenete el fog szállni.
2: a nehézségi gyorsulás (g) miatt mindig lesz egy konstans gyorsulás. Ha meg tudod oldani
hogy a cucc semmilyen irányba ne forduljon el(de úgyis el fog), akkor talán...
3: ha az integrálást analóg eszközökkel végzed és csak a kimenetet digitalizálod, a zajok miatt
az is el fog szállni.
4: megálláskor mindig le kell nullázni...

Magyarul: gyorsulásmérővel nem fogsz sebességet mérni! Egy GPS modullal többre mész.
A hozzászólás módosítva: Feb 6, 2014
(#) csabeszq válasza zombee hozzászólására (») Feb 7, 2014 /
 
Ahogy egyetemről emlékszem, a Simpson integrálás nem írja elő, hogy hányat kell mintavételezned.

Amit te említesz, hogy gyakran mintavételezel és az értékeket összeadod, az ugye a téglalap módszer, ami értelemszerűen a leggyengébb integrálási módszer.

A Simpson integrálás lényege, hogy ugyanolyan mintavételi frekvenciánál másodfokú görbével helyettesíted a mintavételeket, ennél fogva a pontossága jobb. De ha nem akarsz AVR alatt másodfokú görbékkel szórakozni, a trapéz módszer is simán elvégezhető, ami még mindig fényévekkel jobb a téglalap módszer pontosságánál.

Egyetemi éveim alatt írtam programot, ami képes volt numerikusan integrálni és double számok esetén 6 tizedesjegy pontosságig simán vitte a trigonometrikus függvények integrálását (kicsi deltánál a baj az alulcsordulás, a nagy deltánál meg az, hogy nem illeszkedik a függvényre).

Végigjátszottam akkor ezeket és téglalap módszerrel kizárt volt 6 tizedesjegyet elérni, mert a mintavételi frekvenciát nem emelheted a csillagos égig, hogy az integrálás közelítési hibáját javítsad.

Ennyi a matematikai háttér.
A hozzászólás módosítva: Feb 7, 2014
(#) csabeszq válasza csabeszq hozzászólására (») Feb 7, 2014 /
 
A másik, hogy a túlzott mintavételezés nagy zajt visz a rendszerbe.

Sokkal pontosabb eredményt kaphatsz ritkább mintavételezéssel és megfelelő görbeillesztéssel.

A feladatot nem ismerjük, de a mintavételi frekvenciát a görbe várható alakjához kell illeszteni és a megfelelő integrálási módszert kiválasztani.

Ezt végig kell játszani sajnos, hogy melyik mintavételezésnél kapod a legjobb eredményt.

Sőt, azt is lehet csinálni, hogy minden 10 mintavételt átlagolsz és az átlagra illeszted a Simpson formulát, hogy az ADC zaját csökkentsd.
(#) frankopeti hozzászólása Feb 7, 2014 /
 
Sziasztok.
Kérdés:
Lehet pontos jelet kiküldeni egy lábon, miközben fut az adott program?
Azért kérdés nekem, mert ahogy elképzelem, mindig "egy sor" (c nyelv) hajtódik
végre még akkor is ha az egy DELAY utasítás.
Vagy úgy kell kimatekozni, hogy pontos legyen?!
Köszi.
(#) jenebala válasza frankopeti hozzászólására (») Feb 7, 2014 /
 
Igen, lehetséges belső megszakításokat kell használni, és akkor akár el is hagyható a szoftveres delay.
(#) csabeszq válasza frankopeti hozzászólására (») Feb 7, 2014 /
 
1us pontossággal tudsz 16MHz-es AVR-rel jelet kiküldeni.

Megszakításokkal szokták csinálni (interrupt). A főprogram azt csinál, amit akar, amikor eljön a jelküldés ideje, a hardver megszakítja a főprogram futását, abból kiküldöd a jelet. Utána visszaadja a vezérlést.
(#) gabi20 hozzászólása Feb 7, 2014 /
 
Sziasztok segítséget szeretnék kérni mert elakadtam. I2C Slave receiver módot akarok használni ATmega8 - ban. Ha nem használok megszakítást akkor működik is, be tudom olvasni a bejövő adatot. Interruptal azonban nem akar működni, illetve mindig nullát ad vissza.
  1. #include <avr/io.h>
  2. #include <util/delay.h>
  3. #include <avr/interrupt.h>
  4.  
  5. volatile unsigned char data = 0;
  6.  
  7. ISR(TWI_vect){
  8.  
  9.                 data = TWDR;
  10.  
  11. }
  12.  
  13.  
  14. int main(void){
  15.  
  16.                 DDRB = 0xFF;
  17.                 DDRC = 0x00;
  18.                 DDRD = 0xFF;
  19.  
  20.                 TWAR = 0xC0;            // Set Slave adress
  21.                 TWCR = 0x45;            // Enable I2C, interrupt enable
  22.  
  23.                 _delay_ms(30);
  24.  
  25.                 sei();                      // general interrupt enable
  26.  
  27.                 while(1){
  28.                        
  29.                         ...
  30.        
  31.                 }                                              
  32. }

Nem tudom mit csinálok rosszul valaki megnézné aki jobban ért hozzá??? Előre is kösz
A hozzászólás módosítva: Feb 7, 2014
(#) csabeszq válasza gabi20 hozzászólására (») Feb 7, 2014 /
 
Szerintem olvass utána egy rendes I2C implementációnak, mert nagyon nem így működik.

- jön az interrupt, hogy a mester start jelet küldött
- jön egy interrupt, hogy a hardver elfogadta az I2C címedet és a mester adatot küldene/kérne tőled
- visszaküldöd, hogy oké, nyugta, a mester ebből tudni fogja, hogy létezel, emellett a hardver elengedi a CLK vonalat, ami a mester várakoztatására szolgál, mindaddig, amíg a kérést fel nem dolgozod
- miután a mester látja, hogy élsz (nyugtádat), elkezdi küldeni neked az adatot
- neked semmi más dolgod, mint egyesével fogadni az adatokat a mestertől és nyugtázni, ha pedig eleged van a belőle, leszerelheted , ha nem küldesz nyugtát
- a mester küld egy stop-pot, hogy ennyit akart mondani neked és kiszáll
- te feldolgozod a kérést

Értelemszerűen ezt a te programod 0%-ban valósítja meg. Érdemes lenne egy működő slave-t letölteni, talán előbb jutnál eredményre.
A hozzászólás módosítva: Feb 7, 2014
(#) gabi20 válasza csabeszq hozzászólására (») Feb 8, 2014 /
 
Köszi szépen, utánanézek
(#) kameleon2 hozzászólása Feb 9, 2014 1 /
 
Sziasztok! A napokban volt szerencsém egy kici occó kínai plc-t venni - persze nem teljesen véletlenül. A mikrokontroller foglalatban van - így cserélhető. Mivel 89c52-t még nem volt szerencsém "enni" érdeklődnék, mert meg kell oldanom egy feladatot - emiatt is vettem meg a panelt. Mivel lehet programozni ezt a fajta MC-t? Két lehetőség van előttem: Vagy kiemelem és egy másik ugyanilyet teszek bele - így megmarad az eredeti PC-soros kommunikáció, amihez szoftvert is adtak. A másik lehetőség, hogy az általam jobban ismert mikrokontrollert teszem bele egy adapterpanellel, így a szoftverírást is megspórolom. Persze jó lenne megismerkedni ismét egy újabb eszközzel - ezért érdeklődöm. Az is jó lenne - sőt a legjobb, ha valaki tudna nekem egy szoftvert írni a meglévőre. Gyakorlatilag egy más eszközre már megírt két gombos redőnyvezérlés a feladat. Ha netán tudtok valami megoldást, ne hallgassátok el !
(#) rolandgw hozzászólása Feb 9, 2014 /
 
Sziasztok! Használta már valaki a Studio 6-ot asm szimulálásra ? A program számláló megy,ezen kívül sem a regiszterek sem az IO nézetben nem történik változás.Valamint a Step into/over sem vált.A tool-nál be van állítva Simulator-ra.
(#) rolandgw válasza rolandgw hozzászólására (») Feb 9, 2014 /
 
Megoldódott...negyedszeri újraindítás után
(#) zoly15 hozzászólása Feb 9, 2014 /
 
Sziasztok!
Az AVR stúdió nem csatlakozik az STK500-as ISP-s programozóhoz (Topi féle).
Az eszközkezelőben működik a port, már több drivert is kipróbáltam, de sehogyan nem akar működni. Mi lehet a baj? Win 7-et használok. Előre is köszönöm!
(#) Ricsi89 válasza zoly15 hozzászólására (») Feb 9, 2014 /
 
Próbáld meg újratenni a stúdiót. Nekem az megoldotta. Avrdude látta, azzal lehetett programozni, csak a stúdió nem vitte.
(#) Szabi1 hozzászólása Feb 10, 2014 /
 
Sziasztok! Következő a problémám: Attiny 2313-al akarok kommuniálni RS232c-n keresztül.
A múltkori tranzisztoros általakításom nemvolt jó, lerendeltem egy MAX232cpe IC-t, most bekötöttem, próbáltam feedback tesztet úgy hogy az IC TTL I/O-t rövidre zártam, de a Microsoft Hyperterminalon nem működött. Azután rövidre zártam az RS232c 2,3 mas RXD,TXD pinjeit, 2400bps-en volt amikor ment, ha átálítottam a sebességet akkor más jeleket mutatott ki.
Mi lehet a probléma rossz a szoftwer?
Amúgy Windows 8.1-esem van, a hyperterminal exe, meg dll az xp -cdről lett lemásólva.
A hozzászólás módosítva: Feb 10, 2014
(#) TavIR-AVR válasza Szabi1 hozzászólására (») Feb 11, 2014 /
 
A max chipedet kötötted be rosszul/nem kap tápot.
(#) kokimy hozzászólása Feb 12, 2014 /
 
Egy ilyen programozóval tudnék 328P-t programozni?
(#) TavIR-AVR válasza kokimy hozzászólására (») Feb 12, 2014 /
 
Igen, de sokat szívsz vele. Emulált USB van benne. Keress az AVR égetők topoicban az USBASP programozóra.

"Occo, kici, kínai." Ár-Érték arányban sem jó.
(#) killbill válasza TavIR-AVR hozzászólására (») Feb 12, 2014 /
 
Szerinted, ha a PC-n osszekototte az Rx-Tx labakat, es ugy sem mukodott a PC-n a terminal sw, akkor annak mi koze lehet a MAX IC-hez? Inkabb gyanus, hogy a hyperterminal nem mukodik vagy a PC sorosportja hibas. Persze, ha ugy zarta rovidre a csatlakozon a 2 es 3 pontokat, hogy kozben rajta volt a MAX232 is, akkor nem szoltam.
(#) csabeszq válasza killbill hozzászólására (») Feb 12, 2014 /
 
Én azzal indítottam, hogy két gépet összekötöttem egy sorosporti kábellel.

Ha két gép tud egymással soros porton dumálni, utána lehet a Max232-vel folytatni.
(#) killbill válasza csabeszq hozzászólására (») Feb 12, 2014 /
 
No, amit sokan elfelejtenek, az a hardware flow control (tudom, kemenyárú folyás vezérlés). RTS/CTS, DTR/DSR. Ezek hasznalatat elvileg a terminal programban ki lehet kapcsolni, es ki is kell, ha nem koti be az ember ezeket a jeleket. Egy gyari soros kabelen ezek tobbnyire be vannak kotve. A legalapvetobb teszt az az, hogy a PC-n osszkoti az Rx-Tx-et. Amig nem latja, amit gepel, addig kar tovabblepni.
(#) csabeszq válasza killbill hozzászólására (») Feb 13, 2014 /
 
Megint bölcsebb lettem. El sem tudtam volna képzelni, hogy létezik még gyári soros kábel, de tényleg, van és lehet kapni.

Én annó csatlakozót vettem és UTP kábelt.

(#) Szabi1 válasza TavIR-AVR hozzászólására (») Feb 14, 2014 /
 
így kötöttem be: Bővebben: Link Az adatlapba meg ez szerepel: Bővebben: Link
Tehát az adatlapba (MAX232CPE) kap egy +/- 8,5V ot meg 5V ot, és akkor nem működik 5v ról?
Minden kondi 1uF
A hozzászólás módosítva: Feb 14, 2014
(#) killbill válasza Szabi1 hozzászólására (») Feb 14, 2014 /
 
Az adatlapon a +/- 8.5V az kimenet. Ez az IC az 5V-tol eloallitja a +/-8.5V-ot. Csak az 5V kell neki.
(#) Szabi1 válasza killbill hozzászólására (») Feb 14, 2014 /
 
Akkor biztos a próbapanel miatt nem megy, azon mindig sikerül találni egy rosz kontaktot, most megnézem műszerrel. Ugye ha a TTl RXD TXD részét rövidre zárom, az rs vonalon a PC van bekötve akkor kéne menjen a loopback?
Következő: »»   589 / 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