Fórum témák
» Több friss téma |
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
Értem, működik is szépen... Nagyon köszönöm a segítségeteket.
![]() Kezdődhet a további tervezgetés... ![]()
Sziasztok!
Ismerkedek a sleep mode-al az AVR-ben, ehhez kérnék segítséget. Lcd panelre irok ki pár adatot kocsiban. Állandó tápfesszel táplálnám (akku), és a gyujtással kapcsolgatnám ki-be a sleep mode-ot. Lehet olyan módban használni, hogy csak a változókban tárolt értékeket mentse el? Mikor felébreszteném ezekkel számolnék tovább.
Sziasztok!
Atmega328P AVCC bekötésénél a 10uH induktivitás kihagyása mekkora problémákat okozna? A 100nF természetesen megvan. Köszi.
Az sokmindentol fugg. Mennyire zajos a tap, milyen a panel kialakitas. De ha pl. nem hasznalod az A/D konvertert, akkor teljesen felesleges a 10uH. Nagyon sokat egyebkent sem szamit.
Természetesen használni szeretném a konvertert, csak nem tudok egyszerűen 10uH-hoz jutni.
Ha jo a panel, es nincs tul sok "zajforras" a digitalis tapon, akkor nem lesz vele baj tekercs nelkul sem. Ha nincs rendes ground plane, azaz egybefuggo jo fold, az ugyanolyan sok zajt visz a meresbe, mint a zajos AVCC. Csak az ellen nem tudsz vedekezni sehogy.
Idézet: „foprogramodban 20..50ms idonkent nezd meg a gomb allapotat” Valószínű hogy kitárgyaltuk már párszor, de ezzel vitatkoznék! A megszakítás arra való, hogy a nyomógombot NE kelljen folyton figyelni, különösen a főprogramban nem. Egy nagyobb főprogramban pedig esély sincs arra, hogy az a 40-50ms az minden körülmény közt annyi is maradjon, ráadásul a késleltetés (_delay_ms) bevitele lerontja az egész rendszer reakcióidejét. Ott viszont igazad lehet hogy az INT bemenet az nem nyomógomb érzékelésre való, és a 40-50ms sem hibádzik, de csak akkor ha ezt egy időzítő megszakításban teszi. Azon a 40-50ms időn mégis elgondolkoznék, mert (alkalmazástól függően) lehet hogy túl nagy késleltetést visz a rendszerbe. Csak gondolj bele, ha egy órát szeretnél állítani ahol jó gyorsan nyomkodnád a gombokat, de a rendszer már prell-nek érzékeli és egy tapodtat sem megy az óra számlálója! Láttam már ilyet (valami logikai játéknál), és meg kell mondjam, idegölő mutatvány így bármit megcsinálni. Az én javaslatom: Időzítő megszakításban kell figyelni a nyomógombot, de a megszakítás időtartama 1-5ms. Minden megfigyelt nyomógombhoz tartozik egy számláló amit csak az időzítő megszakítás kezel, tehát nem kell volatile. Illetve minden nyomógombhoz egy jelzőbit is tartozik(lenyomás jelzése), ez már volatile. Működés: 1: Ha a nyomógomb le van nyomva, ÉS a számlálója nincs a maximumon(kb. 30ms) akkor növelni kell. 2: Ha a nyomógomb nincs lenyomva ÉS a számláló nem nulla, csökkenteni kell. 3: Növelés esetén ha a számláló elér egy felső értéket(kb. 20ms), a jelzőbitet be kell állítani. 4: Csökkentés esetén ha a számláló elér egy alsó értéket(kb. 14ms), a jelzőbitet törölni kell. megj. #1: A számláló értékeket természetesen osztani kell az időzítő megszakítás periódulidejével. megj. #2: Egyes alkalmazásoknál a lenyomás "pillanatát" kell érzékelni, a nyomva tartást nem. Ilyenkor elegendő a főprogramban a jelzőbitet lenullázni, miután észlelte a lenyomást. Ez a hiszterézises prellmentesítés. Lehet hogy nem kezdőknek való, de ha valaki megérti a működését, az élvezni fogja! Ja és az egész a háttérben működik, A hozzászólás módosítva: Jan 5, 2015
megj. #3: Egyébként a PC-hez hasonló "typematic rating" funkció innen már csak egy lépés! Kell egy második számláló ami akkor lép működésbe ha az első eléri a maximumot, és ez a második akkor lép felfelé ha az elsőt már nem tudja felfelé léptetni. A második számlálónak először el kell érnie egy küszöbértéket(kb. 100-250ms), és akkor lehet jelezni egy gombnyomást(jelzőbittel). Utána a számlálót le kell csökkenteni a gyakoriságnak megfelelően(typematic rate setting), ha pl. 30/sec akkor 33ms-el. Ha újra eléri a küszöbértéket, akkor újra lenyomást jelez és csökkenti. Ha viszont felengedjük a nyomógombot, a második számlálót le kell nullázni és az elsőt eggyel csökkenteni!
Ments EEPROM-ba, és nem kell sleep-et használnod. Attól függően, milyen AVR-t használsz, lehet, hogy beépített EEPROM-ja is van. Pl. Atmega328-nak 1024byte.
A hozzászólás módosítva: Jan 5, 2015
Szia!
Szoval, en 20-50ms-ot mondtam, te 40-50-et emlegetsz. _delay_ms()-rol nem beszeltem, sot mi tobb, eppen azt mondtam, hogy ha amugy is van valami idoalap a programban, akkor annak alapjan kell hivogatni a foprogrambol. Ahogy a kerdezo programjaban voltak is timer alapu idomero valtozok. Nezd csak meg. A megszakitas es a pollozas kerdese jo, de ez itt egy specialis eset. A billentyuket valoban pollozni kell, de nem tul gyakran (20..50ms), masreszt nem kvarc pontosan, mert ezek megiscsak egyszeru nyomogombok, neha par ms keses nem jelent semmit. Tehat, ha kicsit lotyog, akkor sincs semmi baj. Egy megszakitas kiszolgalo (ISR) a leheto leggyorsabban fusson le, tehat ne toltse az idot billentyuk vizsgalgatasaval, mert lemarad a i2c, sorosvonal, stb-rol. Nem beszelve arrol, hogy a portok allitgatasa interruptbol sosem egeszseges. Errol mar volt itt szo korabban. Ezert aztan a billentyuk szkenneleset a legtobb esetben meg lehet oldani a foprogrambol valo ciklikus hivogatassal. Ennek tobb elonye van, mint hatranya. A modszer, amit leirsz, az valoban mukodik, de nem prellmentesitesre valo, hanem zavarszuresre, azaz rovid ideju impulzusok kiszuresere, egy jel stabil allapotanak detektalasara. De attol meg ugyanugy keslelteti az erzekelest, mint a ritkabb pollozas. Billentyuzethez erre nincs szukseg, mert ott nincsenek glitch-ek, csak prell. Egy billentyunel nem fordul elo, hogy fals kontaktod ad, ha nem nyulsz hozza, akkor az szakadas. A nyomogomb vagy vezet vagy nem. Csak a ketto kozotti atmenetben ugral. Elektromos zavarimpulzusokra meg ugye nem szamitunk, mert egy billentyuzetnel a termeszetebol adodoan eleg durva (akar 100us) R-C szurest alkalmazhatunk, ami eleg jol elnyom minden zavarjelet. Ha ilyen RC szures mellett zavarjel van egy vezeteken, akkor ott valami vagy rosszul van tervezve, vagy becsapott a villam.
Üdv. uraim.
Kérlek segítsetek: ezt a midi controllert szeretném megépíteni, de nem tudom milyen AVR kell bele, csak hogy atmega16, meg 40 láb, de a HEstore kidob több fajtát is. Extra kérés, de nem fontos: egyszerű AVR programozó link ha van kéznél ami ehhez a típushoz is jó(még nem tudom mi van a PC-men: soros, párhuzamos vagy csak usb csatl.) Az írásos részre ráérek később választ keresni. Csodálatos napot kívánok.
Sziasztok!
A program tökéletesen működik. Persze lehet, hogy nem tökéletes egy programozó szemével. De valahonnan el kell kezdeni. ![]() Abban kérhetnék még pici segítséget, hogy hogyan tudom meghatározni azt, hogy a 3 db szám milyen frekvenciával jelenik meg a szemem előtt? A timer0 16Mhz/256 = 62,5 kHz-el működik. A programomban, a kijelzőket sorban kapcsolom be egymás után. (Ha a timer0 ovf akkor egy változóhoz hozzáadok 1et.)
Köszi szépen a segítséget. ![]()
Közben ezt számoltam én is (tökfej vagyok
![]() ![]() Illetve ha nem így léptetem a digiteket, hanem nagyobb időzítéssel, akkor a legnagyobb azaz az utolsó számjegy "ideje" számít? A hozzászólás módosítva: Jan 5, 2015
Nem tudja véletlenül valaki, hogy hogyan lehet/lehet-e egyátalán az avr-gcc-nek megadni, hogy egy UTF-8 kódolású fájlban egy karakteláncot ("-ek közé írt karakterek pld: "foobar2000") ASCII-ként értelmezzen? Nem szeretném 8 bites karakterkészlettel menteni és nem szeretnék karakterket kiescapelni.
A hozzászólás módosítva: Jan 5, 2015
Sziasztok.
Most kezdenék AVR-rel kísérletezni, nulláról. Atmega16A-PU-ra gondoltam, és kiszemeltem a megépítendő alkalmazást. A kérdésem hogy EZzel a programozóval fel tudom-e programozni majd és kell-e mellé táp, vagy csak rádugom a megfelelő lábakra. Ha nem jó, lenne szíves valaki ajánlani egy olcsó felprogramozót. Nagyon szépen köszönöm.
Fel lehet programozni, tápot is ad, de NEM AJÁNLOTT...
Sziasztok!
Ha programozandó avr mellett van az ISP vonalon mondjuk egy eeprom, az zavarhatja a programozást?
Ha jól van bekötve az EEPROM (CS- pinen van felhúzó R?)
Akkor nem!
Erre gondoltam én is nem tettem rá mert gondoltam jo lesz a belsö felhúzó ellenállás is.Akkor ez lehet a baj.
Sziasztok!
Atmega162 -t szeretnék felprogramozni STK500- zal (gyári). MISO, MOSI, VCC, GND, SCK és RESET lábakat bekötöttem, de valamiért nem megy. Hibaüzenetet ír az AVR Studio 4. Próbáltam a kommunikációs frekvenciát változtatgatni (100Hz tól 125kHz -ig), és próbáltam a reset lábat felhúzni 20k -val, de semmi. Sőt, az SS pint is próbáltam már felhúzni, hátha rosszul kötöttem be a MOSI MISO -t (tudtommal így változna hogy master vagy sleve legyen-e az SPI) Úgy hiszem nem kell oszcillátor a 162 -esnek, mert van benne RC oszcillátor. Ez egy használt proci, de vélhetően jó. Mi lehet a gond? A hozzászólás módosítva: Jan 8, 2015
Szia!
Ha már volt programozva, lehet hogy külső kvarcra lett állítva. Tegyél rá kvarcot, ha továbbra sem látja az AVR studió, próbálj 1-10MHz-et adni neki külső oszcillátorból.
Nem vagyok egészen biztos benne, de ha a használt, és a benne lévő program esetlegesen úgy van konfigurálva, hogy mégiscsak kvarcot használ. Akkor kell rá a kvarc kondikkal, hogy tudd működtetni - programozni. Ha nincs szerencséd, akkor lehet, hogy a konfigja külső oszcillátort határoz meg, akkor az előbbi is kevés lesz, csak külső órajel-generátorral, vagy HV - programozóval, illetve fuse-bit doktorral lehet orvosolni. (Nem tudom, de lehet, hogy hülyeség mert STK500 -ból csikarható órajel ehhez.) Attól, hogy képesek ezek futni sokféle belső módon órajelet, attól még nem biztos. hogy futnak is.
Látom elkéstem. A hozzászólás módosítva: Jan 8, 2015
Üdv!
Kipróbáltam a külső órajelet is, meg a kvarcot is (4MHz kvarc és 20pF kondik a föld felé). Nem lett jó. Órajelet csak max 200kHz -et tudtam adni az XTAL 1-re, de az XTAL 2-re is próbáltam (természetesen nem differenciálisan).
A 200 KHz-s clock karcsú lesz neki mert a programozási SCK frekvencia maximum a fő clock negyede lehet.
Igen, de az SCK -t én az AVR studioban tudtam 51(!)Hz től változtatni, és persze végigzongoráztam mindig az összes lehetőséget. Próbáltam az összes lábat felhúzni is.
Szia !
Xtal 1-re legalább 1 MHz-et adjál be.
Levettem az epromot most is ezt a hiba üzenetet kaptam WARNNING: FLASH bytes address 0x0000 is 0xFF (should be 0x0C).. FAILED. De akkor van ez ha a verify-re nyomok.
Sziasztok! Régen programoztam AVR-t (Akkor sem sokat.), mert elkanyarodtam az ARM-ek felé. Most viszont egy bluetoothos eszközt szeretnék készíteni, Atmega 2561-es kontrollerrel. (Ez van itthon.) Az adatlap szerint megpróbáltam inicializálni és egy Raspberry Pi áramkörön figyelném a kimenetet. Sajnos semmi. Windows 8.1 alatt és Atmel Studio 6.2-vel fordtva és programozva megmozdul ugyan a soros kommunikáció, de semmiféle értelmes dolgot nem lehet kiolvasni. Kétlem még azt is, hogy innen származnak az adatok, mert a Putty szöveg jól felismerhetően jelenik meg gyakran a képernyőn. Linux alatt Eclipse + avrdude párossal nincs mozgás a soros porton. A kód a következő:
Mi lehet a baj? Mit csinálok rosszul? Minden segítséget előre is nagyon szépen köszönök! |
Bejelentkezés
Hirdetés |