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
Sebességmérésre használnék egy Atmega8L procit. Belső órajelről mennyire lenne stabil? Vagyis elég stabil a belső órajel ahhoz, hogy időt mérjek a procival?
Milyen pontosságot vársz el?
A belső 8 MHz+/- 5% alapban, de -50/+100% hangolható. És persze van hőfokfüggése is...
Annyira nagyon pontos úgysem lesz, csak az a kérdés, hogy mennyire hőfokfüggő a belső oszcillátora.
Újabb érdekesség. Fordítanám le a kódot és ezt írja:
Idézet: „avr-objcopy: 'boardcomp.elf': No such file” Eddig ilyet még nem írt. Igaz elég rég foglalkoztam már avr-el, meg azóta volt egy újra telepítés is a gépemen. Mi lehet a gond?
1: WinAVR, vagy AVR Toolchain fel van telepítve? Utóbbi az AVR Studio 4.19-el is települ.
2: Az elérési útban van szóköz? Azt tudom hogy WinAVR-nél gondot okoz(pl. Documents and Settings) 3: Projekt beállítás megfelelő? Pl. elérési utak?
Valami a makefile-al volt, hiányzott belőle a target sor után a "CC = avr-gcc" sor egyenlőség utáni része. Betettem, belinkeltem neki külön a makefile-t és jó lett.
Ha már írok, akkor lenne még egy kérdésem. Atmega8-ba hogyan lehetne bootloadert tölteni, hogy azután soros porton keresztül tudjam feltölteni a szoftvert? Így is érdekes lesz feltölteni a szoftvert, mivel az avr studio nem ismeri fel a dopert.
A bootloader általában AVR910-et "emulál", amit tudtommal az AVR Studio 5 már nem támogat.
A 4-essel meg elmegy a Doper is...
Itt van egy stk500 kompatibilis bootloader: Bővebben: Link
Ha jól emlékszem, akkor atmega8-cal is működik.
A gondom az, hogy az avr studio nem ismeri fel a doperemet. 4.19-es studio és nem látja a dopert. Találtam egy bootloadert, nem tudom, hogy ez mennyire lenne jó. Bővebben: Link
Itt van egy stk500 kompatibilis bootloader: Bővebben: Link
Ha jól emlékszem, akkor atmega8-cal is működik.
A baj nem az AVR Studio-val van. Lehet a Doper is hibás, de inkább a driver nem lett megfelelően telepítve.
A drivere nincs aláírva, ez okozhat gondokat win7 esetében...
Nemrég kérdeztem itt, hogy mi lehet a gond, akkor sem jöttünk rá, minden újra lett telepítve, driver is, több forrásból is, többféle driver, egyikkel sem lett jó. Meg azért is lenne jó ez a bootloader, mert nem kellene kivezetni a programozáshoz szükséges lábakat, elég lenne csak a soros port hozzá és kész. Ez egy bedobozolt, kibonthatatlan helyen lévő eszköznél előny, mert a soros porthoz elég egy jack aljzat egy elérhető helyen és kész a kommunikáció, lehet szoftvert frissíteni.
Sziasztok!
Régóta használok egy dallas IC-s hőmérőt soros portra illesztve, ami grafikonokat készített eddig a webre. Szeretném kicsit tovább vinni a dolgot, hogy ne kelljen hozzá PC. Arra gondoltam, hogy a feladatot egy AVR-el és egy Arduino Ethernet Boardal oldanám meg. Ezzel az Arduino-s megoldással kapcsolatban viszont lenne pár kérdésem. 1, Ha jól veszem ki, akkor i2c kommunikáció megoldható a board és a mikrokontroller közt, ami olvasná folyamatosan a hőmérséklet adatokat. Ha valaki foglalkozott már gyakorlatban is a szóban forgó megoldással és van forráskódja amit publikálna, szívesen venném. 2, Egy alapvető HTTP kliensen gondolkodok, ami 5 percenként meghívna egy URL-t és POST-al átadná a mért adatokat. Ehhez gyakorlatilag elég "csak" egy IP stack TCP felett. Gyakorlatilag pedig akkor még nem beszéltünk a névfeloldásról(UDP) de ettől azt hiszem el is tekinthetünk egyelőre. Ehhez akkor gondolom van egy C library amit szintén be kell linkelnem a programomba, tehát valami nagyobbacska AVR-ben kell gondolkodni. Egyelőre csak felmérem a terepet, komolyan nem néztem utána a dolgoknak. Erős a dilemmám, hogy egy Raspberry Pi vagy egy mikrokontrolleres megoldás lenne-e nekem a legjobb. Jelenlegi információim alapján utóbbi felé hajlok, a sok új dolog tanulása miatt és talán gazdaságosabb rövid és hosszú távon is.
Mit szeretnél pontosan?
Simán tudja az AVR. Ethernet: Wiznet? ENC28J60? A dallas chip 1-Wire buszos! A névfeloldás a DNS Arduino alatt rengeteg minden készen van. RasPI-re linux + OWFS. Tipp ENC/Wiznet modullal
A fura az egészben, hogy a doper tökéletesen működik avrdude alatt. Most programoztam vele, mivel studio alól nem ment, így ezzel próbáltam és tökéletesen olvas, ír.
Nekem volt egy olyan telepítésem hogy az stk500 plugin nem jelent meg a menüsorban.
Szóval egy AVR Studio újratelepítés javasolt. Nem kell törölni semmit, csak a telepítőt újra lefuttatni.
Újratelepítettem az avr studio-t és most már jó.
Nagyon szívesen! Sejtettem hogy valahol azzal lehetett gond...
Az IP stack a TCP alatt van. A névfeloldás nem UDP, hanem DNS. Az Arduinoval az i2c kommunikáció egyszerű, mint az egyszer egy. Szerintem lesz is hozzá neten rengeteg példa. De az arduino kezelése tényleg pofon egyszerű.
Én a helyedben inkább a TCP/IP rész miatt aggódnék, és nem csak azért, mert látszik, hogy homályos számodra. A raspberry pi egy remek dolog, de ha linuxot még csak android telefonban láttál, akkor eltanácsollak tőle. Az, hogy milyen AVR-t válassz azt nagyban befolyásolja, hogy milyen arduinok vannak, persze feltételezve, hogy egyáltalán arduinozni akarsz.
Akkor kezdett nekem is a gyanúm a studio-ra terelődni, amikor avrdude-al ment a doper. Ha egyikkel megy, akkor csak nem driver probléma. Csak fura, hogy ezelőtt is ugyanígy volt feltelepítve és nem ment. A lényeg, hogy jó lett.
Közben feltelepítettem az AVR Toolchain-t is és megoldódott a fordítás probléma is.
Üdv!
Egy Willem GQ-3X programozóval kellene egy Atmega162-n beállítani a fuse biteket de itt nincs olyan, hogy "BootLock11, BootLock12, Lock1 és Lock2, mint a Ponyprognál. Vagy csak máshogy hívják... Hogy is van ez?
Sziasztok!
Igen, bocs, rosszul írtam, tehát TCP, IP felett. A névfeloldás valóban a DNS, de az ugye nem TCP-n hanem UDP-n megy, erre próbáltam utalni. De ha jól veszem ki, ezzel sem lesz gond az arduinoval. Linuxot/BSD pedig nem androidon láttam először, van "egy-két" szerver a kezem alatt, mivel ezzel foglalkozom Leírom akkor pontosan, amire irányult a kérdésem. Tehát nem szeretnék tökre az alapoktól indulni. Nem szeretném az IPv4-et (sem a 6-ot) lefejleszteni mikrokontrolleres környezetre... Ahogy a fentiek alapján elképzelem most a lehetőségeket, - ahogy akár Windowson/*nix-on is - nyitok egy TCP socketet és kommunikálok rajta. Köszönöm a tippeket és a linket TavIR-AVR-nek!
A TCP/UDP kezelése e lehető legegyszerűbb a WizNet W5100 chipcsaláddal.
Kezelése: - Mi a TE IP-d, MAC-od - Milyen csomagot kérsz(UDP/TCP) - melyik porton - mi a gateway/router száma - mi a csomag? Küldés Semmit nem kell NEKD megcsinálni. Az alsó 3 OSI réteget HW-ből tudja Az ENC-re meg meg van írva. Arduinoban minden kész, bascom alatt szintén (most a Wiznet pl. 4-5 sor lett a 2.0.7.5-s verzióban )
Sziasztok!
A sebességmérővel kapcsolatban, amit pár napja tárgyaltunk. Kész lett a prototípus, mágnes huzogatva a hall szenzor előtt mér is, viszont az utolsó mért adat a kijelzőn marad mindig. A számolás és kiíratás itt történik:
A Time lenne az a változó, amit visszakapok a timer értékét, a két jel között eltelt idő. Ha itt a while ciklusban a végére beírom a Time=0;-t, akkor semmit nem mér, mindig 0 lesz a kijelzett érték. Mit lehetne tenni, hogy nullázza az értéket, ha nem kap jelet?
Mert itt a szenzorod "triggereli" a mérést, ha nincs triggerjel akkor a végtelenségig vár a következőre,
addig a pontig csak az előzőt tudja mutatni! Kell egy "timeout" amin túl nullát mutathat a műszer... A Te esetedben indítanod kell egy másik időzítőt, és minden impulzusnál újraindítani(TCNT0=0) Ha CTC módba állítod, akkor csak azt kell megadnod neki hogy mi legyen ez a timeout(pl. OCR0(A)).
Vagy esetleg ha a timer overflow-t nézem. Ha túlcsordul a timer, akkor nincs jel és lehet nullázni.Egyébként kipróbáltam élesben és csak bezavar itt is a motor gyújtása. Érzékelő árnyékolt kábelen megy, valami mégis bezavarja. Ahogy beindul a motor, máris 5-6-ot mutat az óra, előtte pedig 0 volt. Hogyan lehetne a bementet szűrni?
Esetleg ez segíthet? Most találtam Atmega8 timer1-nél. "Input Capture Noise Canceler" Ez elvileg egy beépített szűrő lenne.
ICNC - egyfajta szűrő az 1-2 órajelnyi zajok kiszűrésére, de csodákat ne várj tőle. Az AVR ICP1 lábára
egy ~220Ohm felhúzó ellenállás nem árt. Nagy bemenő impedancia mellett a vezeték mindent összeszed.
Nyitott kollektoros a hall elem kimenete, így 1kOhm-al van tápra húzva, bár igaz, hogy len a szenzornál. Megpróbálok a procinál is betenni egy felhúzó ellenállást.
A procinál is tegyél, de sztem az 1k is túl nagy. A Csapj a falra! játékomba pl. a 4 méteres vezetékek miatt
már 100Ohm kellett hogy a felvillanó LED-ek miatt ne rúgjon vissza a nyomógomboknál.
Holnap megpróbálom 100Ohm-al akkor. Az 1k nem vált be.
|
Bejelentkezés
Hirdetés |