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
Hello! Nem mintha sokat várnék tőle, mert tényleg csak 10 perc alatt dobtam össze és most lusta vagyok gondolkozni, de miért nem pontos? Csak nem a cikluson belül elhelyezett elágazásokért?
A delay miatt.
Nézz meg egy másik óra programot. Legegyszerűbben az ember mástól tanulhat. Én az adattípusokon kívül egy szót el nem olvastam könyvből a C-ről (elég jó PHP ismereteim vannak, ez sokat segített, gyakorlatilag a két nyelv szinte ugyan az) és onnan tanultam meg, hogy más programját nézegettem, felkommentezést lefordítottam magyarra, stb. Az órát megszakításokban szokás létrehozni. Létrehozol egy 1Hz-es megszakítást, növelsz egy masodperc nevű változót, ha elérte a 60-at lenullázod és növeled egyel a percet, ha a perc elérte a hatvanat (perc<60), akkor lenullázod, hozzáadsz egyet az órához. Egy fontos dolog, amit minden harmadik oldalon megkérdeznek: volatile-ként kell deklarálni a másodperc, perc, óra változót. Azt biztosan tudom, hogy belső oszcillátorról soha sem lesz pontos, például a hőfokfüggősége miatt. Külső kvarcot biztos kell használni. Vagy ha még pontosabbat szeretnél, akkor külső órajelforrást.>
Értem. Amúgy én sem c-t tanultam, hanem a pascalt nyúzom már három éve (iskola) és ez a kettő is eléggé hasonlít, szóval én sem fordítottam sok időt a c-re.
Nekem is Pascal-t tanítottak, de nem sok sikerrel, a többi gyerek miatt nem lehetett haladni, emlékszek a sorbarendezést is egy fél éven keresztül kellett velük veni...
12.-ben már tanítottak C-t is, de csak a legalapabb dolgokat, persze órán nem nagyon csináltam semmit, ismert a tanár, tudta, hogy nekem megy, a többiekkel kell foglalkozni, így kaptam sok ötöst. Kár, hogy nem volt érettségi tantárgy.
ez fura...én most leszek 10-es, de már hetedikben az info tanárunk heti 1 órában nyomta a pascalt, nyolcadikban már a grafikus dolgokkal foglalkoztunk és most kilencedikben, igaz matek-info szakon, de már nem igazán mondtak újat...most kilencedikben pedig, gondoltam, hogy tanulok valamit, ezért megnézegettem a pythont, főleg mert ebben tudtam az iPod Touchomra programot írni (másodfokú egyenlet megoldóképlet volt az első utána prímszámok). A C-t meg az avr miatt nyúzom.Ezeken kívül még befigyelt a html és egy nagyon kicsi c++.Szóval azért van egy kis programnyelv ismeretem, de főleg a pascal megy a legjobban.
Nekem is jól megy a Pascal, vagy már csak ment, azt nem tudom, de a nagy részét biztosan elfelejtettem, mert utoljára másfél éve foglalkoztam vele.
Egyébként az egésznek semmi értelme és jövője sincs, nem Pascal-t kellene tanítani, hanem olyat, amit tudnak is valamire használni. Az alapokat C-ben is meg lehet tanulni, szerintem még könnyebb is, mint a Pascal. Idézet: Azért nem pontos, mert a az 1 másodperces késletetésekhez hozzáadódik az elágazások futási ideje, ami ráadásul a változó feltételek miatt kiszámíthatatlan ideig tart - tehát korrekcióba sem vehető. „de miért nem pontos?” Ha hardveres időzítő jelzi a másodpercek elteltét (nem muszáj megszakítást használni, mehet a figyelése lekérdezéssel is!) akkor azért lesz pontosabb az időmérés, mert a feltételek vizsgálata nem késlelteti a hardveres időzítőt. Párhuzamosan megy a program végrehajtása és az órajel periódusok számlálása.
Azt se felejtsuk azert el, hogy a Pascal-t anno epp arra talaltak ki, hogy a strukturalt program fejlesztest tanitsak... Barmilyen program nyelvet is tanul az ember a lenyeg mindig ugyanaz: A problemat kell tudni algoritmizalni. A tobbi reszlet kerdes, szintaktika tobbnyire.
Par dolog a Pascallal kapcsolatosan: Az egyik, hogy az alap nyelv nem alkalmas komoly program fejlesztesre -- hiszen csak arra talalta ki Niklaus Wirth professzor, hogy tanitsa. A masik, hogy viszont voltak nagyon sok sikeres implementacioi, talan a legismertebb a Turbo Pascal (vagy kesobbi neven Borland Pascal). Ennek a mai napig vannak utodai, mint pl. Delphi vagy Free Pascal. De azt se felejtsuk el, hogy a korai Macintosh alkalmazasok Pascalban irodtak! Aztan ott van meg az a teny is, hogy a Pascal-ban a stringek kezelese sokkal biztonsagosabb volt mindig is, mint a C-ben. Kevesebb buffer overrun es heap overflow hibak leptek fel. A mai szamitogep biztonsagi hibak, serulekenysegek es exploitok jo resze a C nyelvre vezetheto vissza -- a maradek pedig a script-ek es lekerdezo nyelvek hasznalatara, pl JavaScript es SQL. A C nyelv ket nagy elonye. hogy egyreszt jol (vagy legalabbis jobban) tamogatja az alacsony szintu bit manipulacios muveleteket, mint a Pascal, a masik pedig valoszinuleg mert rengetegen ismerik, megszamolhatatlan konyvtar es segedlet all rendelkezesre. Azzal azonban egyet ertek teljes mertekben, hogy nem szabad az arral szemben uszni, mivel a tomeg a C-t valasztotta nekunk is azt kell!
Hali!
Azt szeretném kérdezni, hogy egy saját header fájlt hogyan lehet beültetni a programba? Próbáltam az #include Kösz a segítséget.
Linkelesnel vagy forditasnal van a hiba?
Úgy látom, az alsóbb oktatási szinteken nagyon rá vannak állva erre a Pascal-os témára, nagy rákfenéje az oktatásnak ez a logikátlankodás manapság.
Pedig mennyivel jobb lett volna, ha helyette a C-t kezdik el lassan adagolgatni, kissé nagyobb jövője van... Valahogyan meg kellett volna szerettetniük a C-t az iskolásokkal, de az az igazság, hogy én a magam részéről nem ismerek, illetve még csak nem is hallottam olyan informatika tanárról, aki ilyen értelemben érdekességeket mutatott volna, vagy megcsillantott volna lehetőségeket, még ha nem is az egész osztály részére... nálunk is a szokásos volt a program: netezés ezerrel, aztán összedobtunk mindenféle érthető magyarázat nélkül valami memory dump programot x86 assembly-ben, közünk nem volt hozzá, semmit nem magyaráztak el logikus, érthető módon. Írjuk be a kódot, ami a táblán van, nulla magyarázat, nulla lelkesedés, lefordítás, hurrá, működik és kijött valami mátrix-szerű érthetetlen krix-krax képernyő, amire aztán senki sem izgult rá, érthető módon... nesze neked programozás.
AVR Studio-ban bal oldalt hozzá kell adni egy új .h kiterjesztésű fájlt.
Beszélgettem a tanárommal, a sok tanár körül ő volt az egyik legrendesebb, aki a programozást tanította, mondta, hogy ő sem érti, hogy miért Pascal-t kell tanítania, hiszen azt már sehol sem használják.
A C-vel sokkal többre menne az emberfia. Nálunk nem is a programnyelvvel volt a gond, hanem az, hogy abból a csoportból, amiben voltam rajtam kívül csak egy embert érdekelt, a többieket egy csöppet sem és úgy a tanárnak se kellemes tanítani. Ez már aztán végképp off: Mi informatika órán internetezünk, 2 évig nagyon rendes tanárunk volt, elmagyarázott mindent, mindent megtanított, ami érettségire kell, akkor nem interneteztünk, 9-edikben azzal kezdtük, hogy fél év alatt megtanította az összes tételt, aztán 2 évig elég szétszórt tanár volt. 9-10-edikben persze senki se figyelt, csak páran, és akik figyeltek, annak 11-12-ben nem nagyon volt szüksége gyakorlásra, mert megmaradt benne a tananyag, World, Access, Excel, Power Point és HTML, így mi akkor interneteztünk, akik figyeltek, akik nem azok is interneteztek, mert nem érdekelte őket. Viszont a programozás elmélet óra lelki terrornak számított, kint nagy meleg, bent sötét, ment a projektor és mindenki veszettül írta a füzetébe a programozási tételeket megállás nélkül.
Sziasztok!
Egy kis segítséget kérnék. A következő kapcsolást épitettem meg, de nem müködik, kb 3,5V van a jelfogón, 12 helyett. Mi lehet a hiba? Köszi.
Nem tudom elolvasni:mekkora a betáp feszültség? Reléről: meghúzófesz, tekercsellenállás? A tranzisztort és a relét meg kellene cserélni mert így a tranzisztor nem tud kinyitni.
A betáp 12V.
Megmértem a tekercs 270 ohmos.
Igen, a relét a kollektorkörbe kéne tenni!
Megprobálom, köszönöm, csak azt nem értem, hogy amikor még nem AVR volt benn hanem egy optocsatoló hajtóta meg amit a számítógép akkor müködött, igy is, hogy az emitteren volt a relé.
Azt gondold végig, hogy a relé feszültségétől ki tud-e adni az AVR ~0,6V-tal többet. Ha nem, a tranzisztor nem tud kinyitni.
Írd rá a feszültségeket, amiket számolsz a rajzra és rögtön látni fogod, hol a hiba.
Az a legszomorubb, hogy az informatika tanar nem erti miert Pascal-t oktat! Igy nem csoda, hogy neki sincs kedve tanitani, es nem tudja atadni a lelkesedeset a diakjainak (mivel o maga nem lelkesedik, igy nincs mit...)
A tanarnak illene tudnia, hogy a programozasban nem a programnyelv a fontos, az csupan egy eszkoz. Azt is illene tudnia, hogy a Pascal-t ugy alkottak meg, hogy az konyebben megertheto legyen. Pl kapcsos zarojelek helyett 'begin' es 'end' van... nem azert, mert nem birtak volna kapcsos zarojeleket tenni oda, hanem mert az emberi nyelvekhez ez igy kozelebb all. Sot, a mar elfelejtett 'pseudo nyelv' altalanos alakjahoz all kozelebb. Vagy ott van a ':=' operator. Mikor egy valtozonak erteket adunk konyebb ugy gondolni ra, hogy 'a legyen egyenlo 3-al' (a := 3. Nem is beszelve a C-s '==' operatorrol... rengeteg kezdo hiba van belole. A printf megertese is bonyolultabb, mint a writeln-e. A C-ben az auto castolasok es egyebek szinten bonyolultak. Es ha megyunk tovabb a header file-ok es mutatok es a strukturak hasznalata is meglehetosen bonyolult egy kezdo szamara. Az egeszet egy gepkocsi vezeteshez hasonlitanam. A Pascal egy normalis kis szemelyauto, a C pedig egy utanfutos kamion differencial zarakkal, sebesseg felezovel. Szerintem ameddig valaki nem tudja a szemelyautot vezetni, addig ne is probalkozzon a kamionnal, mert esetleg a sok valto kar es a hosszu autoval torteno kanyarodas erosen megzavarhatja, nem is beszelve az utanfutoval torteno tolatasrol...
Félreértettél egy kicsit. A tanár azt nem értette, hogy miért olyan programnyelvet kell tanítania, amit már sehol sem használnak.
Szerintem a C sokkal könnyebb, mint a Pascal, például Pascal-ban az értékadásnál tipikus hiba volt órán, hogy mindenki := helyett csak egyenlőt írt. A C-ben pedig az volt tipikus hiba, hogy == helyett csak egy egyenlőségjelet írtak. Szerintem még a kapcsos zárójelek miatt is könnyebb a C, és kevesebbet kell gépelni.
Azt hiszem berozsdásodtam, régen anyira ment az elektronika, most meg nagyon elakadtam. Átforditotam a colektor körbe raktam a relét. Közbe az AVR már nem adja ki a jelet, a panelon. Tápot kap zárlat nincs.
Probapanelba átteszem akkor igen. A panel amibe lenne ott meg nem. A különbség annyi, hogy a rendes panelba négy bemenetet is felhasználtam. Mindegyik bementeten van egy 4,7k ellenálás a negativon. A jelet pedig optocsatolról kapja, egy 1k-os ellenáláson keresztül. De ez a rész most ki van iktatva szofveresen, hiszen átirtam a programot amig tesztelem a tranzisztoros részt. retek: ldi r20,6 out 0x18,r20 rjmp retek Probanelon mindkét lábon van van jel. Visszatéve a rendes panelba -ugyanez a program- csak az egyiken van, ott is csak 3,6V körül. A másikon 0,1V-ot mértem. Nem értem. Van valakinek valami ötlete?
Létrehoztam és includoltam is de nem ismeri fel a .h fájlban levő függvényneveket a program. Ha simán beleteszem a programba akkor meg minden szépen működik.
Már írták egyszer...
Az AVRStudio bal oldali oszlopába ahol a Source Files, Header Files, External Dependencies és az Other Files, találhatóak, a Header Files-ba be kell rakni a filet. jobb klikk, Add Existing Header File(s)...
A program elejére szúrd be ezt:
Az elérési utat a projekt pammápájoz képest add meg, tehát az számít gyökérnek.
Megvan. Az volt a gond, hogy a kacsacsőrök közé tettem a header fájl nevét. A WILL-I robotos cikkben volt egy ilyen header fájl beillesztés és ott meg kacsacsőr volt azért tettem én is azt.
|
Bejelentkezés
Hirdetés |