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
Sziasztok érdeklödni szeretnék hogy evvel a példánnyal lehetne attiny26-ot felégetni?
Előre is köszönöm.
Bocsi!
Igazad van! Elírtam 400byte
Sziasztok!
Egy olyan programot szeretnék írni, ami az első gomnyomásra felkapcsol egy zöld ledet, majd mégegy gombnyomásra átvált sárgára, pirosra, zöldre.... Ha rövid ideig nyomva tartom, akkor kikapcsolja a ledeket. A program elkészült, de csak a zöld led világít(+néha kikapcsol) ha nyomom a gombot, ha nem. A program így néz ki:
A segítséget köszönöm!
Első ránézésre: switch-case "helyesírása"! Nézz meg egy mintaprogramot és abból másold, ha nem megy fejből!
Szintaktikai hiba. Vagy csak a bemásolás miatt tűntek el karakterek belőle?
Vagy csak én vagyok a ... áh, bocsi.
Csendben maradtam volna...
Gyorsan összedobtam a dolgot és nekem a váltás működik, csak a kikapcsolás nem megy benne, mert a zöld villog 0,5s-onként.
Van két lehetőség. Az egyik, hogy addig maradnak sötétek a ledek, ameddig nyomod a kapcsolót, vagy addig amíg újra nem indítod az AVR-t. Az elsőt egy while ciklussal lehet megcsinálni, a másodikat pedig egy break paranccsal. Kb így:
A másikat pedig:
Prell hibád van. Tegyél az
Mire mondtam valamit, már meg is válaszolta gr98.
Ez talan segit valamit
Most írtam kómás fejjel, nempróbáltam ki!
Sziasztok!
Tudja valaki, hogy ATMEGA esetén (16MHz quartz-al) mekkora lehet egy külső INT elméleti maximális frekvenciája. Köszi.
HELLO !
Valaki tudna egy leírást adni, hogy AVR studioban hogyan kell programozni és hogy hogyan kezdjek neki a programozás tanulásának? Egy ATmega8-al szeretném elkezdeni mert az adatlapja szerint sok funkciót tartalmaz ezért az alapoktól kezdve a nagyobb programokig meg tudnám tanulni a kezelését. Még annyi kérdésem lenne, hogy milyen nyelven tanuljak meg programozni? Két nyelvről biztosan tudok az egyik az ASSEMBLY a másik a C vagy C++. A segítséget előre is köszönöm.
Kattints a "Kapcsolasok"-ra, ott a kereseshez irdd be, hogy "nyolc", elo kell jonnie a Topi fele anyagnak, a "Nyolc labbal" cikksorozatnak. Szerintem indulj ki onnan, meg olvasgasd ezen a forumon, hogy kik miket irkaltak, milyen hibakkal talalkoztak es azokra milyen valaszok jottek.
Amugy Assembly vagy C vagy "Mas": Van meg a Bascom-nak nevezett dolog, amihez en nem konyitok, talan azt is megnezheted, de velemenyem szerint C-vel probalkozz. Assembly-t is erdemes megtanulni legalabb olyan szinten, hogy olvasni tudd a forras kodot. C++ -t en hanyagolnam mikrokontrolleres kornyezetben...
A Hobbielektronika weboldalon kattints a Kapcsolasok pontra, majd az MCU (Mikrokontroller) pont alatt az AVR-re. Az itt levo 9 cikket erdemes kezdetnek elolvasni.
Sziasztok!
USB csatlakozóval ellátott Joystick, AVR processzorral történő lekezeléséhez keresek iránymutatást. Nem olyat ami PC beiktatásával működik, hanem ami közvetlenül fogadja a jeleket a Joyról. Tippeket előre is köszönöm!
Szia!
Engem anno egyetemen bevágtak a mélyvízbe egy atmega128-al, kb egy év alatt értettem meg a dolgokat, pedig előtte C-ben már elég jól programoztam. Ha még nagyon kezdő vagy, akkor valóban érdemes a 8 lábas csodának nekiállani, bár az Atmega8 sem egy nagy szám, ugyanakkor csodákra is képes. (Nekem a házi vekkerem is azzal van megcsinálva)
USB host implementációt (sem szoftveres, sem hardveres) én még nem láttam 8 bites AVR-en. A 32 biteseken van OTG, de az sem tud hostként viselkedni.
AVRben nincs USB host. Azaz a joystick nem megoldható.
Kb 16 MHz / 10-16 órajel. Ekkor a főprogram NEM fut, csak az INT....
Gyakorlatilag ha nem mentesz regisztert, semmit, és pl. számlálásra kell, akkor a belső órajel max 40%-t lehet megfogni.... De ekkor _nincs_ belső utasításvégrehajtás.
Szia. Ahhoz USB master kellene, hogy legyél.
Device program van ATMEGA-ra és USB IC is sok van. Itt azonban neked kell HOST-nak lenned. Ennek nézz utána: ISP1160 (2xUSB1.1 ha jól emlékezem) Ez van a Lom.x-nél Ha jól emlékszem a szegedi cégnél van 1xUSB2 HOST. A keresőjükben keress arra hogy USB.
Az egyik haverom nemrég kezdett el AVR-ekkel foglalkozni. Nagyon javasolta nekem a mikroC for AVR és mikroC for PIC programokat mivel ugyan az a kezelőfelülete mind a kettőnek így ha megtanulok AVR-t programozni és bele akarok tekinteni a PIC-ekbe akkor sokkal könnyebb lesz mert csak pár parancs és a program megírásában különbözik egy kicsit a két proceszor, ha megtanulom a PIC-ek és AVR-ek felépítését amelyben nagyon sokat segít az adatlapjuk akkor már nem lesz gond megírni mind a kettőre a programot. Ahogy mondtátok el is olvastam topi nyolc lábbal című cikkeit és elolvastam a nulláról a robotokig cikksorozatot valamint a tavir oldalon a bascom könyvet is elolvastam. Átnyálaztam az ATmega8 és a PIC16F628A adatlapjait és már kezdem érteni hogy a programban mit, miért és hogyan kell megírni. Én tegnap lehúztam mindkét programot és nagyon megtetszett, hogy ugyan az a kezelőfelülete mind a két programnak így ha egyik processzorról át akarok menni a másikra akkor nem kell megtanulnom egy új program használatát és kezelését sőt mint monda a haver tényleg csak nagyon kicsi eltérések vannak a két processzor programozása között pl az ő szavaival élve: "a portok irányát pl TRISA helyett DDRA-val állítom, timert máshogy állítom be stb." hát ezt mondta és van benne valami igazság. ITT találhatók a programok amikről beszéltem ráadásul még sok egyéb programozási nyelvet is találunk pl. mikroPascal, mikroBasik és mikroC és ez mind támogatja mindkét processzorfajtánkat.
Lehet hogy én is megpróbálkozok vele. A barátom 5 hónap alatt írt egy programot egy időzítőre. Csatolom a kapcsolási rajzot és a HEX-et.
INLINE EEPROM probléma:
Valakinek van frappáns megoldása arra a problémára, miszerint hiába csinálok külön függvényt, aminek csak pointert adok, az EEPROM írás - olvasás, mindig valamiért INLINE lesz. Van egy kis procim, benne ~ 10-15 beállítási lehetőség, és a 2K-ból kb. 1,5K az EEPROM olvasások. Irreális a dolog. Hiába teszem ki külső függvénybe, és a beállításra csak címével hivatkozom. Írtam egy függvényt, abban ASM-ben megírtam az EEPROM írás részletét, és hiába sima fgv. a GCC mindig inline linkeli be. És tele van EEPROM írás olvasással az lss. Ha írok egy pl. alma(eeprom cím) függvényt, amiben meghívom akár a gyári eeprom.h-ból az olvasást, hiába nem inline az alma() fgv mégis inline lesz. Ötlet? Valami tapasztalat?
Szia Topi!
Akkor is ezt csinálja, ha megadod a fordítónak a "-fno-inline" kapcsolót? Üdv, Ballage
Hát a kód az összeesik, de sajnos van olyan rutin aminél fontos hogy inline legyen. Saját fgv, külön jelölve hogy inline. Így most az sem inline.
Azt esetleg beteheted egy #define makróként és akkor tutira "inline" lesz.
Szia.
Én Wait-el jártam így. A probléma az volt, hogy -Os opciónál a rövid kódot inline befordította. Vagy más fordítási opciót kellene használni. Vagy ahogy én is csináltam. A Wait és Delay-t kitettem egy .c file-ba és azt a filet -O1-el fordítom, a többi marad -Os. A kódom kapásból 1.2K-val lett kisebb.
De az a bizonyos Wait inline-nak van deklaralva, nem?
Nem inline!
Hiszen várakozás. Miért legyen gyors? A -Os opció sebességre optimalizál. És szerinte a rövid kódrészleteket nem érdemes hívni, hanem egyszerűen beszúrja. Nálam annyira optimalizált, hogy a Delay fg-be egy NOP-ot kellett raknom először, mert a for ciklust különben kioptimalizálta és nem volt delay-em. Ezután tettem át őket másik .c file-ba és annak az optimalizációja -O1 -lett (a többi maradt -Os). Így a kódban hívogatja ezeket a fg-ket és rendesen le is futnak. |
Bejelentkezés
Hirdetés |