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
A PINB 0.lábának állapota függvényében szeretnék egy elágazást. A cpi paranccsal csak az egész regisztert tudom vizsgálni, 1-1 bitet nem.
Nincs erre valamilyen egyéb megoldás? Én maszkolásra gondoltam, de az elég macerás, biztos van egyszerűbb is.
Szia!
Probálkozz ezzel: kapcsra_var sbic GOMB rjmp kapcsra_var Ez akkor engedi tovább futni a progit a ha a GOMB bit 0 Természetesen ezzel elágazást is csinálhatsz. A fordítottja az sbis parancs. Persze a program elején a GOMB változót definiálnod kell. például így: #define GOMB PINC,PC1 Itt a portc 1-es lába a bemenet Sok sikert!
Ha jól emlékszem tőled kaptam egy olyan programot, ami kiküldi soros porton, hogy "hello world", majd villogtat egy ledet.
Áttanulmányoztam és 2 dolog új nekem és nem értem pontosan hogy van ez. Én még csak betűnként tudok kiiratni ez a string kiiratás nem tiszta, megköszönném ha pár sorban elmondanád! ... .org 0x30 ;?Saját megszakítás vektor vagy mi? cmd: .db "Hello world!", 0x0d, 0 . . . ldi zl,low(cmd*2)-1 ; X regiszter feltoltese a Hello kezdetevel ldi zh,high(cmd*2) ....
Szia!
Igen tőlem kaptad. A dolog sokkal egyszerűbb mint te gondolod. Semmiféle megszakítás nem szerepel a programban. Az .org direktíva egyszerüen azt jelenti a fordítónak, hogy az utánna szereplő kódot hová fordítsa. Tehát az .org 0x30 azt jelenti, hogy a szövegváltozót a hexa 30-as címre tegye le. A cmd: egy közönséges címke, ugyan az mint az ugrásoknál, vagy szubrutin hívásoknál. a .db azt mondja meg a fordítónak, hogy az utánna követkerő karaktersor egyszerű string. (nem akarja befordítani parancsoknak) A 0x0d a soremelés, a legvégén pedig a sima 0 azért kell, mert ebből tudja a program, hogy vége a kiírni való szövegnek. A legutolsó 2 sor arra való, hogy a programnak megmondja honnan kezdje el kiírni az adatokat. Az a -1 csupán azért kellett, hogy könnyebb legyen ciklust írni rá. Remélem érthető voltam. A többiektól bocsi a sok szövegért.
De, most is PIC hívő vagyok, csak értek mindkettőhöz, a PIC-eket magam tanultam meg, az AVR-ekkel meg suliban foglalkoztunk alap szinten. Aztán beleástam magam a témába rendesen.
Ismeritek a Hexapod-ot? Akit érdekel, úgyis megtalálja... Nos, igen, nem titkolom, én is közreműködtem.
Sziasztok!
Végre elindul a dataflash memória. A szofveres SPI kódommal volt gond, továbbá egy nagyon furcsa gond miatt: Fordatáskor a fordító bead egy figyelmeztetést: main.c:212: warning: passing arg 1 of `USART_vSendByte' makes integer from pointer without a cast Egy szubrutint akarok meghívni ami kiolvasná a gyártóazonosítót a memóriából és visszatérő értékként adná meg, majd elküldi sorosporton. A sorosporttal nincs semmi gond, az tökéletesen működik, csak a visszatérő értékkel. a kód
Nem értem most miért nem megy, egy másik programomban ha minden igaz ugyanígy van írva, ott meg gond nélkül működik minden. A 67 helyett meg csak 21-et küld vissza.
lemaradt az egyik sorból:
while((UCSRA&(1< < UDRE)) == 0); De ez most nem számít. A [ code ] beszúrósdi dolog meg nagyon nem működik...>>
Jajj, de **** vagyok
Rosszul írtam.... Jól: USART_vSendByte(get_mfid()); tehát egy () Na mindegy...
[ c o d e = c ] kód [ / c o d e ]
Sziasztok!
Lenne egy nagy problémám. Szeretném megépíteni a gtk éle nixie csöves órát. de sajnos már az elején elakadtam. a letölthető fájlok között van egy *.c; *.hex; és egy makefile nevü fájl. sosem programoztam még avr-t, de még Pic-et sem letöltöttem a Bascom programot, de hamar rájöttem hogy nem jó, mert nem basicben van a progi hanem c-ben. kérdésem hogy milyen programmal lehet áttölteni a fájlt az ATMega8-ba? és milyen hardverre lesz szükségem? az STK200 jó hozzá? előre is köszi a segítséget mindenkinek. Kocsgab
Szia ! Csak most olvasom..
Lehet, hogy ez meg a basic lenyomata?
Szia !
Az STK200 az jo. Javaslom toltsd le a WinAVR-t es azzal egesd be.
köszi.
végül a ponyProg mellett döntöttem. még olyan kérdésem lenne, hogy milyen biztonsági és konfigurációs biteket állítsak be? köszi
ja igen és még egy dolog, hogy milyen jeleket kell invertálni?
A fuse bitek beállítását ebből jól meg lehet érteni. Fontos, hogy a ponyprogban a pipa 0-át jelent!
A jel invertálással, én nem foglalkoztam...
Felfogtam, megértettem, teljesen világos most már nagyon köszönöm a segítséget.
Hello!
LCD kijelzővel lenne egy kis problémám. ATtiny2313-mal kiiratok egy 2 soros LCD kijelzőre (VT162B) egy rövid szöveget inicializálás után, ami működik is, csak az első sorban a háttérben ott maradnak a sötét kockák, amíg nem nyomok a ponyprogon keresztül egy device reset-et. Ha simán ki-bekapcsolom, akkor ott vannak a kockák. Miért?
Minden karakteres LCD adat nélkül tápfeszültségre kapcsolás után "fekete kockákat" jelez ki.
Az ok, csak kiírja az adatot és a háttérben ott vannak a fekete kockák, ponyprogos reset után már csak az adat marad.
Betettem egy kis késleltetést a program elejére és így már jó.
bocsi
LCD-vel kapcsolatban lenne kérdésem.
Karakterenként tudok kiiratni, de nem tudom, hogy lehetne stringet kiírni és nem úgy, hogy én iratom ki betűnként. Nyilván vmi ciklus kéne, amivel a string egyes karaktereit áttölti egyesével az LCD-be, de ez a rész homályos egyelőre. .db "Hello!" ;ha jól tudom, így lehet stringet csinálni Egyelőre ez van meg, köszi a segítséget!
Nézd át ezt az oldalt,mindent megtalálsz:
http://www.mikrocontroller.net/articles/AVR-Tutorial:_LCD Én egy pointerrel (Z) rámutatnék a stringre,ehhez kell egy címkét adnod: LABEL: .DB expressionlist majd Z értékét növelve végigléptetni és egyesével kiiratni a karaktereket.A string végére tehetsz egy 0-át,így nem kell a darabszámmal foglalkoznod. Ha szabad javasolnom-saját tapasztalat-még mielőtt elmenne a kedved az egésztől,térj át C-re,pl. a Codevision jó választás,pofon egyszerű inline asm-t is a kódba illeszteni.
Na ezt alkottam, vagy inkább összelopkodtam, de a lényeg, hogy a Hello felirat helyett mindössze egy fekete kockát ír ki és próbálkoztam már mindennel, amivel tudtam.
Mi nem jó? Egy soros porti programból vettem ki a stringes részt és ott működött, itt meg valamiért nem. szoveg:.db "Hello",0 ldi zl,low(szoveg*2)-1 ldi zh,high(szoveg*2) kellmeg: lpm temp, z+ ; beolvassa temp-be cpi temp, 0x00 ; 00? breq DIE ; ha igen, nincs tobb kiirnivalo rcall KIIR ; Elmegy a kiiro rutinra rjmp kellmeg KIIR: rcall LCD_DATA rcall LCD_WAIT ret
A pointer definiciónál miért kell a -1 ?
Idézet: „ Az "összelopkodtam" helyett sokkal jobb ha megtanulod az adott nyelv lehetosegeit es majd azutan elsz vele. Maskepp sosem fogsz kelloen haladni . Irasom kizarolag joindulatu. ”
Nem értek veled teljesen egyet, mert sokat tanultam abból, hogy működő programokat alakítottam át és megértettem, hogy pontosan mi miért van és utána tudtam önállóan írni hasonlót vagy jobbat.
A -1-et én se teljesen értem, aki írta a programot, azt mondta, hogy így könnyebb ciklust írni rá. Próbáltam a -1 nélkül is. |
Bejelentkezés
Hirdetés |