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   737 / 837
(#) rascal válasza monxla hozzászólására (») Máj 22, 2016 /
 
Szerintem ha a szimulátor nem kezeli, akkor az azt jelenti, hogy amit oda írsz, akkor az nem tárolódik sehol. Ha később arról a címről kiolvasol valamit, akkor vagy valami előre definiált értéket kapsz vissza, pl. amit valóságban is kapnál ha nincs illesztve külső memória, vagy valami random értéket. Ha még nem tetted, akkor szerintem próbáld ki.
(#) monxla válasza rascal hozzászólására (») Máj 23, 2016 /
 
Igazad van, Köszi!
Kipróbáltam mindig FFh-t kapok vissza.
Egyébként nem értem miért nem támogatja a szimulátor.
(#) rolandgw válasza monxla hozzászólására (») Máj 23, 2016 /
 
Gondolom,mert a szimulátor nem tudhatja,hogy mit tettél az interface-re.Tehetsz például LCD-t is.
(#) rascal válasza rolandgw hozzászólására (») Máj 23, 2016 /
 
A 6.2-ben már próbálkoztam a stimulival, de az még ott nekem elég kezdetlegesnek tűnt. A 7.0-ban még nem néztem milyen, de ha arra ráfeküdnének a fejlesztők, akkor azzal nagyon szépen lehetne külső eszközök illesztését emulálni.
(#) Droot hozzászólása Jún 4, 2016 /
 
Sziasztok!

Egy projektemben szeretnék üzemórát számlálni. Az eszköz 0-24H-ig áram alatt van.

Két megoldást találtam:
- olyan memória ami akármennyiszer írható
- EEPROM és pl naponta elmenti az üzemórát, ha érzékeli, hogy a tápfesz bizonyos szint alá csökkent (elment az áram), akkor azonnal ment és a mikrokontroller tápja jól meg van pufferelve

Azzal számolok, hogy 100 bájt tárolására van szükség. A tervezett élettartam minimum 25 év, ennek elteltével nem baj ha ledöglik a memória chip.

Van valami jobb ötletetek rá? Milyen ipari megoldás létezik erre, ami nemmechanikus számláló?
(#) Kovidivi válasza Droot hozzászólására (») Jún 4, 2016 /
 
Rakj be több EEPROM-ot, és használd mindet. Ezzel többszöröződik az élettartam, vagy használd őket mint biztonsági tároló. Ha 4 EEPROM-od van, simán kieshet egy, a maradék dolgozik tovább, és adatot sem vesztesz. Egy EPPROM manapság filléres tétel.
(#) gabi20 válasza Droot hozzászólására (») Jún 4, 2016 /
 
Esetleg használhatsz pl. DS1307 chipeket. Ezeknek van általánosan felhasználható memóriájuk is. Tetszőleges számban írható, és egy kis 3V-os elem tartja benne az életet áramszünet esetén. Igaz ha jól emlékszem egy ilyen chipnek csak 56 bájt memóriája van de be lehet kötni többet is egy I2C portra.
(#) holex válasza Droot hozzászólására (») Jún 4, 2016 /
 
Miért kell 100 bájt? 4 bájton elfér több mint 120 évnyi üzemóra - másodperces felbontással.
Ezt, ahogy gabi20 is írta, tárolhatod mondjuk egy DS1307 RAM-jában, akár másodpercenként frissítve. És ezt mondjuk kiírod naponta 1x EEPROM-ba, így elmegy minimum 300 évet.
(#) Droot válasza gabi20 hozzászólására (») Jún 4, 2016 /
 
Ez jó ötlet, eddig ez a legszimpatikusabb, mivel RTC úgyis lesz benne. Napi egyszer meg eepromba kimentem. Az 56 bájt talán elég lesz. Át kell néznem pontosan miket kell elmentenem.
(#) aticska válasza Droot hozzászólására (») Jún 4, 2016 /
 
Esetleg FRAM ?
(#) Droot válasza aticska hozzászólására (») Jún 4, 2016 /
 
Igazából ez lenne a legjobb megoldás. Jobb lenne ha 5V-ról menne, de tudok adni neku külön tápot.
Ez nem felejt ha a tápot leszedem ugye, jól értelmezem?
Az kicsit hihetetlen, higy 10^14-enszer lehet írni. Így ha percenként írnám akkor is több száz évig jó. Ezt jól értelmeztem?
(#) Sick-Bastard hozzászólása Jún 4, 2016 /
 
Üdv!

Az AVR(atmega1284p) RTC-je mitől adhatja be a kulcsot?

Szituáció:
Próbapanelen fut a kódom, már egy hónapja gond nélkül. (Igazából 3-4 hónapja - nem részletezném)
A fő program most is fut, csak az RTC hiánya miatt bizonyos sorok nem futnak le.

A gond az orrom alatt történt. Hazajöttem, láttam, hogy minden megy (indikátor ledek villogtak). PC-met bekapcsoltam (ami USB-Sorossal kapcsolódik a próbapanelhez), böngészgettem a neten... stb. majd egy pillantást vetettem a panelre.
Ekkor vettem észre, hogy az óra indikátor ledjei nem villognak. Gondoltam az egész kód lefagyott, pl BAD Interrupt Vector vagy a feszültség esett le egy pillanatra vagy valami. Ekkor vettem észre, hogy a fő program indikátor ledje viszont villog.
Így kipróbáltam egy resetet, meg még vagy hármat. Semmi változás, az óra nem indult újra.
Van a panelen egy külső RTC is, amiből reset esetén olvassa be a "pontos" időt. Ez is jól működik.

Eddig csak a kristályt(32,768Hz) cseréltem ki, hátha.... de nem segített.

A panel egy 2A-es USBről kapja az energiát, amit egy MCP1827S-3302EAB szabályoz le 3,3V-ra (3,1V-ot mérek).
A TOSC1/2-n csak a 32,768Hz-es kristály van, nincs se kondi se ellenállás rajta.
(#) zombee válasza Droot hozzászólására (») Jún 4, 2016 /
 
Ha maradsz AVR-nél akkor ott a wear leveling amit az SSD-k is használnak - igaz, kicsit másképp. Az eljárás lényege, hogy az írásigényt elosztod egy nagyobb memóriaterületre. Sokkal több EEPROM tárterületet használsz mint amire szükség van(3-4 bájt), de az írási műveletet szétosztod.
(#) Droot válasza zombee hozzászólására (») Jún 4, 2016 /
 
Rengeteg dolgot fog csinálni a mikrokontroller, ez már nem fér bele. Az FRAM-ot szeretném használni. Ha valakinek lenne még tapasztalata az jó lenne.
Én fogok vele csinálni egy tesztet, amiben több milliószor újraírom és kiolvasom amit beleírok. Olyan gyorsan fogom csinálni (stresszelni) amennyit az az i2c csak tud.
(#) Sick-Bastard válasza Sick-Bastard hozzászólására (») Jún 5, 2016 /
 
Elnézést egy fontos információ kimaradt.

A hónap elején már volt egy RTC hiba. Nem értettem mi is történt. Amikor megnéztem a panel órabeállítását, akkor az év, hónap, nap és a hét napja mind rendben voltak, de az idő kb 7 órával le volt maradva az aktuális időtől.

Mivel az RTC akkor ment, csak újra beállítottam az időt és kész.

Ma reggel az RTC még nem ment, de kb fél órája gondolt egyet és elindult magától. Nem volt reset és az RTC-t a kódban csak a fő ciklus előtt inicializálom.

A jelenséggel azonban, új megvilágításba került a probléma.

Az RTC nem adta be a kulcsot (szerencsére), de valamiért néha kihagyni.

Valakinek valami ötlete?
(#) rascal válasza Sick-Bastard hozzászólására (») Jún 5, 2016 /
 
Nem változtattál mostanában valamit a kódon? Nem változott semmi olyan külső körülmény mostanában, ami miatt eddig esetleg nem sűrűn használt ágakra is eljut a program? Én pl. mai futottam bele olyan hibába, hogy lds helyett ldi utasítást írtam (de in helyett írtam már ldi-t), amit a fordító lefordít, és ha olyan helyen van nem mindig tűnik fel azonnal, hogy valami nem ok.
(#) Sick-Bastard válasza rascal hozzászólására (») Jún 5, 2016 /
 
Már egy jó ideje nem változtattam rajta, vagy 2 hónapja. Eddig a legnagyobb fejtörést az AVR reset lábára kötött felhúzó ellenállás okozta, ami nem volt a panelba rendesen bedugva. Illetve régebben a kódban maradt véletlenül az UART-hoz a RXCIE bit is, miközben nem volt hozzá ISR definiálva. Ezek ki lettek javítva.

Kerestem eddig még nem használt ágakat, de nem találtam. Ill még cli() parancsot is kerestem, hátha valahol ez állítja le az órát, de ilyen sincs a kódban.

Dél óta viszont ismét megy magától, úgy hogy nem nyúltam hozzá.
(#) rascal válasza Sick-Bastard hozzászólására (») Jún 5, 2016 /
 
Lehet hülyeséget kérdezek, de a 32K-s kristályról az egész proci megy, vagy csak az RTC? Ha az utóbbi, akkor annak a kontakt hibája nem lehet? Annak a működését még kívül tudod valahogy ellenőrizni?
(#) Droot válasza rascal hozzászólására (») Jún 5, 2016 /
 
Milyen messze van a kvarcoszcillátor a mikrokontroller lábaitól?

(Max 5mm-re szokták tenni de ezt a picit 2-3mm-re is lehet és fektetve. A kis oszcillátor alá pedig gnd-ből szoktak fóliát kialakítani. Nagyon óvatosan nem árt odapöttyinteni hozzá egy kis ónnal, hogy a ház gnd-n legyen.)

A mikrokontroller tokban van?

Szerk.: Itt van egy jó példa a 7. Oldalon.
A hozzászólás módosítva: Jún 5, 2016
(#) Sick-Bastard válasza rascal hozzászólására (») Jún 5, 2016 /
 
Az AVR belső 8Mhz-ről megy. Csak az RTC kapja a 32KHz-es órajelet.
Kontakt hiba nem kizárhatatlan, de kicsi esélyt látok rá.

Megmozgattam a kristályt, semmi sem változott.
Ki is cseréltem a kristályt, utána sem indult.

Aztán puff gondolt egyet és beindult. Ezt a hibát másodszor produkálja.

Jelen pillanatban kipróbáltam két kristállyal is és mindkettővel működik.
(#) Kovidivi válasza Sick-Bastard hozzászólására (») Jún 5, 2016 /
 
Próbáld meg a kristállyal párhuzamos kondikat berakni, kivenni, értékét variálni. A kristály lábai között ne legyen se gyanta, se semmi. Legyen jó a kontaktus is, elég érzékeny a zajokra is ez a rész.
(#) Sick-Bastard válasza Kovidivi hozzászólására (») Jún 5, 2016 /
 
Mármint kondit tegyek a TOSC1 és TOSC2 lábak közé?
Vagy TOSC1/2 és GND közé, úgy mint az XTAL1/2 esetében?

Droot:
A kvarc <1cm-re van a vezérlőtől. Pontosan 3x0,1" azaz 7,62mm-re. Mindenesetre átraktam a lábakhoz legközelebb.

A NYÁk terveket már kb. úgy rajzoltam ahogy a ds1307 7. oldalán is szerepel.


Mindenesetre beillesztek még pár sor UART teszt funkciót a kódomba, ha újra előjönne a hiba ki tudjam olvasni.
(#) Droot válasza Sick-Bastard hozzászólására (») Jún 5, 2016 /
 
Alatta van gnd?
Nekem kezd gyanús lenni, hogy az rtcc beállításával is lehet gond.
(#) Sick-Bastard válasza Droot hozzászólására (») Jún 5, 2016 /
 
Próbapanel alatt? Tudomásom szerint nincs. Egy ilyenen van összekötve a kapcsolás.

Ha kontakt hiba vagy zaj lenne a ludas, akkor nem a frekvencia instabilitása lenne a jellemző? Ez alatt azt értem, hogy csak pár impulzus maradna ki vagy lassulna (talán gyorsulna) az órajel, ill. az órajel kitöltése ingadozna.

Ezekkel a beállításokkal használom:
  1. void RTC_Init(void)
  2. {
  3.         ASSR |= (1<<AS2);              
  4.         TCCR2A |= (1<<WGM21);
  5.         TCCR2B |= (1<<CS20)|(1<<CS21)|(1<<CS22);
  6.         OCR2A = 31;
  7.         TIMSK2 = (1<<OCIE2A);
  8. }
(#) Droot válasza Sick-Bastard hozzászólására (») Jún 5, 2016 /
 
Én összeraknám nyákra. De forraszd rá direktbe az ic lábára a kvarcot felülről és úgy dugd be az ict. Én is ilyenen rakom össze a legelső prototípust pl amíg a panel gyártás alatt van. Szivatott már meg hasonló hibával.
(#) rolandgw válasza Sick-Bastard hozzászólására (») Jún 6, 2016 /
 
CTC/1024 miért kell ? Normál mód nem jó 128-as osztással? Wait-t is ajánlott az init kódba.

Avr134.c
    
(#) Max26 hozzászólása Jún 6, 2016 /
 
Sziasztok!

Van ez a program: LabVIEW , amivel ismerkedem . Ha jól értem ez egy szoftveres modellezőprogram, amihez kellenének saját hardverek?

Például:

Eddig a hőmérsékletmérést RealTerm-el fogadtam PC-én. Lehetséges-e, hogy hőmérsékletmérést jelenítsek meg LabVIEW-ben grafikusan (hőmérő formájában, vagy diagramon), ekkor UART adapterrel USB-n küldeném a hőmérséklet adatokat valamilyen protokoll szerint?
(#) Ivan93 válasza Max26 hozzászólására (») Jún 6, 2016 /
 
Szia!
A LabVIEW egy grafikus fejlesztői környezet. Modellezésre, mérésre, adatgyűjtsére, gyakorlatilag bármire használhatod, de kellhet hozzá extra toolkit, hardver. Az NI gyárt hozzá különféle hardvereket, persze Te is elkészítheted a sajátjaidat. A soros kommunikációhoz szükséged lesz a VISA toolkit-re, ez ingyenes.
Én tanultam LabVIEW-t programozni, szerintem nagyon jó, sokmindent egyszerűbb megoldani, mint szövegesen kódolni. Viszont van egy nagy hátránya, iszonyú drága a program, és a legtöbb toolkit-ért is komoly összeget kérnek. Szerencsére mi kaptunk teljes diákverziót, de toolkit-ek nincsenek.
(#) Sick-Bastard válasza rolandgw hozzászólására (») Jún 6, 2016 /
 
Csak megértettem mire is célzol. Majd azt a módot is kipróbálom. Bár van ennek valami jelentősége?

Minden esetre úgy néz ki, hogy sikerült egy UART-os debug kódot beillesztenem. (Nincs JTAG debuggerem) Ha előjönne megint a hiba, akkor meg tudom nézni a regiszterek állapotát.
(#) Sick-Bastard válasza Sick-Bastard hozzászólására (») Jún 8, 2016 /
 
Sikerült a debug kódommal kiolvasnom a Timer2 regiszterek értékeit a hiba megléte során.

Reméltem, hogy csak valami kódhiba lesz, ami átír benne valamit, de nem.
Minden érték az általam megadott maradt.
Még azt is kipróbáltam, hogy mi lesz, ha átállítom (a debug kódon keresztül) aszinkronról szinkronra. Ekkor az óra elindult, persze a sokkal nagyobb sebességgel.

Majd visszaállítottam aszinkron módra. Ekkor még nem indult el.

Most, miközben írom, indult el magától. Az indulás döcögős, az indikátor led (másodperc villogó) elsőre csak 4mp-ként villant egyet, aztán már 2mp-ként, majd elérte az "üzeli" tempót.

A TCNT2 értéke 8-nál állt meg. Ebből is arra következtetek, hogy valóban az oszcilláció áll le valamiért.

Most ezen ragadt meg a tekintetem:
Idézet:
„Crystals specifying load capacitance (CL) higher than 8.0 pF, require external capacitors applied
as described in Figure 7-2 on page 29.”


A HS-bn én ilyen kristályokat vettem anno, aminek ez a bizonyos Load Capacitance értéke 12,5pF, az adatlap szerint.
Jól értem, hogy ezek alapján valóban kellene két kondi a TOSC1/2 és a GND közé? Mekkora is kellene oda? (Van az adatlapban egy képlet, de ezen nem igazodok ki.)
Következő: »»   737 / 837
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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