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
Sajnos nem WinAVR-re lett kitalálva. Elvileg ezt csak az AVR Toolchain telepítésével tudod lefordítani...
Hiszterézis, pár fokkal alacsonyabb hőmérsékleten kapcsoljon ki mint be...
Van beállítva hiszterézis nem ez a kérdésem, hanem 5 perc késleltetés anéllkül, hogy a főprogram leállna.
Timer indít bekapcsoláskor és egy jelzőbit bebillent. Timer tulcsordul: jelzobit kibillent.
a relevaltozas: if jelzobit=engedelyezett es ... akkor ...
Megpróbálok jobban utánaolvasni a timernek. Eddig is itt kerestem a megoldást csak még nem látom át. Időm meg fogyóban
Annyira nem vészesek ezek a timmerek.
Az a kérdés hogy hány bites, mekkora előosztást tud, illetve milyen órajellel jár a kontroller, ebből lehet kalkulálni mekkorát tud alapban időzíteni. Ha ez sem elég hosszú idő, akkor jöhet egy globális változó amit a timmer léptet, azzal kitolható tovább. Nézz be az AVR mintaprogramok-ba ott találsz rá példát !
Szia!
Igen, köszönöm. Közben rájöttem. Most próbálom felfogni, hogy mit csináltam mert most működik csak vagyok vele teljesen tisztába. Néha elrontom.
Nos egyenlőre így tudtam megoldani:
Szerintetek van amit fölöslegesen állítok vagy kapcsolok. Én azt szeretném, hogy így működjön: Ha NTC átlépi a beállított értéket és a relé engedélyezve van akkor behúz a relé. Ha az NTC a beállított érték alá csökken akkor kikapcsolja a relét és elindítja az időzítőt ami nem engedi, hogy a relé mégegyszer behúzzon amíg a késleltetés le nem tellik függetlenül az NTC értékétől. Ha letelt az időzítés és, ha kell akkor már visszakapcsolhat a relé.
Közben rájöttem, hogy ATMEGA168 esetén a TCCR0B az a 8bit számláló így átírtam az egészet TCCR1B-re. Ez elvileg a 16bit számláló.
Az #define F_CPU 16000000UL módosítottam #define F_CPU 8000000UL -ra. Elkezdtem számolgatni a túlcsordulások közötti időt és elbizonytalanodtam... Most vagy rossz timer-t használok és/vagy rosszul, de minden számítás és mérés azt az eredményt hozza, hogy 1MHz -en ketyeg az AVR. Hogyan tudom leellenőrizni a valós frekit? Miért nem 8MHz-en megy? Számításban segéd: Bővebben: Link
Fuse biteknél beállítottad a megfelelő órajelet? Alapból 1MHz-en ketyeg az AVR...
SUT_CKSEL: Int. RC Osc. 8 MHz; Start-up time PWRDWN/RESET: 6 CK/14 CK + 65 ms
AVRStudio4. Fordításkor: avr-gcc -mmcu=atmega168 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT daikin_lcd.o -MF dep/daikin_lcd.o.d -c ../daikin_lcd.c
Az avr valós órajelét csak a fuse bitek (Belső RC vagy kvarc) határozzák meg, hogy a programba te mit definiálsz az csak a fordítónak szól.
A másik kérdés milyen előosztást állítottál be a timernek ?
Előosztásnak kipróbáltam mindent, 8-64-256-1024.
LCD-n figyeltem a változások és a korábban linkelt oldal segítségével számoltam. Mindig 1 MHz-re jött ki a számított és mért órajel. AVRStudio4-ben állíthaton amit akarok. Tettem rá 16MHz kristályt és 22pF kondit akkor sem javult a helyzet.
Annyit még hozzátennék, hogy tudomásom szerint az ATMEGA168 belső órajele 8MHz.
Belső 8 MHz RC és a DivClk8 be van kapcsolva. Így lesz a névleges 1 MHz....
Akkor valaki végre segítsen és modja el, hogy hogyan lesz ebből 16 MHz? Ráteszem a 16 MHz kristályt 2db 22pF kondi.
F_CPU -t átállítom. AVRStudio4-ben Project->Configuration átállítom 16 MHz-re. Viszont programozáskor SUT_CKSEL nincs olyan lehetőség, hogy 16MHz külső. Akkor mi a teendő?
Hurrá...
CKDIV8 kivettem... Újra programoztam... Azóta halott az egész. Nem tudom programozni az AVR-t. Azt vettem észre, hogy SPIEN nincs azóta "kipipálva". Persze nem is tudom. Most akkor fújhatom az IC-m?
Jólenne kicsit több infó..
Azért van pár trükk az eltolt ic-k működésre bírására, tehát semmiképp sem kuka !
Mivel ki sem tudod olvasni a kontrollerből a fuse biteket, így hogyan lehetne kipipálva? Nem lehet, hogy külső kvarcra lett állítva és nincs rajta kvarc?
External Quartz/Resonator, >8MHz.
A késleltetés bekapcsoláskor most mindegy. CKOPT (ha van) bekapcsol (Nem a ClkOut!) DivClk8: Kikapcsol. Nem az external Clock-ot választottad ki? Az külső _négyszögjel_!
Nos a beállítások:
SUT_CKSEL: Ext. Crystal Osc. 8.0- MHz; Start-up time PWRDWN/RESET: 16K CK/14 CK + 0 ms BOOTSZ: Boot Flash size=1024 words start address=$1C00 Semmi más nincs bejelölve. ISP frekvencia: 460,8 kHz (végig probáltam mindent nem meg) Külső kvarc 16MHz+2db 22pF kondi. Tanácstalan vagyok.
A 16 MHz kvarc az a 1.5 cm magas vagy a 5 mm-es?
A kvarc lábaival párhuzamosan köss be 1Mohm ellenállást (vagy valami jó nagyot). A 22pFD kondi biztos ekkora? Nálam volt hjogy elcserélték a boltban (SMD) és 22 nF-osat raktam be. Persze azzal nem ment. U.i.: - Jó lábra van a kvarc bekötve? - Reset lábon a felhúzó ellenállás >4k7? - Vcc mellett a VccA illetve a GND/GNDA is be van kötve?
Bővebben: Link
Múlt hétem jött meg. 10k a RESET felhúzó ellenállása. A többi is OK. Egész eddig működött. Mikor megpróbáltam külső kvarcot használni akkor halt el a dolog. Ha újra a belső orajelet akarom használni az sem megy..
Annyi még, hogy a MOSI lábon van egy visszajelző LED. Ez most nem csinál semmit.
Ha átteszem a MISO lábra ott nagyon halványan villog, ha megpróbálok olvasni vagy írni.
Szerintem vagy kizártam magam vagy tönkre tettem.
Mindent visszaállítottam az eredeti felállásba. Fusebit beállítások: Low: 0x62 High: 0xDF Extend:0xF9 Eredetileg ezzel ment. Most semmi.
Lehetséges hogy a MOSI lábat túlterhelted és rossz FUSE biteket írt bele az AVR-be?
Szerintem a programozólábakat nem kéne LED-ekkel terhelni amíg nem vagy biztos benne, hogy a programozód elbírja! Ez főként a MOSI és SCK lábakra igaz! Ellenállásos leválasztású programozók hátrányban, de a MAX3002 kimenetűek sem jók ide: azon ~6kOhm a kimenő ellenállás. Ez utóbbi nálam már a 10kOhm-os RESET felhúzó ellenállással is képes volt összeveszni! Azért készítek még mindig Dopert is mert annak kimenete erősebb(35mA) mint egy AVR-nek(15-20mA)!
Azt hiszem nincs több kérdésem miért halt el az AVR
Bővebben: Link Délután megpróbálom ezzel visszahozni.
Sejtettem, hogy így jártál...
Én a Topi féle doper programozót használom, persze már másik firmware-rel, annál van clock kimenet. Azzal sikerült már visszahozni avr-t
Hali!
Szeretném a lehető legpontosabban használni egy Mega16-ban az ADC-t. 5V (7805) tápfeszről járatom, Külső referenciám van,(szintén 5V(78L05) rákötve az AREF lábra. Ha jól értelmezem az adatlapot, akkor AVCC LC tagon menjen a VCC-re és önállóan a referenciát az AREF lábra és a REFS0 és REFS1 bitek 0-ba állítva. Ha REFS1=0 és REFS0=1 akkor az AVCC-t használja refereniának? Az baj, ha ebben a beállításban nem csak a kondi van odakötve, hanem a AREF összekötve AVCC-vel ? (persze a kondi is ott van a föld felé). A REFS1=1 és REFS0=1 beállítás világos. Üdv Kiborg
Sziasztok az ATmega32-őt szeretnék USB-n keresztül számítógéppel összekötni, működésre bírtam a CDC-232-őt de olyat szeretnék létrehozni hogyha pl kiküldöm azt hogy "helló" akkor bekapcsoljon 1 led-et. A segítség abban kéne hogy melyik változót kéne figyelnem illetve ha bejön valami a TX lábon akkor azt melyik változón keresztül kapja meg az usb.
|
Bejelentkezés
Hirdetés |