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
Szia!
Ezt nézted már ADC-vel kapcsolatban? Bővebben: Link Igaz ATMega8 konkrétan, de a menetét leírtam részletesen. És pont azt csinálja, hogy az ADC eredményétől függően ki-be kapcsolgat egy LED-et. A hozzászólás módosítva: Jún 12, 2013
Épp most nezem de ez bonyolult nem tudok eligazodni rajta ://
Idézet: (teid alatt 1-2 vel van)de sajna az ővése megy akár hogy csinálom pedig az Attiny45. Ezeket a DDRC = 0b1011111; stb ne mértem. „dB_Thunder irt egy RGB kódot”
Nem a mérésben van a hiba. Az átlagoló rutinom rossz. Segítene valaki mit rontottam el?
10 biten mérek.
1: Mennyi az "avg_temp" kezdőértéke? - Akkor most mégegyszer: biztos???
2: Nem hiba az osztás, de a legvégén inkább shifteld jobbra 3-al, az "takarékosabb". Persze jó esetben a fordító is pontosan így csinálja (felsimeri!) és nem osztásként értelmezi...
zombee válasza jó volt, de azért kifejteném bővebben, mert valószínűleg nem vagy C guru.
Amikor deklarálod az avg_temp-et, akkor a fordító kiválaszt vagy egy regisztert a processzorban (tipikus), vagy egy memóriacímet a vermen és ott fogja tárolni az értéket. A deklaráció C-ben szemben más programnyelvekkel nem ad alapértelmezett értéket a változónak. Az értéke az lesz, ami a lefoglalt memóriában, vagy a kiválasztott regiszterben idáig volt. Erről még véletlenül se feltételezd azt, hogy nulla lesz, mert általában nem az. Az értéke megjósolhatatlan, hol ez, hol az, kismillió dologtól függ. A C az egyik legidősebb nyelv, a nála fiatalabb nyelvek már vagy fordítási hibát jeleznek, vagy alapértelmezett értéket adnak a változónak. A javítás:
A hozzászólás módosítva: Jún 13, 2013
Akkor még a LED villogtatásáig se jutottál el?
DDRC-vel a port irányát állíthatod be. DDRA az A port DDRB a B port Na most minden portot 8 biten tudsz beállítani. Persze előfordulhat hogy nincs is annyi láb egy adott porton, de ez nem gond. Na most az ATiny45-nek csak B portja van, az is 0-5-ig. De pl az PB5-ös láb a RESET láb is egyben, ami alapból csak reset-ként működik. Fuse biteknél be tudod állítani, hogy az is használható láb legyen, de akkor a reset funkció megszűnik, és ezzel a soros programozási lehetőség is. A PB3 és PB4 lábak alpból digitális ki/bemenetek. De ha külső kristályt kötsz rá és be is állítod, akkor ez a két láb is kiesett. Vegyünk egy alap esetet. Neked kell egy analóg bemenet (ADC) és egy digitális kimenet a LED-nek. Kiválasztod melyik legyen az analóg bemenet. Adatlapon megkeresed hol van ADC. A PB2 az ADC1 is egyben. Ha ez az ADC láb szimpatikus, akkor ezt bemenetre kell állítani. Kell egy kimenet a lednek. Ide bármelyik szabad port használható. Legyen a PB0. Ez már kimenet lesz. Ezzel tudjuk, hogyan kell beállítani a lábakat (port-ot), csak le kell programozni. Ahogy írtam a DDRB regiszterrel állítod be az irányát. Ez egy 8bites regiszter, tehát mind a 8 lábat be tudod vele állíteni, persze amiből most csak 5 használható van (0-4-ig). Ezt több módon is belehet. DDRB = 0b00000001; DDRB az "irányregiszter" = ezzel az operandussal adsz neki értéket 0b az, hogy ezt binárisan adod meg 00000001 itt adod meg a konkrét értékét, azaz irányát. Ahol 0 ott bemenet, ahol 1 az kimenet. PB7-es lábbal kezdődik aztán szépen sorba... PB7 PB6... PB0 Tehát ha olvasod az értéket, látod, hogy a PB0 lábnál 1-es van, tehát az kimenet. Én így szeretem beállítani. Belehet hexadecimális értékkel is, ami így nézne ki, de ugyanazt jelentené. DDRB = 0x01; Vagy az értékek rá shiftelésével is: DDRB = DDRB | (1<<PB0); Vagy ugyanazt jelenti ez is: DDRB |= (1<<PB0); (mivel alapból minden láb 0 azaz bemenet, ezért csak a kimenetekre kell 1-est shiftelni. Mára ennyi A hozzászólás módosítva: Jún 13, 2013
Waow na mostmér kezdem érteni csak a 0000001 stb miatt voltam gondba amit használtál.Nem soká jelentkezem, hogy sikerült-e.Köszönöm az eddigi segitséget.
A hozzászólás módosítva: Jún 14, 2013
A gond ott kezdődik, hogy egymás után 3szor állítod a B port kimenetét, miközben kommentben más portokról írsz. A C portot DDRC-vel, a D portot DDRD-vel kell állítani. Tehát a DDRx-ben a DDR jelzi, hogy adatirány regiszterről van szó(data direction register), a kis x pedig a port betűjele, amit állítani akarunk. Ugyanígy van a PORTx esetében is, ahol az x helyére az adott port betűjelét kell írni.
Waow na igen ehez hülye vagyok jelenleg még bascom ban se tudtam beallitani hogy > 120 hiába allitgatom ugyan úgy kapcsol.
adat a fényellenálásrol: Ellenállás: - 500 kOhm (0 lux) - 94 kOhm (10 lux) - 8 kOhm (100 lux) Hullámhossz a max. érzékenységnél : 600 nm
Sziasztok!
Tudnátok adni nekem tananyagot? Lényeg: AVR-t hogy kell C-ben programozni. Tudnivalók stbstb.
csabeszq, zombee!
Működik. Ez volt a gond. Most minden változónak adok kezdőértéket. Köszönöm!!!
Sziasztok!
Elolvastam a cikkeket, de én nem láttam még C-t soha. Szóval tényleg a elejéről kellene kezdenem.
Szia mit szeretnél elkésziteni ird le ha egyszerü LED stb.Abban tudok segiteni ha gondolod keres meg Privátban.
Srácok kis segitség kéne:
Ne haragudj, de ez a kód Bascom, nem C.
Igen tudom bocsi hülyén irtam.Áttéerek Bascomra inkább mert C ben még eddigse jutottam el mint bascomban.De jobb lenne a C de ahoz nem találok kódot csak amit lekéne csupaszítanom de ha nem értem mi mit csinál akkor hiába :/ .
Pár dolgot tisztázni kellene a HardWeredről?!
Ez a sor azt mondja, hogy külső Kristályról megy az ATtiny: $crystal = 14745600 'Kristály Sebessége 14745600 Hz Ez Igaz? Pin 1.: (ADC0) PB5 Ide van kötve a Fény ellem ? Config Portb.5 = Input ’ ADC0 PB5 Bemenetre kapcsoljuk! If Fenyelem < 2991 Then 'kisebb< 2991 nél Set Portb.1 ’PB.1=1 Reset Portb.2 ’PB.2=0 Elseif Fenyelem > 2996 Then 'Nagyobb > 2996-nál. use elseif for more tests Reset Portb.1 ’PB.1=0 Set Portb.2 ’PB.2=1 End If A végére nagyobb várakozást tegyél! Mert így nem látsz semmit! Legalább: Waitms 500 Loop End
Pedig C hez rengeteg könyv van. Egyet legalább ki kéne olvasni. Könyvtárakban keress.
A C nagyon hasznos, mert pl. a PHP és Java is ezen alapszik.
Hibalista:
1, A kód Bascom, nem C 2, If Fenyelem <= 2990 Then... ADC értéke 0...1023 közt lehet 3, Reference = Internal_2.56_nocap Ez mi? Ilyen nincs a bascomban! internal_2.56 vagy internal 4. Config Portb.1 = Output 'LED a PortB.3 Ilyen nincs. Vagy portb.1 vagy portb.3... 5. $crystal = 14745600 A Tiny45 esetén a be is állítod a biztosítékbiteknél, hogy külső kvarc? Belső 1200000 Hz RC miért nem jó? (1.2 MHz) Javaslat Bascom esetére: Olvasd el a http://avr.tavir.hu -> Bascom könyv leírást... C esetén kezdj az Arduinoval a http://www.tavir.hu/60nap ingyenes tanfolyam az alapokat legalább megadja... A hozzászólás módosítva: Jún 15, 2013
A programot 2-3 oldalall ezelött készitette egy felhasználó.Én azt használom.Igazábol a LUX ot nem tom hogy számitsam ki maga az értéket ADC ben megadni akar hogy allitom semmi szoval <= 1023 ez a legg fényesebb 10 meg a leggsötétebb?
DC: a bemeneti feszültséosztón mért jel, azaz a fotoellenállás/tranzisztor és az ellenállás aránya.
A LUX az http://hu.wikipedia.org/wiki/Fotometria itt van leírva. Ami neked hiányzik: - fényforrás és mérőrész távolsága - mérőeszköz kalibrációja (beesési fényszög, beeső fény hullámhossza, az alapján a jelváltozás... Szóval ez nem ilyen egyszerű..... Az ADC 0...1023 közt változhat. Szóval LUX-ot inkább egy ismert, kalibrált eszköz és az általad készített összehasonlító mérésével lehet megoldani.
Értem és hogyan tudom belőni 0 és 1023 ? mert akárhogy állitom sötétet érzékeli de a világoságot nem.
Rosszul kötötted be az érzékelőt. Fordítsd meg.
Javaslat: A Tiny-t felejtsd el. Nincs debugod. Azaz nem látod mi történik a chipen belül. Cseréld ki pl. ATMega8-ra... +5V------Ellenállás pl. 47k..100k----+AVR ADC lába-----Fotoellenállás/fototranzisztor----GND Ez a kód el van baltázva:
Javítsd hogy ha kisebb: egyik LED ég, ha nagyobb a másik. Ezt nem értem: "Értem és hogyan tudom belőni 0 és 1023 ?" Olvass: ADC Bascom-ban
Korulbelul igy?(paint ben egy gyors vazlat)
Meg probálom az álltalad irt modositásokat.USBasp emse tud debug modot vagy tevedek?
Sziasztok!
Amíg várom az alkatrészeket az STK500-hoz, szeretnék kezdetleges dolgokat írni. Láttam, hogy a studio 4ben van AVR Simulator. Őt hogy kell használni? Tud valaki segíteni?
Ajaj.... Ebből _soha nem lesz visszajelző, ha így kapkodsz....
Plusz elvihibás a rajzod is. A rajzot lsd melléklet. A GETADC(1) olvassa be a megvilágításjelet... Au USBASP-vel meg szívatod is majd magadat. Igaz, amikor használod a kapcsolást az USBASP nincs rádugva? Debug: AVR-Dragon tudja csak. Ill. az ennél jóval drágábbak... "Mottó: olcsó húsnak híg a leve"
Szia!
Az AVR Studio kb. a 6.1 verziónál jár, szóval érdemes lenne váltani a 4-ről.. Bár erről megoszlanak a vélemények ezen a fórumon. Nyilván sokan használnak még windows 3.1-et. A szimulátort egyszerűen csak el kell indítani debug módban, a debug fül alatt találod a dolgokat hozzá. Pl. így.
STK500-at fogok építeni, s azt olvastam, hogy a studio 6-al kevesebb mcu-t tudok programozni.
Érdekes szempont, lelked rajta
|
Bejelentkezés
Hirdetés |