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
Szia! Már megépítettem a legegyszerűbb programozót AT89C2051-hez, ami csak írni tud. Futófényt próbáltam csinálni vele, de valami nem stimmelt, minden kimenet H maradt, mintha folyamatosan resetelve lenne. Pedig a reset áramör és az oszcillátor is rendesen működik (megnéztem szkóppal). A programozás sebességét (a delay-t) is próbáltam változtatni, de eredményt nem értem el vele. A programozónak vagy csak a törlés funkciója működik rendesen, vagy rosszak az IC-k amiket kaptam...:nemtudom: Most tervezem az AtTiny2313 programozómat...
Ezt építsd meg ami a lap alján van. A tápot a céláramkörből veszi a programozó, úgy hogy a pozitív feszt, a csatlakozó 2 lábához, a földet pedig a 10-hez kell kötni.
Én 74LS245 IC-vel csinálom, mert olyanom van, 244-est meg nem kaptam Kaposváron. IDC10-es csatlakozó helyett meg PIN20-as foglalatot teszek rá, amiben az AtTiny2313-at tudom programozni. Ha meg esetleg mégis In System szeretnék Programozni, akkor még mindig készíthetek hozzá IDC10-es csatlakozót. Tápfeszt adok neki.
Hello!
Egy lehetséges megoldás (EAGLE):
Ezen a fórumon hasznos irományokat találsz, ha mégse működne a programozód, vagy ha félted a számítógéped párhuzamos portját ...[link=http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=33265]itt..
[/link] Szerintem érdemes átolvasni. Jó szórakozást !
Rájötem mi volt a probléma. Kellett egy 100 nF-os hidegítő kondenzátor az égetőbe. Így már sikerült beprogramoznom a 89C2051-eseket. (Megcsináltam életem első mikrokontrolleres projektjét. ) És az AtTiny2313 programozóm is elkészült már.
Gratulalok!
Mi az a hidegito kondenzator?
Kösz.
Hidegítő kondenzátort at IC-k Vcc és GND lábai közé szoktak tenni, hogy kiszűrje a zavaró tüskéket. (A PC kapcsoló üzemű tápja által előállított 5 V elég zajos...)
Es ezert nem mukodott? Ujat tanultam
Lenne egy kerdesem hozzatok! Lebegopontos szamot hogy lehet kezelni avr-gcc -ben? Igy probalkoztam de nem mukodik:
es itt kiirtam kijelzore; egy kerdojel jelenik meg. int es uint -tipusnal rendesen atalakit az sprintf es str -kent kiirva jol megjelenik a kijelzon is .. Van valami otletetek?
Sziasztok!
mega8 -nal szeretnem a PORTD -t hasznalni bemenetkent,rakottem 3 + 2 nyomogombot; a PD 0,1,4 labakon nyomogombok kulso felhuzo ellenallassal,a PD 5,6 labakat INT -kent szeretnem hasznalni - lefuto elre - ,ezeken is nyomogomb van felhuzo ellenallassal.Gombnyomasra lenne az int es a tobbi gomb allapotanak beolvasasa. Namost a beallitas igy nez ki: DDRD = 0x00; vagyis bemenet. Megis mikor ramerek a PDx labra akkor 0 szinten van,pedig ott e felhuzo ell. Olvastam az adatlapban errol de nem vilagos.. Kerlek segitsetek nekem ebben
Negatv tapasztalat:
main(){ for(;{ if(....){}else{} } } Ebben a formaban nem jol ertekelodik ki hosszabb kifejezes az if -ben.Ha rakok a ciklusba egy 10ms delayt,akkor kiertekelodik,csak forditva mukodik.Tehat igaz feltetel eseten az else agat hajtja vegre es forditva Tapasztalt hasonlot mar valaki?Ket napja ezzel szivok,megoldast nem talaltam,csak antiprogramozost: felcsereltem az if/else tartalmat pff . avr: mega8 F_CPU 14.31818 kornyezet : avr-gcc
Én ATmega32 tipuson próbáltam hasonlót csinálni.
Nem elég az irányt beállítani, azután a felhúzó ellenállást is be kell kapcsolni egy PORTD=x értékadással. Ha jól emlékszem az 1-es bitérték kapcsolja be a felhúzó ellenállást... remélem ez segít.
Koszi vegulis mukodik...
De nagyon erdekes dolgok vannak,amiket nem ertek.PL az elobb emlitett is,es a timer2 -vel kapcsolatosan is:
Eddig ok is,csakhogy kikapcsolni kikapcsolja,de be nem .A kikapcsolas,bekapcsolas feltetel 128 eloosztoval beallitott timer1 OVERFLOW rutinban van,hogy ne legyen a main loop-ban,mert ott nem akart mukodni. Kell figyelni valamelyik regisztert?,szinkronizalas problema vagy mi lehet? Valakinek ha van otlete please segitsen..Ugylatszik keveset tudok en meg ezekrol
Hát ez elég vad
Mármint ahogy TIMSK-ban nullázni akarsz egy bitet. Gyakorlatilag itt minden bitet 0-ba állítottál. A helyes megoldás: TIMSK &= ~(1< Szerintem ez okozza (részben) a problémáidat. A többi dolgot nem értem, talán az egész progit másold be ide. Persze, ha nem félted a fáradságos szellemi munkával létrehozott szellemi termékedet az ilyesmire kiéhezett közönségtől .>>
javítok, mert nem jelent meg (miért ?):
TIMSK &= ~(1 << TOIE2);>>
Azért nem jelent meg, mert a html nyelvben a kisebb-nagyobb, más néven "kacsacsőr" jel a kódokat jelöli. Ha egy ilyet lát a html, akkor azt hiszi, hogy kód következik, ami a "földi halandó" számára nem látható, ezért nem jelent meg a vége a hsz.-odnak.
Köszi, mindig tanul az ember valamit ..
Másodszor viszont megjelent. Ha a kacsacsőr után szóközt hagyok, akkor nem lesz 'misztikus' a jel ? Kicsiti furcsa ez a megoldás... Elvileg azt kéne látnom amit beírok, nem foglalkozva azzal, hogy mivé konvertálja, vagy milyen speciális szekvenciákat ad a begépelt szöveghez a rendszer. Vagy csak szimplán hülye vagyok ?:eek2:
Koszi szepen!
Hamarosan kiprobalom. Maszkot hasznalva mukodott volna..Itt tevedtem... Na de szamomra meg mindig nem vilagos hogy ,hogy van ez a (1< Valami anyagot kell keressek...>>>>>>
Oh na..szerencsere van egy olyan megoldas ez esetben hogy megnyitod a html oldalt forraskent es ott megtalalod amit irtal,igy nem kell ujrafogalmazni..Na akkor megegyszer:
Na de szamomra meg mindig nem vilagos hogy ,hogy van ez a (1 << n), (0 << n).(n helyerteku bitet 1be allit,vagy 0ba, nem?) Ha igen ,akkor TIMSK = TIMSK & (0 << TOIE2); miert nem jo? Ha kesz lesz a projekt akkor ugyis megosztom. avr/PWM-el szeretnek hangot generalni,valami pittyogas szeru kelleneNincs veletlenul errol valami anyagod az adatlapon kivul? Mar azt hittem hogy kihalt ez a topic; jo hogy MEG van valaki aki C -ben progizza az avr-t es hajlando segiteni is!Koszi! >>
Elvileg a code beszurasban normalisan meg kellene jelenjen,de ott is santit a dolog.Erdemes lenne javitani mert neha azert ertelmes kod is kerul fel a forumra,annak meg masok is hasznat vehetnek.
Azért nem jó a
TIMSK &= (0 << TOIE2); mert ha 0-t akármennyivel shiftelsz az 0 lesz (az egész byte, holott te valójában nem ezt akartad, hanem csak egy db bitet akartál 0-ba állítani, a többit változatlanul akartad hagyni !), és ha a 0 értékű byte-ot összeéseled valamivel, akkor az a valami tutira 0 lesz. A TIMSK |= (1 << TOIE2); ezzel szemben teljesen jó megoldás, hiszen itt az 1 értékű byte-ot shifteled a TOIE2 értéke szerinti helyiértékre, majd VAGYolod, s így azt a bitet 1-be állítod. Kicsit mélyedj el ezekben a dolgokban, mert semmire nem fogsz haladni, ha ilyen apróságokon fennakadsz. Nem tudom, milyen környezetben dolgozol, én a avrstudio4 - et használom winavr fordítóval, a winavr könyvtárban van néhány példa, PWM-re is... Ha csak csipogni akarsz, akkor fix PWM periódus kell, a kitöltési tényezővel hangszínt tudsz állítani. Ha komolyabb hangokat akarsz generálni, akkor a PWM kitöltési tényezőjét kell modulálnod (ebben az esetben szükséged lesz a kimeneten egy aluláteresztő szűrőre). Jó munkát !>>>>
Koszonom!
Maskokkal megy a dolog.A shiftelesben nem voltam biztos,hogy hogy mukodik. avr-gcc-t hasznalok Linux alatt. Udv.
Vegulis mindket formaban mukodik most!
Az volt a baj,hogy folyamatosan hivom a fuggvenyt, az overflow1 -ben,es be volt rakva az enable fv.-be egy TCNT2=0x0;Igy folyamatosan 0 -ban tartotta a TCNT2-t De ujat tanultam ezzel: TIMSK &= ~(1 << TOIE2);De meg nem igazan ertem..ahogy en neztem igy is a byteban egy helyen lesz csak 1-es,a tobbi(mogotte,az also bitek) 0,de ez is invertalva van,ugy hogy.. Sajna a c konyvek is keveset irnak errol.. Ma neztem a gcc preprocessor kimenetet,sok mindent lehet belole latniPl.hogy milyen cimekre kerulnek milyen ertekek. A PWM -el kapcsolatosan: en korabban mar atalakitottam egy regebbi peldakodot(LED vezerlo) mega8 -ra.Ott a
Itt az OCR1A a periodus?Es hol lehet a kitoltesi tenyezot allitani? Legyszi ha idod van nehany alapveto infot irjal rola,amig beletanulok. Koszonom.
Halló
Az adatlap olvasását akarod megúszni ? Ezt másképp nem lehet ! A periódust úgy tudod beállítani, hogy a számláló konfigurációs regiszterében beállítasz vmilyen PWM üzemmódot (pl. 10 bitest) és elindítod a számlálót. Ilyenkor a számláló mindig újraindul. OCR = Output Compare Register -- ezzel fogod a kitöltési tényezőt változtatni. A számláló értéke ezzel a regiszterrel kerül összehasonlításra. Ha egyezés van, akkor történik valami, az hogy mégis mi, azt egy speciális regiszterben tudod beállítani. Ahhoz, hogy korrekt programokat írjál tényleg ALAPOSAN át kell nézned az adatlapot, hiába írsz C-ben, ezt itt nem úszhatod meg ! Talán még jobb is lenne, ha assembly-ben irogatnád az első programjaidat
Koszi.
Sajna pwm-rol keveset tudok..de igy mar tobbet .. Adatlapot mindenkeppen olvasom,anelkul...
Hi!
Én most kezdtem el programozni az AVR-m De van egy próblémám, nekeme attiny2313 avrm van de ezt nem lehet beállítnani, nem lehet felprogramozni, nem lehet kiválasztani. Csak 90s2313-ast Ez lehet a baj hogy nem tudom felprogramozni a chipet, vagy más? Ha ez a baj akkor hogyan lehet beállítani az attiny2313? Ant
Ja, meg légyszi azt is mondjátok meg hogy milyen kapcsolás kell a http://avr.tavir oldalon található led villogtatóhoz.
Ant
Szia!
Ezt olvasd el figyelmesen --ITT-- En nem tanulmanyoztam kulonosebben,de ugy futolag olvastam hogy fuse beallitasokban van kulonbseg,az viszont nagyon fontos!nem elhanyagolhato. |
Bejelentkezés
Hirdetés |