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
Háhááá!!!
![]() A megoldás csupán annyi volt hogy az ADMUX utolsó 3 bitjét 1-be raktam. Köszönöm a segítségeteket! ![]()
Ezek szerint nem is azt a csatornát mintavételezted, ahol a poti volt? Mondjuk eddig 2x kérdeztem, melyik lábra kötöttél potit, de válasz nem jött. Na mindegy.
Bocsi elírtam, ADCSRA utolsó 3 bitje. Amúgy kettővel feljebb írtam hogy ellenőriztem a lábakat.
Alacsony sebességnél és a küldésnél beiktatott szünetekkel is ezt csinálja?
A szünet volt a megoldás, ami a windows console program(om)ba kellett.
Elnézést kérek, hogy megint lemaradt az egyik legfontosabb információ, hogy a PC-n futó programot, ami a kommunikációt végzi a PC és az AVR között, is én próbálom megírni. Köszönöm a segítséget!
Tetszik az elgondolásod, játszottam hasonlóval.
Érdemes az adatokon azt a néhány hibajelző vizsgálatot elvégezni, kis plusz munkával sok időt, fölösleges melót lehet megtakarítani mindkét oldalon.
Sziasztok, van ötletetek hogy ez a 10 soros program miért nem érzékeli a gombnyomkodást? A gombot lenyomva földet kap PD7 (A led jól van bekötve azt tudom kapcsolgatni a programból csak nem gombnyomkodással)
Logikai értékkel próbáld:
Az a vicc, hogy egy másik kapcsolásban ahol ugyan ezt a mikrokontrollert használtam ebben a formában működött:
Egyébként rámértem a uc lábára és 1V van rajt, nem 5-nek kéne lenni? Mikor nyomom a gombot akkor természetesen 0V De mivel inputnak van állítva a láb nem tudom, hogy jó e az az 1V amit mérek rajta ![]() Megőrülök, hogy egy ilyen egyszerű dolog is képes nem működni grrr ![]() A logikai és nem hiszem hogy jó ötlet, mivel PINB a számomra érdekes biten ha 0-ra vált máshol még lehet benne 1-es bit két 0-nál nagyobb szám így mindíg igazat adna. A hozzászólás módosítva: Máj 29, 2015
Az 1V szerintem kevés. Próbáld meg ellenállással. Ha a portot másra is használod (ott van a LED!) &&, vagyis logikai érték kell.
Így sem működik? A hozzászólás módosítva: Máj 29, 2015
Holnap reggel kipróbálom, ma már nem kínlódok vele, de mint ha logika éssel is próbálkoztam volna. Mindenesetre ezt a formát is próbáltam, ez sem volt jó:
INNÉT lestem el, ez is atmega8 csak a gomb van máshova kötve. Valóban a led is PORTD-n van de ide már kínomban tettem át a gombot, előtte PC2 lábra volt kötve onnét sem működött. A hozzászólás módosítva: Máj 29, 2015
PD7 és a vcc közé tegyél be egy 1-15K-s ellenállást. Ha működik a portlábon elszállt a felhúzóellenállás. Ha nem és ugyan ez a kód másik lábon megy, a portláb szállt el.
C-ben nincsen "igazi logikai érték". Ami nem nulla az igaz, ami nulla az hamis, azaz a fenti kód az tökéletesen működik.
Amit te írtál az pedig hibás alapból, mivel ilyenkor két állítást "éselsz össze", tehát PIND ( PIND mint "logikai érték") ÉS (1<<PD7) (ami természetesen mindig igaz lesz, mivel nagyobb mint nulla), ergo PIND && (1<<PD7) állítás akkor igaz, ha PIND nem nulla, és akkor hamis ha PIND == 0. Ui.: Remélem értelmezhető amit írtam sajnos van már bennem pár sör ![]() ![]()
Szerintem nem érti. Lényeg hogy itt bitművelet van, nem logikai vizsgálat. Illetve az is van,
de először akkoris a bitművelet. És ez így jó...
Nem logikai kell, hanem aritmetikai (bitenkenti). Miert kellene logikai?
Viszont az 1V az tenyleg keves. Pedig meg a felhuzo is be van kapcsolva. Az ellenallas jo otlet, de meg kell keresni az okat, hogy a belso felhuzoval miert csak 1V-ig megy fel a labon a feszultseg. A hozzászólás módosítva: Máj 30, 2015
Ha ujjal hozzáérsz, változik? Ja és mekkora a tápfesz? VCC és AVCC összekötve? GND is?
Véletlenül nem marad RESET-ben a cucc? A programozót ha lehúzod? A hozzászólás módosítva: Máj 30, 2015
Na ezt valóban nagyon benéztem, köszönöm a helyreigazítást
![]() ![]() A hozzászólás módosítva: Máj 30, 2015
Most egy dróttal próbálgatok földet adni a kiválasztottt input lábra és így működik! Rossz a gomb? Lehidalok
![]() Update: Közben meg is lett a hiba, persze én voltam hülye... A gomb egy joystickról van kivezetve és az eredeti vezetékeit nem vágtam le amik az isten tudja hova vezetnek a joystick áramkörén belül. Köszönöm mindenkinek a segítséget! Ja és a bitenkénti &-t használom, azzal működik. A hozzászólás módosítva: Máj 30, 2015
Szuper.
Semmi gond a bitenkéntivel, ha nullát vársz és az eredmény is nulla. Nemrég futottam bele egy hasonló, de összetettebb problémába, azért ötlött fel bennem.
Üdv.
Még nagyon új vagyok a mikrokontrollerek világában, tegnap megépítettem egy 7 szegmenses órát. ATMEGA8-16PU uC-t használtam, a beépített 8Mhz-t rendszer órát használtam 8.as osztóval, de az óra eszméletlenül pontatlan, 1óra alatt kb 1 perc késést szedett össze. Az lenne a kérdésem, hogy rátehetek-e egy 32Mhz-s órákba való kvarcot, arra is vonatkozik a 8-as osztó, továbbá amikor a 16 bites timer2-t inicializálom akkor ott még az 1024-el osztódik az órajel, ezek vonatkoznak külső kvarcra is? Vagy ha nem is 32Mhz-s kvarcot teszek rá mit ajánlotok? A lehető legpontosabbra kéne csinálnáom az órát. Üdv, Máté
Szia!
Használj órakvarcot. Azzal lesz a legpontosabb az órád. EZ lenne az. Nem vagyok nagy AVR-es és nem tudom hogy azon a kontrolleren van e olyan lehetőség hogy az egyik timert külön órajelről járatod és van egy láb ahova az órakvarcot kötheted. És akkor a kontroller futhat belső órajelről a timer ahol számolsz az pedig a külső órakvarcról.
RTC IC-n nem godolkodtál? Pl. DS1307. Én ilyennel csináltam már órát, havonta - kéthavonta egy percet késik.
Nemrossz kis IC, csak azt nem értem hogy erre is ugyanúgy kell egy kvarc, tehát ennek az IC-nek a pontossága is azon múlik hogy a rátett kvarc mennyire pontos, tehát ugyanott vagyok igazából. Vagy ilyen precizitást soha nem fogok mikrokontrollerbe programozni?
Az óra kvarc az 32,xxxx KHz tehát órajelnek egy kicsit lassú. atmega8 azt hiszem 16MHz-ig húzható tehát 32 MHz-nem tehetsz rá. A programtól is függ a pontosság, de ha egy órakvarcos oszcillátor jeleit számolod, a különben rendes órajellel ketyegő kontrollerrel az elég pontos tud lenni. A rezgőkörbe lehet tenni trimerkondit a pontosság beállítására. De ha igazán pontos órát akarsz akkor csak a rádió vezéreltek jöhetnek szóba.
Ha a pontosság és a rendelkezésre állás a fő szempont, előre elkészített, beállított modult vennék (pl. ilyet: bővebben: Link).
Ha az alkotás öröme, akkor sok kísérlettel, számolgatással, tanulással járnék végére a dolognak.
értem, de azt nem tudjátok hogy a külső órára vonatkozik-e a 8-as osztó, mert ha a 32-t nekem leosztja 8-al akkor jó lehetne, nem? A programról nagyvonalakban, meg hogy úgy működik hogy folyamatosan multiplexeli a 6 darab 7szegmenses kijelzőt, és közben a számláló ha elér egy megadott számot(eltelt egy perc) akkor interrupttal lefuttatja az alábbi rutint:
ISR(TIMER1_COMPA_vect)//[0]-óra,[1]-perc,[2]-másodperc
ez jó megoldás? vagy valamit rosszul csinálok? és még egy kérdés, hogy ez a számláló ctc módban megy, és a számláló mikor törlődik? amikor belépek a megszakítási szubrutinba vagy ha kilépek belőle, mert lehet hogy onnan is jön a pontatlanság hogy miután növelte a másodpercet a három darab if még lefut ás csak után indul újra a számláló. Engem abszolút csak az alkotás öröme vonzz, végre elkezdtünk egyetemen normális dolgokkal foglalkozni(digitális technika), és innen jött a nagy mikrokontrollerezés ![]() A hozzászólás módosítva: Máj 31, 2015
Sejtettem, hogy ez az élvezetekre van kihegyezve
![]() Szerintem a megszakítás előosztásait és a Timer értékét bármilyen kvarc esetében be lehet lőni úgy, hogy az óra pontos legyen. Magasabb frekvenciájú kvarcnál ez könnyebb lesz, kell előtte számolgatni. Ha mégsem jön össze, lehet pár KHz-et hangolni a kvarcon.
A különbség az, hogy ezek az orakvarcok kismillio számban és többé kevésbé kalibráltan vannak gyártva ( minden jobb elektronikus irában ugyanez van), és még a legocskább is havi 10-20 mp hibahatáron belül van.
Igen, lehet külső órakvarcot használni (a program pedig futhat a beépített oszcillátorról). Ugyanolyan pontos lesz vele, mint az RTC IC-kkel. Ami kicsit trükkösebb, hogy áramszünet esetén ne vesszen el az idő. Ezt valahogy érzékelni kell és bekapcsolni a megfelelő energiatakarékos módot (persze kell bele egy elem is
![]() A hozzászólás módosítva: Máj 31, 2015
|
Bejelentkezés
Hirdetés |