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
strstr fuggveny visszadja az idezojel elofordulasi helyet es ezt felhasznalva at tudod masolni az elso 9 karaktert strncpy fugvennyel (szukseges betenni include-ba a string.h).
A USARTReadChar fuggvenynel tegyel potosvesszot a while cilkus vegere.
Maskepp jonak nez ki a kod. A hozzászólás módosítva: Máj 28, 2014
Ugyanaz az a helyzet. Itt van egy pár kép a beállításokról : link
Amúgy a modult 5V -ról táplápom, és nincs feszültség osztó az Rx lába és a microcontroller Tx lába között. (azt mondták máshol hogy amelyik modulnak van baseboardja annak nem kell, amúgy is megkapom jól az adatot ha direkt a kontrollerről küldöm)
Ha kulon tudod valasztani a mikrvezerlotol a BT modult akkor probald meg osszekotni az RX-TX labakat es ugy vissza kell kuldje amit kapott.
Nem vagyok meggyozodve, hogy fogja szeretni hosszu tavon az 5V-os tapot, adatlap szerint csak 4.2V-ig mehet
Rajta azt írja, hogy 3.6 - 6 V.
Már teszteltem úgy, vissz is küldi amit kiküldök.
Fórum tetején lévő sárga alapú szövegdoboz 3. pontja, nem? Milyen kristállyal megy az AVR?
57600-as baudrate-nél 7,84 % a hiba Bascom szerint. 11.0592 Mhz-es kristálynál 0%.
Köszönöm!
Más: Az alábbi stringben a 18-at szeretném egy integer változóba berakni:
Így szintaktikailag helyes? Azért a forrast másoltam a forras-ba mert nem akarok plusz változót létrehozni, hogy a memóriát ne foglalja.
Igy is helyes szintaktikailag, de lehet egyszerubben is, hogy nem hasznalod a strncpy-t
A hozzászólás módosítva: Máj 29, 2014
Egy kis nixie-s órát készítek. Egyelőre 1Hz-ről járna, és szeretném ha az üres időt "átaludná" a proci. Mindig írtátok, hogy az IT alatt csak egy flag-et állítsunk és a lényeg a fő ciklusban történjen. Ha én csak pár száz utasítást szeretnék lefuttatni másodpercenként (kijelző frissítése és bill. figyelés) akkor sem történhet mindez az IT-n belül?
Ha nem akkor hogyan tudja a főprogram, hogy ő következik? Elég egy llink ha valahol van ilyen leírva/magyarázva.
Ha nem akkor hogyan tudja a főprogram, hogy ő következik?
A foprogram egy vegtelen ciklus. Ezen belul van egy
Az IT a flaget beallitja, a foprogram meg folyamatosan figyeli (ahogy raer, a proci kihasznaltsagatol fuggoen) a flaget, Amikor beallt a flag, vegrehajtodik a hozza tartozo kod. Ja most esett le, hogy altatni szeretned, Ebben az esetben valami esemenyre fel kell ebreszteni a processzort, tovabb a fenti ervenyes. A hozzászólás módosítva: Máj 30, 2014
Ez lesz az, köszi. Tehát ha a főprogramban altatok és beüt az IT akkor a főprogram is feléled az IT kezelése után, és továbbmegy a következő utasításra és lefut minden ami az altatás után van.?
Sziasztok ismét!
Újra kérdéssel fordulok a fórumhoz. A-D átalakítást szeretnék a következő módon véghez vinni: ADC4 és ADC5 lábat használnám egy Attiny24-en. A program egy pontján az ADC5-öt mérném meg, ezt eltárolnám egy globális változóba, majd a program későbbi pontján a másikkal hasonlítanám össze, ami közben free-run módban megy és folyamatosan frissít egy változót. Utánaolvasás után így csináltam meg: -Készítettem egy void InitADc() függvényt, ahol az előosztást, balra-tolást, AD megszakítást és a globális megszakításokat (sei) beállítom. Ezt a fenti függvényt a main-ben hívom meg egyszer, a végtelen ciklusba lépés előtt. És most jön az a rész, amiben még ennyire sem vagyok biztos, hogy jól csináltam. Van egy másik függvény, ami akkor hívódik meg, ha az ADC5-öt szeretném egy változóba eltárolni. Így néz ki:
Az ADC megszakításában csak annyit csinál, hogy az ADCH értékét átadja egy változónak. A kérdésem itt az volna, hogy így szabad-e (szokás-e) A-D átalakítást csinálni? Illetve, az "első 16 mérés eldobása" rész úgy fog-e működni, ahogy én azt szeretném? Vagy inkább az ADIF flag-et kellene figyelnem? A biztonság kedvéért tettem bele szüneteket, de lehet, hogy csak felesleges időpocsékolás. A hozzászólás módosítva: Jún 2, 2014
Egy kérdésem lenne.
Egy portra küldök ki egy szintet ( impulzussorozat akar lenni). Hogy ideális kegyen a forma a második lépésben a port kimenetének a komplementáris állapotát küldeném ki. Ezt egy com (in to t) (a port bit -pin- állapota a T regiszterbe) paranccsal beolvasom Azaz a port állapotának a komplemense kerül a T regiszterbe, majd innen küldöm ki vissza ugyanarra a portra. Egyben nem vagyok biztos, hogy ilyenkor meg kell e forditani a port adatirányát (ddr), vagy pin leolvasához nem kell irányváltás. ( az egész port elvben mindig kimeneti irányban maradhat) Kösz.
Szia!
Maradhat kimenet. A mellékletben az ATMEGA48 leírásából az ide vágó részt találod
Kösz akkor még valahol hiba van....
Van amikor használható,de általánosságban nem tartom jó tanácsnak a flag-es IT kezelést,pont a valós idejű reagálás a megszakítások lényege.Ha csak egy flag-et akarsz billenteni ,akkor nem sok értelme van a megszakításra ugrásnak,elég ha a konkrét IT flag-et nézed.
Pont nem flag-et akartam kezelni. Klasszikusan nyomógombot az egyik IT-re és léptetni az órát az 1Hz-es IT-re. Csak azért kérdeztem rá, mert előtte sokan írták, hogy inkább a főprogramban kezeljük az eseményeket.
Akkor megy az általam elképzelt módon.
Csak arra mondatodra reagáltam,hogy az IT-t egy flag-el lekezeljük, a megoldásodat nem tartom követendő példának,a megszakítás legyen minél rövidebb,ez alapszabály.
Az Atmel oldalán a dokumentumok közt van egy példaprogram,óra nyomógombokkal,érdemes belenézni. Most nem tudom belinkelni,mert nagyon le van lassulva a weboldaluk.
Hogy lehet elegánsan kiírni LCD-re egy olyan szöveget, amiben saját karakterek is vannak? Peter Fleury LCD könyvtárát használom, így definiáltam saját karaktereket:
És jelenleg pl azt, hogy hőmérséklet így íratom ki:
Biztosan van rá valami elegánsabb megoldás, pl valami buffer karaktertömbbe beírni ezeket, és utána egy lcd_puts(buffer) sorral kiíratni. A gond csak az, hogy nem tudom hogyan kéne ezt megcsinálni... Van valakinek ötlete?
lcd_puts("H\4m\1rs\1klet");
Ez a "\nnn" irosamod, ahol "nnn" egy 1, 2 vagy 3 jegyu OKTALIS, azaz nyolcas szamrendszerbeli szam. \4 \5 \6 \7 \10 \11 .. \17 \20 \21 stb. De \0-t nem javaslom stringekben hasznalni, mivel az a string veget jelenti a C nyelvben, tehat csak addig fogja kiirni: lcd_puts("alma\0fa") eredmenye a kijelzon csak alma lesz.
Sziasztok
Ezzel kapcsolatban van valakinek tapasztalata? Meglepően olcsó eredeti JTAG-hez képest, ez meglátszik működésében is?
A kijelzőkben a 0-7 és 8-15 karakterkódok megegyeznek. A '\0' valóban nem szerencsés,
helyette a '\8' javasolt. Így lehet mind a 8 "egyéni" rekeszt kihasználni.
A JTAG ICE-ra épülő a klónokkal nem szokott (túl sok) probléma lenni. Érdemes tudni hogy
a valamire való klónok az Atmel eredeti firmware-t használják ezért ugyanazt kell tudniuk. Az USB drivert, a kimenet meghajtást és a tápellátás részét viszont alaposan el lehet szúrni. Nem tudom mit tud egy ilyen cucc, de én építettem már jó sok klónt és valahogy van egy olyan érzésem hogy ez az ár nálam már az anyagár alatt van: ATMega16 mikrovezérlő, USB illesztő, tápfesz áramkör, kimenet meghajtás, USB kábel, szalagkábel, doboz, kapcsoló, LED. A hozzászólás módosítva: Jún 9, 2014
Sziasztok !
Volna egy olyan gondom ,hogy szeretnék felprogramozni egy ATMega8 avr-t avr - Doperbe . egy éve építettem ,de nem jutottam a végére . Mi módon tudnám ezt most megtenni , STK300 letölt kábelem van ,a gépen Xp fut , avr studió 6 meg Bascom avr demo 4Kb . Forrás kódom Hex - a fájlban van . Segítségeteket előre is köszönöm !
PonyProg vagy Bascom tudja ezt a kábelt használni.
|
Bejelentkezés
Hirdetés |