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   356 / 840
(#) Reggie válasza leglacika hozzászólására (») Aug 28, 2011 /
 
Nincs mit. Egy optimalizaciot elfelejtettem, amit meg megcsinaltam: Az LcdGotoXY-t atirtam, hogy csak egy uint8_t parametert kapjon. Az also 5 bit az oszlopok szama, a felso 3 bit a sorok szama.
Esetleg probald meg IAR-rel is leforditani, bar szerintem a tobb mint 20%-os meretcsokkenes nem realis.
(#) kovacsj hozzászólása Aug 29, 2011 /
 
Sziasztok!

A véleményeteket szeretném kikérni! Szerintetek jól lenne ez így összerakva? Egy Atmega128 és egy Quectel M10 GSM modulról lenne szó. Nem terveztem még soha ilyet, és az sem biztos, hogy így lesz megvalósítva. (Különösen ha leszavazzátok.)
Köszönöm előre is a segítséget!
(#) zolee1209 válasza kovacsj hozzászólására (») Aug 29, 2011 /
 
Szia!
Ami feltűnt: Mintha nemsokkal visszább mondták volna, hogy a mega128-nál a programozó lábak nem MISO-MOSI lábakon vannak... Ennek nézz utána. Ahogy látom, a modullal UART-on kommunikál. Érdemes lenne betenni valami "baud kvarcot", hogy a kommunikáció hibamentes legyen. AVR oldalra. Hogy a modulnak kell-e külső órajel nem tudom, kép alapján úgy tűnik, hogy nem. Ennyi az észrevételem.
(#) kovacsj válasza kovacsj hozzászólására (») Aug 29, 2011 /
 
Nagyon szépen köszönöm! Egy hiba megelőzve.

9600-zal szeretném a kommunikációt, és a lehető legegyszerűbben, a legkevesebb alkatrészből. A modulnak nem kell külső órajel.

A többi azért jó?
(#) zolee1209 válasza kovacsj hozzászólására (») Aug 29, 2011 /
 
Nem látok benne fatális hibát... De ha már kivezetted az összes portot, akkor érdemes lenne bekötni az ADC-hez szükséges portlábakat, hátha analóg mennyiséget is akarsz későbbiekben távküldeni... Ebben is, meg a megfelelő értékű kvarc kiválasztásában segít az adatlap.
Esetleg még az AVR táplábaira közvetlenül tegyél 100nF-os kondit.
(#) kovacsj válasza zolee1209 hozzászólására (») Aug 29, 2011 /
 
Köszönöm szépen! Megyek adatlapot tanulmányozni.
(#) pityu_lite hozzászólása Aug 29, 2011 /
 
Sziasztok!
Új vagyok a témában, remélem tudtok segíteni.
Lenne pár nyákom , mindegyiken AVR kontroller, SDA , SCL lábak közösítve, magyarán létrehoztam egy buszt az összes IC között. 1 fő vezérlő lenne aminek a feladata adatokat küldeni a többinek. PL az első kérdés már adódik is : miközben a slavek progiját írom akkor mindegyiknek más címet állítok be és ha a master arra a címre küldi ki az adatot, akkor ugyan felfigyel az összes többi eszköz de nem is érdekli őket az adat mert nem egyezik a cím a rájuk programozottal?
Ezután ilyen visszajelzések (ACK) jelek nem bolonditják meg a többi eszközt? Magyarán a master simán fogadja és ha úgy adódik akkor küldi a következő adatot akár másik címre is.
Lehet bonyolult a kérdés, de azért a programozó tudásom nem a nullához közelít, és AVR STUDIO -ban is van már gyakorlatom, csak ezzel a TWI ( vagy I2C ) dologgal nem foglalkoztam még. Ja és nézzétek el légyszi hogy nem olvastam vissza 353 oldalt
Köszi bárkinek aki elkezd velem kommunikálni erről.
(#) vilmosd válasza pityu_lite hozzászólására (») Aug 29, 2011 /
 
(#) Hp41C válasza pityu_lite hozzászólására (») Aug 29, 2011 /
 
(#) pityu_lite válasza vilmosd hozzászólására (») Aug 29, 2011 /
 
Köszi nektek. Pont ezt a magyarnyelvű doksit olvastam én is csak saját felfogásomban támadtak kételyek de ez tényleg szépen leírja a dolgokat. Ha jól értem:
A slave eszközökben csak be kell állítani a TWI regisztereket ilyen slave módra és az interruptot engedélyezni kell nekik, és akármikor programfutás közben a Master elkezdi az adatokat ráadni a TWI buszra (megjelenik a START jel) akkor mindegyik eszköz felfigyel , beugrik ebbe az interrupt rutinba és ha a következő bájt egyezik az ő beállított címével akkor ad egy ack jelet és fogadja a további adatot , amivel az interrupt rutinon belül kezdhetek valamit. Ilyenkor a többi várja az újabb interrupt flaget...gondolom?! Ezeket az általános cím kódokat is lehet programozni vagy ezek be vannak égetve a hardweres TWI -ba? Magyarán ha tényleg pl egy kikapcs parancsot akarok mindnek küldeni akkor elég címnek ezeket az általános címeket beállítani és akkor mindegyik eszköz figyelni fog?
(#) sikolymester válasza pityu_lite hozzászólására (») Aug 29, 2011 /
 
Mindegyik csak a sajat cimere reagal. Helyes mukodes eseten ha egy I2Cs eszkoz tehat olyan adatot eszlel a buszon mely nem neki lett cimezve, akkor azt tovabb mar nem is figyeli.

Amennyiben mindegyik eszkoznek szeretnel uzenetet kuldeni, akkor amennyiben emlekeim nem csalnak a 00 -as cimzest kell alkalmazni, ami az un. broadcast message. Ezt mindegyik I2C eszkoz olvasni fogja.
(#) sikolymester válasza kovacsj hozzászólására (») Aug 29, 2011 /
 
Ha jol latom, akkor gsm modul 4V-rol megy, mig az atmega128 3 Voltrol. Nos, ezzel gond lesz, hiszen az AVR uC-k rendszerint csak VCC+0,5 V jeleket birnak el. Persze van a labukon egy vedelmi dioda, de mivel a gsm modult nem ellenallasokkal kototed ossze az AVR-rel, a dioda marha gyorsan elfustolhet, majd utana az AVR is.

Tovabba nem biztos hogy az AVR 3V-os jelet a gsm modul logikai igaznak ertelmezi.

Amit javaslok az az, hogy egy taprol uzemeljenek, vagy maskulonben hasznalj szintillesztot. Nezz korul pl texas instrumentsnel, vagy maximnal.
(#) leglacika válasza krcko hozzászólására (») Aug 29, 2011 /
 
Szia krcko !

Igazad van ! A kiolvasott hibák számát és kódját jeleníti meg a uC ebben az üzemmódban.
Próbaképp okoztam egy hibát (lehúztam a beszívott levegő hőmérséklet szenzort). Szépen jelezte is, hogy 1 hiba van, kódja:20B1E.
Ha lesz még kedved/időd, kérlek nézd meg hogyan kell belépni az élőadat lekérdező funkcióba !

Köszönök mindent !

Üdv.: Laci.
(#) kovacsj válasza sikolymester hozzászólására (») Aug 29, 2011 /
 
Each digital I/O of the module operates in a 2.8V logic level inside the module. The voltage
level of those digital interfaces connected to the module should match the electrical
characteristics of the module listed in Table 3.
Otherwise, a level shifter circuit must be inserted between the host and the module.

A GSM modul UART Feszültségszintjei:
V(Inpot low) 0.0-0.67V
V(input high) 1.7-2.8+0.3V
V(output low) 0.0-0.34V
V(ouput high) 2.0-2.8V

Vagy ezt a szintet kell beállítani, vagy szintillesztést kell alkalmazni.

A GSM modul kifelé max. 2.8V-ot fog adni.
(#) kovacsj válasza kovacsj hozzászólására (») Aug 29, 2011 /
 
Ezért gondoltam, hogy a 3V és a 4V jó választás lesz, mivel a GSM modulnak annyi az optimális, gyárilag előirányzott.
3.4V-4.5V (4V nominal)
Ennek ellenére kifelé max. 2.8V-ot fog adni.
(#) kovacsj válasza sikolymester hozzászólására (») Aug 29, 2011 /
 
Milyen ellenállásokkal kellene összekötni az AVR-t a GSM-modullal?
(#) sikolymester válasza kovacsj hozzászólására (») Aug 30, 2011 /
 
Ezeknek a fenyeben vedd ugy, hogy nem is szoltam . Ami az ellenallast illeti, az abban az esetben kellett volna, ha mondjuk a gsm modul nagyobb feszultsegu kimenettel renxelkezik. Az avr labain van egy-egy vedodioda a tulfesz illetve a negativ fesz ellen. Az elobbi a bemenetrol a tapra kotve, utobbi a foldrol a bemenetre. Ezek "elvezetik" a nem odavalo feszt. Mivel ezen a diodan korlatlan aram nem kepes folyni, ezert erdemes egy ellenallast sorba kotni ele, ami korlatozza az aramot.

Erdekesseg, hogy egy atmel appnote szerint egy 1MOhmos ellenallassal meg a halozati 230V RMS is rakotheto a labakra, ha pl. a fazisatmenetet szeretnenk tudni.

A min. ellenallas erteket mindig a tapfesz, a rakapcsolt fesz, illetve a vedodioda maximalisan elviselt arama adja.
(#) Robi98 hozzászólása Aug 30, 2011 /
 
Sziasztok!
Azt szeretném kérdezni,hogy AVR-eknél milyen órajel és előosztás eredményez ~1 másodperces periódusidőt? (timer-ekről beszélek)

Köszönöm!
(#) Topi válasza Robi98 hozzászólására (») Aug 30, 2011 /
 
Ez attól függ, hogy milyen kristályod van, és melyik timert használod.

Valami további infót adj még meg.
Mert 32,768KHz-től 20MHz-ig elő lehet állítani pontos 1mp-et.
(#) Robi98 válasza Topi hozzászólására (») Aug 30, 2011 /
 
Nekem 8Mhz-es kristályom van és 8 bit-es timer-re gondolok.
(#) Topi válasza Robi98 hozzászólására (») Aug 30, 2011 /
 
Ha van CTC-d, akkor az OCRx értéke:
OCRxx = F_CPU/elősztás/kívánt_freki-1;

Tehát ha pl. 100Hz kell, 8-as előosztással, akkor:
OCRxx = F_CPU/8/100-1;

Amennyiben kis bitszámú timerrel kell ezt előállítani úgy nem kell feltétlen CTC, mert a legnagyobb előosztáson is nagy lesz a freki.
Ilyen esetben fordítva kell számolni.
tick = F_CPU/OVF/(esetleg ELŐOSZTÁS)
tick = 8 000 000 / 256

  1. #define SEC_TICK  (F_CPU/256)
  2. unsigned short tick;
  3. ISR(xxxx_OVERFLOW) {
  4.   if(tick) {
  5.     tick--;
  6.     if(tick==0) {
  7.         //Egy másodperces utasítások
  8.         tick = SEC_TICK
  9.     }
  10. }


Ez csak egy egyszerű példa. Azért van ilyen bonyolultan megírva, és nem úgy hogy:
  1. ISR(xxxx_OVERFLOW) {
  2.   if(tick) tick--; else {
  3.         //Egy másodperces utasítások
  4.         tick = SEC_TICK
  5.   }
  6. }


Mert előbbi pontos, utóbbi 1-1 Overflow alkalmával mindig 1/31250-ed hibát belevinne.

Ha hardverből szeretnél 1 másodpercet (tetszőleges kristály frekivel), akkor bizony 16 bites timerre van szükséged. Mert ezen megoldások hibát visznek bele az idő alapba az utasításvégrehajtási idő miatt.
De természetesen ha csak megközelítőleg pontos 1 sec kell akkor bőven jó. Egy nem kritikus pontosságú (óra:perc) kijelzésű órához is bőven jó a tick-es osztás módszer.

De minden módszernél kerüld a bonyolult utasításokat a timerben. Csak egy flag-et (bitet, vagy bájtot) célszerű ott állítani, mert látható hogy az új tick érték csak a megszakításban leírt utasítások végrehajtása után fog megtörténni.
(#) varttina hozzászólása Aug 30, 2011 /
 
Sziasztok!

Már legalább egy éve kacsintgatok a digitális áramkörök felé, de eddig nem tudtam eldönteni, hogy milyen mikrovezérlővel kezdjem az ismerkedést. Végül az Atmega 8 mellett döntöttem.
Tegnap megérkezett a csomag, benne az AVR-rel.
Ezt a programozót építettem meg apró módosítással, a BC549-t BCW66-tal helyettesítettem.
Fordítónak a Wavrasm-ot használtam, a programozáshoz pedig a Ponyprog2000-et.
A próbapanelem rendkívül egyszerű, viszont minden port ki van vezetve tüskesorra, így szinte bármit rá tudok kötni.
Első programom nem csinál mást, mindössze 3 db ledet felváltva villogtat.
Idővel meg szeretnék ismerkedni a C nyelv rejtelmeivel is, de most ezer más fontosabb dolgom van.
  1. .INCLUDE "atmega8.inc"
  2.  
  3. ;main program
  4.  
  5. .ORG 0x00
  6.  
  7. ldi r16,high(ramend)
  8. out SPH,r16
  9. ldi r17,low(ramend)
  10. out SPL,r17
  11.  
  12. ldi r16, 255
  13. out ddrb, r16
  14. ciklus:
  15.   ldi r16, 1
  16.   out portb, r16
  17.   rcall delay1
  18.  
  19.   ldi r16, 2
  20.   out portb, r16
  21.   rcall delay1
  22.  
  23.   ldi r16, 4
  24.   out portb, r16
  25.   rcall delay1
  26. rjmp ciklus
  27.  
  28.  
  29.  
  30. delay1:
  31.   ldi r17, 0xff
  32.   cik1:
  33.     ldi r18, 0xff
  34.     cik2:
  35.       nop      
  36.       nop
  37.       nop
  38.       nop
  39.       nop      
  40.       nop
  41.       nop
  42.       nop
  43.       dec r18
  44.       brne cik2
  45.     dec r17
  46.   brne cik1
  47.   ret


Aki csak most akar megismerkedni az AVR-ekkel, azt javaslom ne habozzon! Féltem, hogy működni fog-e a programozóm, vagy hogy a letöltött szoftvereket be tudom-e állítani. Szerencsére minden ment elsőre, csak az eredeti programon kellett kicsit módosítanom. Fentebb már a javított, működő program látható.
(#) almacsutka hozzászólása Aug 30, 2011 /
 
Sziasztok!

Megépítettem a Topi féle avr-programozót.
A kérdésem: Egy usb hosszabítót szétvágtam s 5 vezetékem lett. Ezt akarom össze forrasztani a panellal, akkor az usb csatlakozó külső házának a vezetékét kössem össze a gnd-vel(a 4. érintkező kábelével)?

Köszi!
(#) zombee válasza almacsutka hozzászólására (») Aug 30, 2011 /
 
NE kösd össze!

A ház az árnyékolásra csatlakozik, de jobban teszed ha a programozó oldalán ezt szabadon hagyod lógni.
Ugyanis a föld(GND) az alaplapi csipszetre, a ház(SHIELD) pedig nagyon sokszor a gépházra megy.
Galvanikus szempontból talán nem számítana, de itt hurkok vannak, és az alaplapon érzékeny áramkörök.
Számítógépszetelő vagyok, és láttam már bőven olyat ahol galvanikus kapcsolat sincs a kettő között...
(#) kovacsj hozzászólása Aug 30, 2011 /
 
Sziasztok!

Ez most milyen lett így? MInden kritikát kitörő örömmel fogadok.

gsmrajz1.png
    
(#) zolee1209 válasza kovacsj hozzászólására (») Aug 30, 2011 /
 
Amit javasoltam, azt még nem kötötted be...
(#) kovacsj válasza zolee1209 hozzászólására (») Aug 30, 2011 /
 
Igazad van! A kondenzátor!
(#) Reggie válasza kovacsj hozzászólására (») Aug 31, 2011 /
 
Ami hianyzik a rajzrol:
1. Kvarc az AVR-hez(idealis lenne 7.3728MHz)
2. A taplabakhoz kozvetlen 100nF szuro kondik.
3. AVCC bekotese hianyzik. Ha hasznalod az analog reszt, akkor celszeru egy soros szuroinduktivitast is bekotni, valamint szurokondenzatort is. En spec. 4.7nH-t es 1µF -ot szoktam hasznalni.
4. Ha ADC-t hasznalod, akkor AREF labra 10-100nF szurokondit kell rakni.
5. Celszeru lenne az EMERG_OFF labat is bekotni. Ezzel a labbal veszhelyzetben tudod leallitani az eszkozt, igy nem kell a sorosporton a kikapcsolast kerni.(pl tulmelegedes eseten, ha mersz homersekletet is, vagy ha mered a tapfeszt, akkor a tapfeszultseg megengedett tartomanyon kivulre esese eseten is, stb)
6. Amennyiben szeretned a GPS modul RTC funkciojat is hasznalni, akkor a VRTC labra egy gombelemet kell kotni, kulonben tapfeszultseg hianyaban elfelejt mindent, es ha az ebreszto funkciot is szeretned hasznalni, akkor a VDD_EXT labat a mikrokontroller egyik INT labara kell kotni, hogy ebreszteni tudja a mikrokontrollert is.
7. RTS/CTS labakat szinten celszeru bekotni, mert lehet, hogy nem tudod a bejovo adatokat megfelelo sebesseggel feldolgozni es ezek hasznalataval a puffertulcsordulast meg tudod elozni.

Amit modositani kell:
1. A PWRKEY bemenetet a mikrokontrollerre kell kotni, mert igy tudod majd bekapcsolni a GSM modult.
2. A modul tapjara 100µF tantal es 0.2-1µF keramia kondit kell kotni, lehetoleg minnel kozelebb a modulhoz.
3. A GSM modul tapkoreben az LM317 helyett valami nagyobb aramu stabilizatort hasznaljal, mert adas alatt rovid ideig akar 1.8A(2A max) is lehet az aramfelvetel, ha maximalis kimeno teljesitmenyen hasznalod.

Ami gyanus:

1. A modulon a rajzod szerint van egy STATUS lab a VCHG es RI lab kozott. A dokumentacio szerint ott egy fenntartott lab van. Mivel a rajzodon nincsen a labszamozas feltuntetve, igy nem tudom, hogy az jo-e.
(En ennek a leirasnak alapjan ellenoriztem.) Ha a halozat allapotat jelzo ledet kototted oda veletlen, akkor rakd at az egeszet a NETLIGHT labra.
(#) dokidoki hozzászólása Aug 31, 2011 /
 
Sziasztok.
Nekifogtam egy projektnek, http://www.microsyl.com/index.php/2010/03/20/mp3player/ ez lenne tervben megépítésre. Kezdésnek rendelkezésre áll a távirányítóhoz a mega8 és a 3310 nokia kijelző. Mielőtt jobban belevágok a projektbe gondoltam kipróbálom.
A hibajelenség annyi, hogy a kijelzőn tükrözve jelenik meg a szöveg amit a proci küld. Bekötések stimmelnek, ránézésre működik, amennyire a gombok és a kijelző lehetővé teszi.
Mivel mega8 és AVRICC (demó) a fordító, gondoltam ide írom.
Nem vagyok nagy penge a szoftver írásában, így nem látom hol lehet a hiba. Átnéztem több projektet ami erre a kijelzőre és erre a fordítóra épül, de nem hozott eredményt a számomra.
A forráskódot újrafordítottam, de változatlan a helyzet.
(Még az elején belebotlottam vizsgálódás közben, hogy valakinek volt ugyanez a hiba, de nem tudom visszakeresni valami miatt...)
Könnyen lehet, hogy más hiba is van a távirányító szoftverében, mintha nem kapcsolna ki, és gombok nyomkodása sem hoz változást, kiírja az üdvözlőszöveget, meg: "Song List" és itt megáll.
De elsőnek az zavar, hogy tükörből kell olvasni a kijelzőt.
Csatolom a fájlokat, hátha valaki látja a hibát.
Köszönöm.
(#) kovacsj válasza Reggie hozzászólására (») Aug 31, 2011 /
 
Nagyon szépen köszönöm, Reggie!
Mindezeket figyelembe fogom venni!
A Status lábat egy újabb dokumentáció szerint tettem oda, ezt csatolom.
Következő: »»   356 / 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