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
igen ezt észrevettem, de csak nem működik...
Szia, nem tudom, hogy mekkora frekin járatod a procit, de az lcd.h-ban egy 20MHz-es kvarc van definiálva, így a függvények időzítései ahhoz vannak igazítva, esetleg írd át a te kvarcod értékére. A másik amit észre vettem, hogy szép nagy LCD-t használsz (legalább 14 soros és 9 oszlopos
![]() Szerintem az ADC-t sem kell állandóan inicializálni. Nem tudom mit akarsz azzal a '\037'-el de szerintem sokkal egyszerűbb lenne '%'-ot, vagy 0x25-öt írni helyette. Ellenőrizd a bekötéseket, vagyis, hogy az lcd.c és lcd.h-ban használt PORT és pin-ek megegyeznek a valós bekötéseknke. Esetleg tegyél be minden lcd-re iratás után egy néhány ms-os delay-t, vagy ami a legbiztosabb, kommentálj ki mindent és csak az lcd-vel kapcsolatos dolgokat hagyd meg, és ott is a legalapvatőbb dolgokat próbáld ki:
Ha ez működik akkor az lcd rendben van, valami egyébbel lehet gond, amitől nem úgy működik a program ahogy elvárod.
Idézet: „Nem tudom mit akarsz azzal a '\037'-el de szerintem sokkal egyszerűbb lenne '%'-ot, vagy 0x25-öt írni helyette” Igzad van, mert lathatolag szazalekjelet akart irni. Bár, ha szazalekjelet akarsz irni, akkor irjal azt, es ne 0x25-ot. Ugyanaz a ketto, de a '%' egyertelmubb. De a lenyeg, hogy mondjuk el az igazsagot ezzel kapcsolatban: A \037 az oktalis 37, ami decimalisan 31. A \szamjegy es max. tovabbi ket szamjegy formaban leirt karakterkonstans oktalisan ertelmezodik, azaz nyolcas szamrendszerben. A \3 az 3, a \33 az decimalis 27 (ESC), a \101 az pedig decimalis 65, ami az 'A' betu. A \033 az ugyanaz, mint a \33, itt nincs kulonbseg, mindig oktalisnak tekinti. A mai C szabvany karakterkonstans helyen mar megengedi a \xn vagy \xnn formatumot is, ahol n (nn) egy hexadecimalis szam. Tehat a '\x41' az megfelel az elobbi 'A'-nak, vagy a '\x25' a szazalekjelnek. A C-ben sima konstansoknal, ha a szam 0-val kezdodik, akkor azt oktalisan ertelmezi a fordito, igy a 12 es a 012 egeszen mast jelent. Az egyik decimalis 12, a masik oktalis 12, ami decimalis 9. tehat az a = 9; a = 012; pontosan ugyanaz. A hozzászólás módosítva: Okt 27, 2013
Nincs külső kvarc használva, másik dolog, van egy kapcsoló beépítve hogy ha megnyomom akkor az egyik relét leoldja az AVR, és azon a relén keresztül kap áramot. Csak sajnos eddig az AVR nem vette észre ha megnyomtam, de azt hiszem megtaláltam a problémát!
Nem akarom megszakításként kezelni mert jobb ha pár másodpercet várva oldná csak le a relét. Viszont van egy másik nyomógomb beépítve amivel újra el lehet inditani az AVR-t. Ahoz hogy 0x25-öt használjak kellene deklarálni egy új karakter változót, és annak megadni érttékként és azt kiirni, másképp számként kezeli ha ki akarom írni. A hozzászólás módosítva: Okt 27, 2013
Az itt felmerulo kerdesek nem AVR dolgok, hanem C nyelv alapjai, elso fejezet.
A << operator a baloldalan allo szamot shifteli, igy a 0-t felesleges shiftelni, az eredmeny mindig nulla lesz. Szoval az altalad irt sornak semmi ertelme. Amit te szeretnel az:
De ehhez tudni kellene, hogy mit csinalnak az |, |= , &= , ~ es a << operatorok. Azon felul, ha egy fuggvenynek atadsz egy erteket, az TELJESEN mindegy, hogy milyen formaban irod le: 0x25, '%', '\45', 045 vagy eppen 37; ez mind pontosan ugyanazt fogja jelenteni. Es a meghivott fuggvenynek fogalma sincs rola, hogy ezt az erteket egy konstanskent kapta vagy egy valtozobol. A fuggveny csak az erteket kapja meg. A putc(char c) kiirja a kapott karaktert, soha nem ir szamot. Javaslom, hogy olvass utana a C nyelvnek.
Köszönöm a részletes leírást, sokat segít!
![]() Minden jót! ![]()
Sziasztok!
ADC-vel próbálkozok. Sikerült is megcsinálni az oldalon található infók alapján. 8 bites ADC-t használok, balra rendezve. ADC mérés eredményét szeretném feszültséggé varázsolni az LCD-mre. Hogy tudom ezt megoldani? Köfi ![]()
Illetve az LCD-m meghajtója byte-os kijelzésű... 255-nél nagyobb értéknél nullázza a kiírt számot, majd kezdi előlről...
Hmm, hogy kellene megoldani? A hozzászólás módosítva: Okt 27, 2013
Sziasztok!
Ahogy a címben is említettem egy attiny45-öt szeretnék programozni egy AVR Doperrel 3.3v-os környezetben,de nem megy. A deviceID avrdudenál 0x0ffffff,5V-on simán megy próbapanelon összerakva és a neki épített nyákon is.Kipróbáltam ezzel a programozóval egy másik IC-t atmega48 és atmega88 azok mennek gond nélkül 5 és 3.3 volton is. Esetleg ötlet hogy mi a gond hogy a t45 miért nem működik 3.3 voltról?
Akarom mondani, hogy byte hosszúságú adatot képes csak megjeleníteni. Pl. 999-et már nem képes megjeleníteni..
Próbálkoztam sokat, de nem sikerül..
Az ADC-vel milyen hosszúságú adatot kapsz? Véletlenül nem 10 bitest? Akkor nem bájt,
hanem integer típusú az adat amit ki kell jelezni. Ez megint csak alap C, nem AVR. ![]()
Megmutatom...
Az LCD meghajtónál lévő kódrészlet ami ehhez tartozik:
A hozzászólás módosítva: Okt 27, 2013
Sziasztok!
Csináltam egy ilyet:
Most ott tartok, hogy multival ellenőrzöm a potin lévő feszt. 0,1V-os pontossággal mér.. Vélemény? Illetve, hogy tudnám összehozni, hogy a század-ot is kiküldje az LCD-re?
Az jutott eszembe az LCD-vel kapcsolatosan eszembe, hogy én ezt a kapcsolást építettem meg, (pár nyomógomb és relével kiegészítve)Bővebben: Link, de nem találtam az lcd-t kezelő fájlokat, ezért letöltöttem innen: Bővebben: Link
Az lehetséges hogy ahonan letöltöttem, nem oda voltak deklarálva az LCD lábjai? És alapból ha nem állítok át egy portbitet akkor az alaból bemenet nemde? A hozzászólás módosítva: Okt 28, 2013
Minden lehetseges. A portok alapbol bemenetek, igen.
Ha elfogadsz egy jotanacsot, akkor nem az LCD kezelo file-okat kellene letolteni, hanem a C programozas konyvet, az AVR adatlapjat es a kijelzo adatlapjat. Ennek a haromnak a birtokaban magad is meg tudod oldani a feladatot. De, amig nem erted, hogy a DDRD |= (1 << PD2); pontosan mit csinal, addig nem erdemes tovabblepni. A hozzászólás módosítva: Okt 28, 2013
Üdv! Belekezdtem egy olyan projektbe, hogy mikrokontrollerell hangot kibocsájtani.
Találtam is kezdésnek egy forráskódot. Elősször pic-el akartam, mert az bejáratottabb. Végül avr nyert.
Első körben annyit szeretnék megtudni, ha én 3szöget vagy szinuszt szeretnék hallani akkor mit csináljak? Igen szoftveresen akarok mindent megcsinálni.
Pont nem pcm lejátszás a célom. PWM okés, csak akkor hogy programozok be PWM jelalakba egy szinuszt?
PCM mintavétel alapú hanggenerátort csinálnék akkor fognék egy eepromot és abba égetném be a hangot. Amúgy nem dallamcsengőt akarok, röviden egy szintetizátort akarok csinálni, csak így még több lehetőségem van, mert véletlen szám generálás-t random frekvencia gnereálást stb is be tudok iktatni...
Az AVR lábára NA5W-K 5V-os relét kötöttem és meglepődtem, mert nem ment. A fülemhez tartva nagyon halkan kattogott, az interneten utánaolvastam és rájöttem, hogy fordítva kötöttem be. A pólusokat megfordítva védődiódával az IC is simán elkapcsolgatta a relét tranzisztoros áramerősítés nélkül.
A kérdésem az: ha kattog, akkor elektromágneses a relé, de mitől polaritásos? Idáig abban a hiszemben éltem, hogy az elektromágnes nem válogat az irányok között. Mindenesetre az adatlap egyértelműen megjelöli, hogy melyik a [+] és a [-], csak nem értem. A hozzászólás módosítva: Okt 28, 2013
Nincs benne dióda? Nem ír rólla az adatlap?
Nem ír védődiódáról az adatlap, kimérni meg nem tudtam a soros ellenállás miatt.
Sziasztok! Ha winavr ben írok egy programot és kompilálom akor ugye létrejön egy .hex file, de a haveremnek kell a program, de neki nincs csak arduino programozója, akkor ő direktbe felteheti a kompilált fájlt vagy újra kell forditani a forráskódot?
A havered felteheti a hex filet, ha nem akarja modositani a programot.
Sziasztok!
Lenne egy olyan problémám, hogy a CodeVisionAvr-t használom Atmega programozáshoz Pickit2-vel. Eddig gond nélkül működött de most olyat csinál, hogy felismeri az controllert ki is olvassa, de ha törölni akarom akkor hibát ír ki meg ha programozni akarom akkor is. Valaki találkozott már ilyen jelenséggel? Valami a géppel vagy a beállításokkal lehet mert ugyanazt az avr-t a haveromnál ugyan ilyen módszerrel gond nélkül beprogramoztuk. Előre is köszönöm a tanácsokat!!
Üdv!
Ép az előbb azzal kínlódtam, hogy miként tudnék szoftveres PWM-et létrehozni. Ez éppen sikerült is, de az a kódrészlet nem akar sikerülni:
Ennek az lenne a lényege, hogy a led fényerejét a felére, majd fullra, aztán megint a felére, és végül nullára emelje.
Igy kell:
Tehát az int fuggvénynek kell legyen egy viszatérési értéke ha rendben lefut;
Ekkor le lehet kérdezni egy változó segítségével a függvény lefutási állapotát:
Amugy a kód helyességét nem néztem meg.... A hozzászólás módosítva: Okt 30, 2013
mivaaaaaan?
![]() Így nem lesz semmilyen PWM-ed... A hozzászólás módosítva: Okt 30, 2013
Kicsit bonyolultul oldottad meg.
A delay hosszát változtatod a for ciklusban. Sem timer, sem interrupt, sem semmi nem kell hozzá. A hozzászólás módosítva: Okt 30, 2013
Bocs, hogy közbeszólok de nekem tudnátok valami tanácsot adni???
Köszönöm.
Hamar megtanultad! Tegnap még kerdeztel, ma mar tanitod. Csak ne beszelj butasagokat!Minden fuggvenynek, ami nem void, kell legyen visszateresi erteke. De mindig, nem csak akkor ha 'rendben lefut'. Kulonben is, mi az, hogy rendben?
Azon felul teljesen felesleges valtozo ahhoz, hogy egy fuggveny visszateresi erteket vizsgald. A C nyelvben ez ennel sokkal altalanosabb. Minden kifejezesnek van erteke. Egy kifejezes lehet egy valtozo, egy konstans, tetszoleges muvelet, vagy akar fuggveny, vagy ezekbol osszerakott kifejezes. Tehat egesz nyugodtan irhatod azt is, hogy if(fuggveny() == 0) de ezzel megegyezo az if(! fuggveny()). Azt is leirhatod, hogy a = fuggveny() + 2; es ennek az egesznek is van erteke, tehat az is elfogadott, hogy: int a; switch(a = fuggveny() * 2){ case 8: ... } |
Bejelentkezés
Hirdetés |