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   799 / 837
(#) srac321 hozzászólása Okt 31, 2018 /
 
Tisztelt AVR-esek!

Készítettem egy PCB-t, aminek a lelke egy ATtiny88 (TQFP tokban), ami egy 3X7 szegmenses led kijelzőt vezérel. Feltöltöttem a programot és azt hittem valami hardver hiba miatt nem mutatja a számokat (mert a program müködőképes volt a Proteus szimulációban), emiatt multiméterrel átnéztem minden szálat. Nem találtam hibát.
Leegyszerűsítettem a programomat annyira, hogy már csak egy számot keljen kijelezzen. Ekkor lettem figyelmes a jelenségre amire kérném a segítséget. ==>

Ugyanazt a hex fájlt felprogramozva, egyszer működik a kijelző, máskor csak zagyvaságokat mutat. Teljesen összevissza. Egyszer szépen számol 0-9ig, aztán ugyanazzal a hex-el zagyvaságok jelennek meg.

Mitől lehet ez?

Egy STK500-as programozót használok (amit innen a hobbielektronika cikje alapján készült). AVR studio 7-el, ami Win7 alatt fut.
(#) Steven19 válasza srac321 hozzászólására (») Okt 31, 2018 /
 
Szia. Ehhez hasonló dolog velem is előfordult már. A megoldás néha az hogy lehúzom a programozót és nélküle bekapcsolom az áramkört. Nekem AVR ISP MKII-vel fordult elő, vagy a technika ördöge szórakozik veled.
A hozzászólás módosítva: Okt 31, 2018
(#) Szasza9668 hozzászólása Nov 1, 2018 /
 
Sziasztok!

Bináris órát készítek, atmega8 alapon.
Ha az aktuális mondjuk percet szimplán megadom mondjuk a portb-re akkor az int lábakat tudom inputra használni?
Természetesen az int0 és int1 lábat inputra állítottam, a portd többi lábát meg outputra.

Köszönettel:
(#) Zsolt2 válasza Szasza9668 hozzászólására (») Nov 1, 2018 /
 
Lehet hasznalni. Ha a kimenti regiszter erteket allitod, akkor ki- illetve bekapcsolod a belso felhuzo ellelenllast, szoval azokat a biteket, hagyjad mindig fix erteken.
(#) rolandgw hozzászólása Nov 1, 2018 /
 
Így kell fizetőssé tenni az avr-gcc-t:
Bővebben: Link
(#) Kovidivi hozzászólása Nov 1, 2018 /
 
Sziasztok!
PWM jelből szeretnék DC feszültséget előállítani, RC taggal símítva. Olyat próbált már valaki, hogy először magasabb frekin, alacsonyabb felbontással gyorsan, de nagy hullámossággal megközelíti a végleges DC feszültséget, majd ha letelt a beállási idő egy része, akkor átvált a végleges frekire?
Tehát először 62.5KHz-es PWM-mel, 8bit felbontás mellett gyorsan beáll az RC kör, majd átváltok mondjuk 976Hz-es PWM-re, ami 14bit felbontást, és alacsony hullámosságot eredményez. Tehát a beállási időt szeretném megspórolni. Szerintetek? Köszi.
(#) killbill válasza Kovidivi hozzászólására (») Nov 1, 2018 /
 
A magasabb frekitől nem lesz gyorsabb a beállási idő. A beállási idő kizárólag az R és C értékétől függ.
(#) kapu48 válasza Kovidivi hozzászólására (») Nov 1, 2018 /
 
És még a kimenetet terhelő A erősségtől is.

Én ezt szoftveresen oldanám meg.
Mikor változtatod a PWM értéket, rövid időre túl lövöd azt + vagy - értékkel.
Ezt a szükséges időt analóg méréssel ellenőrizheted. Mivel így rövidül a beállási idő.

Sajnos ez csak akkor jó ha nem használod ki a teljes feszültség állíthatóság tartományt!
A hozzászólás módosítva: Nov 1, 2018
(#) Kovidivi válasza killbill hozzászólására (») Nov 1, 2018 /
 
Tényleg. Igazad van.
Akkor gondolkodok tovább. Esetleg lehetne gyorsítani, ahogy kapu48 ajánlja. Nem is okozna problémát, mert egy referencia feszültség lenne, ami vagy 0V, vagy egy specifikus érték, aminél ha letelt a beállási idő, akkor engedélyezem az analóg áramkört. Jelenleg kb. 200mS beállási idővel dolgozok, jó lenne levinni 50mS alá. Igen, tudom, külső DAC, 16bit felbontással... Igazából az AVR PWM-jével is tökéletesen elégedett vagyok, csak szeretném a lehetőségeket 100%-osan kihasználni.
A hozzászólás módosítva: Nov 1, 2018
(#) Kovidivi hozzászólása Nov 1, 2018 /
 
Hello. Ismét én írok.
Szeretnék egy interruptos korrekt billentyűkezelést megoldani, de ahogy látom, ez nagyon komplikált.
Pl. az interruptban tudnom kell, melyik változót növelem/csökkentem jelenleg, a határokra figyelnem kell, átfordulhat-e a szám (0, 1, utána ismét 0? Ez igen/nem beállításoknál fontos), a nyomvatartáskori ismétlődési idő változó, pl. igen/nem-nél elég, ha 0.5-1mp-ként változik a változó, de egy szám, ami 0-tól 2000-ig állítható, már több lépcsős "gyorsulás" lenne a megfelelő, ne kelljen órákig várni. Ti hogyan szoktátok ezt megoldani? Ha jól gondolom, ehhez egy komplikált beállításokat tároló tömb kellene, ami alapján dolgozik az interrupt...
Az LCD-re iratás interruptból, animációval, csak a szükséges helyek frissítésével sokkal egyszerűbb. Ha jól gondolom, ahányszor belefogtam a gomblenyomás lekezelésébe, mindig kicsit más megoldást használtam...
Köszi a tippeket.
A hozzászólás módosítva: Nov 1, 2018
(#) kapu48 válasza Kovidivi hozzászólására (») Nov 1, 2018 /
 
Én pergésmentesítésre előszeretettel használom az SN7474 2*D tárolókat.
Bővebben pdf: Link
7. oldal
(#) Kovidivi válasza kapu48 hozzászólására (») Nov 1, 2018 /
 
Köszi. A pergéssel sose volt gondom, azt programból a legegyszerűbb megoldanom. Ha egy gombot egymás után 2-4x, mondjuk 5ms-kénti gyakorisággal beolvasva, lenyomott értéket látok, akkor a gombot lenyomottnak veszem. Ha a gomb mondjuk 20 periódus óta le van nyomva, hosszú gombnyomásnak veszem. A nehezebb rész, hogy melyik változóval, mit, milyen határok között, milyen sebességgel csináljak...
(#) kapu48 válasza Kovidivi hozzászólására (») Nov 1, 2018 /
 
Ezt a megoldást én is ismerem, és szoktam is használni.

Csak te már annyira túlbonyolítottad a programozás feladatot, hogy próbáltam egyszerűsíteni.
A Problémák:
1. Prellezés, eltelt időmérés?
2. Rövid gombnyomás, eltelt időmérés?
3. Hosszú gombnyomás, eltelt időmérés?
4. A köztük eltelt idő figyelése?

Ezekre mindre kel 1-1 állandó érték, és 1-1 változó a mért értékek tárolására.
Az értékek beállítása szubjektív, függ az alkalmazó vérmérsékletétől és reflexétől.
(#) Kovidivi válasza kapu48 hozzászólására (») Nov 1, 2018 /
 
Ami kérdéseket feltettél, azok már megoldottak.
(#) borsozo válasza Steven19 hozzászólására (») Nov 9, 2018 /
 
A technika ördöge:
Nekem első időben hol sikerült, hol nem a programozás, míg végre rájöttem, hogy a programozó és a programozandó kontroller közötti szalagkábel hosszabb volt, mint amit szeretett. (Most kb 15cm, és stabilan működik)
Más: ha a kontroller programozásra is használt IO bitjeit másra is használja a sw, akkor előfordulhat, hogy beterhel, illetve más jelszinteket kap, mint ami kellene...
(#) viper3D hozzászólása Nov 15, 2018 /
 
Sziasztok!

Nem tudom, hogy jó topicba írom-e a kérdésemet, de hátha foglalkozott már valaki ilyennel. A lényeg, hogy hálózatról működő mikrokontrolleremhez szeretnék lényegében egy akkumulátort csatolni, ami áramszünet esetén megoldja a táplálást. Nem szeretném csak egyszerűen diódával rákötni mind a két tápot a veszteségek miatt. Megtaláltam az LTC4413 nevű nagyon jó IC-t, de sajnos csak DFN tokozással kapható, amit próbanyákhoz nem igazán tudok illeszteni. Van esetleg valakinek tapasztalata ezzel az eszközzel, hogy mivel lehetne helyettesíteni, vagy esetleg hogy lehetne ezt a DFN tokozást az áramkörbe illeszteni. Köszönöm előre is!
A hozzászólás módosítva: Nov 15, 2018
(#) Bakman válasza viper3D hozzászólására (») Nov 15, 2018 /
 
Mekkora fogyasztásról beszélünk?
(#) kapu48 válasza viper3D hozzászólására (») Nov 15, 2018 /
 
Kétoldalas csupa lyuk panelon, a hátára fordítod.
A kivezetéseket kivezeted szabványos tüske sorra.
A középső 11-es pinre ragasztasz a fogyasztásnak megfelelő hűtőbordát.
(#) zombee hozzászólása Nov 20, 2018 /
 
Sziasztok!

Atmel Studio 7 alatt programoznék ATTiny816-ot. Az alapdolgok mennek, átrágtam magam azon hogy ami korábban 1-1 bit volt az ma már egy egész regisztert kap változatos beállítási lehetőségekkel és sok-sok buktatóval. A legjobban mégis az bosszant, hogy a rengeteg beállítandó regiszter bitjeit nem nevezhetem annak, ami. Pl. az ADC bekapcsolása:
  1. //hibás:
  2. ADC0.CTRLA = (1<<ENABLE);
  3. //jó:
  4. ADC0.CTRLA = 0b00000001;


Az "ADC0" elnevezésénél is csak véletlenül jöttem rá hogy kell a "0", holott az adatlap nem említi. Ezt már megszoktam a mega48-nál, hiába csak egyetlen USART van, USART0-nak kell hívni és kész.
A hozzászólás módosítva: Nov 20, 2018
(#) Kovidivi válasza zombee hozzászólására (») Nov 20, 2018 /
 
Szerintem valami ilyesminek kellene lennie: (1<<ADEN). Az egész csak attól függ, hogy az Atmel studioban hogyan vannak a dolgok definiálva. Gondolom valahol bele lehet nézni ezekbe az AVR specifikus definíciókba, vagy le lehet ezeket kérni. Hogy hogyan, azt nem tudom.
Ha bizonytalan vagy, az ENABLE értékét átküldheted soros porton, hiszen az ENABLE is csak egy szám 0 és 7 között (vagy 0 és 15 között).
A hozzászólás módosítva: Nov 20, 2018
(#) zombee válasza Kovidivi hozzászólására (») Nov 20, 2018 /
 
Az "ENABLE" konkrétan az ADC0.CTRLA regiszter legalsó bitje, az IC adatlapja szerint.
A klasszikus AVR-ekben megtalálható ADCSR regiszter ADEN bitjének felel meg:
  1. ADCSRA = 1<<ADEN;

Időközben megtaláltam a módját, hogy hasonlót hozzak ki ATTiny816-nál is:
  1. ADC0.CTRLA = ADC_ENABLE_bm;

Úgy néz ki, a microchip-éra AVR-jeihez nem elég az adatlap, kell a definíciós fájl is.
Egybites cuccoknál PERIFÉRIA_BITNÉV_bp felel meg a korábbi, klasszikus bitneveknek,
míg a *_bm a "shiftelt" változatnak. Kicsit túlbonyolították...
A hozzászólás módosítva: Nov 20, 2018
(#) rolandgw válasza zombee hozzászólására (») Nov 20, 2018 /
 
Idézet:
„Úgy néz ki, a microchip-éra AVR-jeihez nem elég az adatlap”

Ez nem az MC sara, már az XMEGA-nál bevezették. A fekete leves még ezután jön.
(#) csatti2 válasza viper3D hozzászólására (») Nov 21, 2018 /
 
Egy P-MOSFET-el, egy diódával és egy ellenállással készíthetsz olyan áramkört, aminél minimális az akkumulátor veszteség (feltételezem az akkumulátor veszteséget elég kiküszöbölni).
(#) bandi777 hozzászólása Dec 5, 2018 /
 
Üdv!

Az AVR belső eepromja (meg úgy általában az eeprom-ok)-at pontosan mi "öregíti"?
Konkrétan ha előzetes törlés nélkül írok egy bájtot, akkor csak azon bitek élettartama csökken amik 1-ek voltak, és 0-ra írtam, vagy azoké is ami már 0 volt eredetileg, és mégegyszer ráírok egy nullát?
Illetve törléskor a programozatlan (1) bitek is ugyanannyival öregednek mint a programozottak?
Az eeprom hogyan szokott tönkremenni (normál használat miatt)? A tönkrement bitet nem tudom törölni, vagy nem tudom nullára írni?
Valaki össze tudná pár mondatban foglalni?
Vagy esetleg tudtok ajánlani erről valami jól használható írást?
(#) vargham válasza bandi777 hozzászólására (») Dec 5, 2018 / 3
 
(#) BODHEAD hozzászólása Dec 8, 2018 /
 
Üdv.Érdeklödnék hogy tudnék egy atmega 8-at felprogramozni hogy AVR-doper legyen belöle
(#) vargham válasza BODHEAD hozzászólására (») Dec 9, 2018 /
 
Ha nincs programozód, akkor veszel egyet, vagy megkérsz valakit. Az AVR-ekben ugyanis nincs ROM bootloader.
(#) jimmi12 hozzászólása Dec 10, 2018 /
 
Sziasztok, remélem jó helyre teszem fel a kérdésemet ami a következő lenne:
- Atmel ICE-al lehetséges valahogyan SPI memóriát (w25qxx) írni/olvasni?
Keresgettem a neten ilyen jellegű témákat, de nem igazán találtam rá választ.
(#) Laslie hozzászólása Dec 11, 2018 /
 
Sziasztok!
Egy ATtiny45-be írok programot. Egy egyszerű LED villogtatás, ha a pir szenzor mozgást észlel.
Atmel Studio 6.2-ben, C-ben írom a kódot. A hex fájlt ezzel az STK500 klónnal írom ki, az avr breadboradban van. A kód szépen működik, az írás is megy. Pontosabban eddig ment. Ugyanis a legutóbbi AVR-be írásnál a következő üzenetet írta ki:
Idézet:
„Failed to enter programming mode. ispEnterProgMode: Error status received: Got 0xc0, expected 0x00 (Command has failed to execute on the tool) Unable to enter programming mode.”

Azóta nem ismeri fel az AVR-t. Még annyi információ, hogy a programozóra rádugva az avr-t elkezdett nagyon melegedni az avr. Mintha zárlatos lett volna.
Ezután próbáltam másik procival, egy ATtiny85-el (ez volt itthon), természetesen átállva a megfelelő procira a fordításhoz, újrafordítva a programot. Egyszer sikerült felírnom a hex-t, azóta azt sem tudom írni. Ugyan az a hibaüzenet fogad.
A netet végig túrtam már, hogy milyen megoldások jöhetnek szóba, pl a
Idézet:
„Disable debugWIRE and close”
opciót, ezt nem tudtam beállítani, mivel ugye nincs élő procim. Az avr írásnál a VCC-t a programozótól kapta az avr, de próbáltam már úgy is, hogy külön adok neki tápot.
Kérdés, hogy éltre tudom-e még kelteni ezt a két procit, vagy hagyjam, és vegyek inkább helyettük másikat?
A programozó tönkre mehetett? Ha nem, és ez a jobbik eset, hogyan tudom leellenőrizni, másik proci nélkül? (Újabb procit ma fogok majd venni.)
Szóval milyen úton induljak el, mit tanácsoltok?
Üdv.
A hozzászólás módosítva: Dec 11, 2018
(#) jimmi12 hozzászólása Dec 14, 2018 /
 
Sziasztok,

A fórumtársak közül akad valakinek tapasztalata AT32UC3C-s processzorral kapcsolatban? A probléma amiben segítséget kérnék a következő:
- adott egy AT32UC3C1512C processzor
- Atmel JTAG ICE debugger
- Atmel Studio 7
Atmel stúdióból próbálnám a processzort programozni JTAG-en keresztül (Tools -> Device programming). Kommunikálni tudok a processzorral, kiolvassa a Device ID-t, viszont az Erase Chip mindig hibára fut. (az erase user page működik)
Valakinek van ötlete mi okozhatja ezt a hibát?
Előre is köszönöm a segítséget!
Következő: »»   799 / 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