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 Idézet: Helyesen: dU = (i * t) / C => 3V = (20mA * t) / 2200µF => t = 330ms „dU = (i * t) / C => 5V = (20mA * t) / 2200µF => t = 330ms”
Sziasztok!
Meg szeretném építeni a képen látható kapcsolást, viszont az a gondom, hogy nem találok bele megfelelő kijelzőt. A kapcsolásban szereplő kijelző HDSP-B04E melynél a pontok a DIG2 és DIG3 kivezetéshez vannak kötve, ami elérhető annál pedig a pontok a DIG3 és DIG4 kivezetéshez vannak kötve. Eléggé kezdő vagyok még avr-es témában, a program beégetésével nincs gond, egyszerűbb programokat többé kevésbé megértek, de ez feladta a leckét. Tudna valaki nekem segíteni, hogy mit kell változtatni a programban, hogy az utóbbi kijelzővel is működjön?
Szerintem egyszerűbb, ha az ELCD bekötésén igazítasz.
Végül is lehet, hogy nincs is szükség semmilyen módosításra, mert nekem ezekből a sorokból az derül ki, hogy az óra és a perc közti két pont folyamatosan világít:
#define COLON 13 pinMode(COLON, OUTPUT); digitalWrite(COLON, LOW); A programban később ez a kimenet nem vesz fel más értéket.
De azt tudod, hogy ez így nagyon pontatlan óra lesz?!
Lehet Óra modulokat kapni, amikbe direkt óra kristályok vannak beépítve. Amik valamivel pontosabbak. Keres inkább olyan projektet!
Meg lehet oldani külön modul nélkül is, csak épp ahhoz át kell alakítani ezt az áramkört. A kristály kicserélhető egy 32,768kHz-es órakristályra (a progi futhat a belső 8MHz-es RC oszcillátorról, a timer 2 pedig asszinkron módban az órakristályról számolhatja az időt). A gond, hogy ez az áramkör valami arduino alapú csoda lehet bootloader-rel és rendes programozó port nélkül (a serial port néz ki a "programozó" portnak) és a belső oszcillátor nem elég pontos a soros port működtetésére (ezért használ 16MHz-es kristályt). Ha az áramkört átalakítaná a szokásos ICSP csatlakozósra, akkor mindjárt nem lenne érdekes a soros port (másra úgysem kell, ...mondjuk meg lehetne csinálni internetesre az órát ESP modullal, akkor persze meg a pontos órakristály nem kellene ).
Szia.
Nekem pont most van egy Atmega328-am, belső 8MHz oszcillátorral, Timer2-re 32768Hz-es kristály kötve, és az Arduino-ban megtalálható Arduino mini pro 8MHz 3.3V-os bootloaderrel tökéletesen megy a feltöltés.
Hűha... ez a beszélgetés már kezdi meghaladni a képességeimet. Nagyon nem szeretnék hozzányúlni sem a programhoz, sem a kapcsoláshoz. Ez a kapcsolás a nootropic design féle defusable bomb clock. Félek, hogy bármi módosítás a "különleges" funkciók kiesését vonná maga után.
Az AVR programozását az áramkörből kivéve ICSP-n keresztül szeretném megvalósítani, ezt így meg lehet oldani? Látom, hogy itt soros portról is van szó. De miért is lenne pontatlan az óra? Gondolom a tervezője úgy alkotta meg, hogy pontos legyen. Vagy a benne lévő kvarc frekvenciája és az osztásból származó órajeltől pontatlan?
Gondolom, hogy egy Bomba nem olyan hosszú életre van tervezve, mint egy Óra.
Ezért a kvarc pontatlansága elhanyagolható probléma volt a tervezőnek.
Én inkább úgy mondanám: nem lesz annyira pontos, mint egy órakvarcról használva. De ki kell próbálni, a Timer2-t amúgy is lehet pontosítani, csak ehhez mindig várnod kell 4-8órát, megnézni, hogy siet, vagy késik, mennyit, és ez alapján újra be kell égetni a már pontosított programot. Azt viszont nem értem, hogy miért jobb a túlcsordulást használni, és kezdőértéket adni a Timer-nek, mikor ott van a CTC üzemmód, ami lenullázza a Timer-t, amikor eljut a Compare értékig.
Ha "wear leveling" (terheléselosztás) módszert választasz akkor elég sokáig ki fog tartani az EEPROM.Lényege, hogy a kevés bájtból álló információt "szétkened" a teljes EEPROM területére.Kicsit számításigényesebb a feladat, de 100% működik. A megtett utat gondolom 0.1km-ben,a fogyasztást centiliterben érdemes tárolni, egyébként így a két információ kb. azonos nagyságrendű.
Kódolás: 1 millió kilométeres tartomány talán elég lesz, akkor 10 millió a kilométerszámláló maximuma. Ezt 3 bájton kódolva 16.77 millió lehet, ennyit nem sok autó megy el egyazon kilométerórával. A fogyasztás is kódolható 3 bájton az azonos nagyságrend miatt. Ha egy 10 literes fogyasztású kályhacsöved van akkor 1.677 millió km után ez is betelik... Algoritmus: Ezt a 2x3 bájt infót kiegészíted egy negyedikkel (aminek más lesz a funkciója), és kiosztasz nekik egyenként 256 bájt EEPROM területet. Mostantól a leírás csak egyetlen 3+1 bájtos információrólfog szólni. Tegyük fel hogy már működik a cucc, van érvényes infó az EPROM-ban. A kérdéses 4 bájtot egy 256 bájtos szegmensből úgy kapod meg, hogy 4 bájtonként kiolvasod mind a 256 bájtot és ezeket valamilyen művelettel(XOR) összeadod egy ciklusban. Ha bekapcsoláskor beolvastatod a 256 bájtot és a RAM-ban tárolod úgy gyorsabb lesz a dolog, mert csak íráskor fogsz az EEPROM-hoz nyúlni, ott is csak 4 bájtot kell írnod egyszerre. Most jön a 4. bájt: azt tárolja, hogy a 256 bájtból legutoljára melyik 4 bájtos rekeszt írtad. Ezt minden írásnál 1-el növeled, hozzácsapod az információt tartalmazó 3 bájtot, majd úgy írsz a soron lévő rekeszbe hogy a XOR művelet a hasznos információt adja vissza. Ez nem nehéz, mivel a "maradék" terület XOR-összegét kell az információhoz adni és olvasáskor az lesz az eredmény. Első hallásra nem tűnik olyan nagyon egyszerűnek, pedig a kód írással-olvasással és inicializálással kb. 60 sornyi kód C-ben. Azért látszik hogy egy kicsit sajnos dolgoznia kell a procinak is, meg a tárolt információ is sokkal nagyobb helyet foglal, de az a pár bájt tényleg megéri. Ha az EEPROM egyetlen bájtja 100000 írási ciklust visel el, akkor a 3 bájtos számláló 4-szer előbb betelik mint hogy elérné a 100000 írást... A hozzászólás módosítva: Júl 5, 2015
Ez egy kicsit hosszú volt, a wear leveling természetesen egyszerűbben is megoldható. A számláló módszer annyiban tér el a fentitől, hogy minden (3 vagy 4 bájtos) rekesz értelmes információt hordoz. A 256 bájtos memóriaméret se szentírás, a fentiek alapján 48 bájt is elég, és ezzel a számláló kb. akkor telik be amikor "elromlik" az EEPROM.
Az egyszerűbb (számláló) módszer azért működik, mert a beírandó érték folyamatosan növekszik. Azaz a 48 bájtból az a 3 bájtos rekesz érvényes, amelyik a legnagyobb értéket hordozza(a 0xFFFFFF értéket viszont ignorálni kell, mert "gyárilag" ez az EEPROM tartalma). Innentől kezdve csak át kell pásztázni a területet a 3 bájtos infókért, és a legnagyobb érték lesz az érvényes. A módszer hibadetektálásra is használható, elég csak azt figyelni hogy mindig a rákövetkező érték a nagyobb, és csak 1-el lehet nagyobb. Ha hibás az adat, vissza lehet lépni az előzőhöz, 100 méter vagy 1cl tévedés még mindig jobb mintha megbolondulna a kilométerszámlálód. Természetesen az egyszerűbb módszernél is igaz hogy érdemes az EEPROM területet gyorsítótárazni, és csak íráskor kiírni a megfelelő 3 bájtot.
Sziasztok!
Szükségem lenne egy Atmel mikrovezérlőkben nagyon jártas személy segítségére egy projektben. Privát üzenetben tudok részleteket mondani. Üdv, Attila
Sziasztok! Problémám akadt egy max6675-el való kommunikációban. A fórumon kutatva láttam, hogy Droot kollégának is hasonló probélmája volt ősszel, így kérdésem elsősorban hozzá szól.
Az ic nekem is csak 0-kat küld, vagyis semmit. Az spi kommunikáció jónak tűnik, ha a miso-t felhúzom tápra, akkor csupa 1-et olvas, amúgy semmit. A bekötés elvileg jó, kisípoltam a lábakat. Segítségetek előre is köszönöm! Iván
Valami kiindulási alapot adhatnál...
Pl. milyen frekin megy az spi, forráskód, fotó a panelról, kapcsolási rajz, mért feszültségek, szkóppal mért dolgok... ami van.
MAX6675ISA+
Hőmérséklet-érzékelő, hőmérséklet átalakító, 0-1024°C ?? Milyen fárasztás bír ki 1024°C-ot?
Nem fárad el, folyamatosan mér.
HA pedig forrasztás lett volna, akkor nem az IC méri, csak a hőelem jelét alakítja át. A hozzászólás módosítva: Júl 6, 2015
Atmega8A 8MHz kristályról üzemel, az spi előosztást próbáltam 4-el és 64-el is. Szkóp hiányában leddel "vizsgáltam" a vonalakat. Az sck-n volt jel, /CS is jól működik, miso-n semmi. Az egész 5 voltról megy programozón keresztül. Kódot és kapcsolást majd csak holnap tudom feltenni.
Szerk: remélem nem ez a gond, de ebay-ről van, kb. 800ft volt. A hozzászólás módosítva: Júl 6, 2015
Forrasztóállomáshoz lesz, K hőelem jelét alakítaná át ami a pákában van.
Paneltervet mégis fel tudom tenni, nem valami profi, tudom. A rajz felülnézeti, a két smd alul van, vagyis fejjel lefelé. Programot, kapcsolást, képet majd holnap.
Szia!
Már nem emlékszem sajna, hogy pontosan mi volt a probléma, de végül MAX31855K-t használok helyette a mai napig, amit a HQElektronik-ban vagy ha nem sürgős e-Bayen tudsz reális áron megvásárolni. A MAX31855K max 4V-ig üzemel ha jól emlékszem, én 3,3V-ról járatom.
Szia. Nekem ezzel a koddal mukodik rendesen.
Ami gond volt vele, ha jol emlekszem, hogy nem megfelelo elen mintaveteleztem (CPHA bit 1-re kell legyen allitva).
Sziasztok!
Kicsit kezdő vagyok de bizakodó (mint pár hete is irtam.) Szóval Mega16U2 és Mega32U2 büszke tulajdonosa lettem. És 2 kis projektet terveztem , de anyira még nincs tapasztalatom , kb 0... . de sok nyelven tudok programozni c-ben is. 1. Usb vezérlésü motorléptetést szeretnék megvalósitani.(de minden jó kezdőhöz mérten leddel inditok neki) A léptetőmotorok régi nyomtatóból vannak , és az elektronikát sem dobtam el (és ami őket irányitotta , biztos találok hozzá kiforrasztani valót ami a működéséhez szükséges).És van egy pc tápom ami alaplap nélkül is megy , tudomásom szerint 5 és 12v-ot ad le. (Ami kell fordulok is a hestore-hoz) 2. önmagában működik , és egy egyszerű 5v relét kapcsoljon. 1 vagy 2 IO bementetet figyeljen , és ha bármilyen elektromos ingást érzékel , elindit egy fügvényt. (RY-5 WK már beszereztem , meg 9db ledet -biztos leszz mibe jelzésként berakni 1-et 1-et) Tudom ez így sovány információ . A bizonytalanságom az adja hogy nemigazán találok erre a tipusra kapcsolási rajzot, sem példát , amin elindulhatnék. Általában Arduino-ban lakozik és komplett boardokat találok. Nem tudom menyire kompatibilis más léptetőmotros avr-ekkel azok a rajzok amit találni lehet, de nem feszülnék neki ha végén mikor elkészül meg is halna szegényke. Ha volt tapasztalatotok , vagy rajzotok , vagy irány amerre elindulhatnék , azonnal tanulmányoznám. Köszi!
Szerintem először villogtass egy LED-et, aztán kettőt felváltva, majd PWM-el vezérelt hogy fényesedik és elalszik, ezután jöhet a villogtatás egy Timer-el. Ha ezek mennek utána belekezdhetsz, mert így elsőnek egy kicsit merész szerintem. USB-Soros port átalakítót ajánlok, FT232 vagy PL2303-at.
Itt találsz több kezdő projektet is: Bővebben: Link
Ezeknek az avr-eknek az az elönye hogy közvetlen usb-re lehet őket kapcsolni nem?
Mármint Mega16U2 és Mega32U2 Bővebben: Link A hozzászólás módosítva: Júl 7, 2015
Igen, és ha már van bennük botloader? Már használhatod is, arduinon.
akkor egy égetőt is kell fabrikálnom hogy áttöltsem ?
Azért ajánlottam a külső USB-soros átalakítót, mert kevesebb programozási tapasztalatot igényel, csak az RS232-t kell leprogramozni, ez meg benne van az adatlapban.
Igen, programozót is kell csinálnod, de ha komolyan akarsz foglalkozni vele, akkor javaslom vegyél egy gyárit, már kapni olcsóbbakat is mint az AVR ISP mk2, kb. 15-20eFt az ára.
Rákérdeztem és már van benne bootloader
Inkább vedd meg készen!
Bővebben: Link ATmega32U2 USB Development Board, Arduino compatible! Olcsóbban megúszod! És már használhatod is! Biztos mükszik Elenben, ha barkácsolsz, igen sok + járulékos költség és egyéb problémák merülnek fel! |
Bejelentkezés
Hirdetés |