Fórum témák
» Több friss téma |
Helló ! Egy kis segítséget kérnék. Atmega32-vel építenék egy méréshez egy alapsávi videojel generátort. 15 MHz-es külső kvarcról megy. Azért így és ilyen módon csinálom, mert ez van kéznél. Mondjuk, a hogy a hardver rendben van. Egy egyszerű D/A átalakítót alkalmazok, három ellenállás, a neten találtam.
A gondom a következő: már nem látok tisztán. Véstem Pascalban egy programot az Atmega32-höz, a jelek megjelennek a képen, de sehogy nem tudom szinkronizálni a képet. Ebben kérnék segítséget. Mit toltam el a programomban ? Nem vagyok a programozás Paganínije, de azért megértem a válaszokat. A képen egy széles fehér oszlopnak kellene megjelennie, de ezidáig csak az oszlop csíkjai jelennek meg összevissza és fut a kép is. Végigolvastam idevonatkozólag egy sereg irodalmat. Ha átnézem a progit, szerintem minden a felhasznált irodalmak szerint megy (pl. időzítések). Más dolog, hogy nem látom a hibá(ka)t, amit elkövettem a szinkronizálásnál. Attól tartok, hogy sem a sor, sem a képszinkronjeleim nem mennek jól, de nem tudom, hogy miért. Nem látom. Köszi szépen minden segítséget.
Halihó!
Atmegához sajnos nem értek, de esetleg hátha jól jön pár észrevétel. A teljessor miért kezdődik feketével, nem egyből csőzár kellene oda? Az első félkép után miért kell fésor? A 4. ábra szerint nincs ott, csak az előkiegyenlítő, előtte meg egy egész sor, amiben csak a második felében van képtartalom, az első fele fekete, de ettől függetlenül a teljes sort végig kell várni. A kód ezzel szemben rádob egy félsor várakozást a végén egy szinkronjellel. Ugyanakkor a második félkép végén tényleg csak egy fél sornak kéne kimennie, a végén egy szinkronnal. Szerintem felcserélted a két félképet, mert az utókiegyenlítő hossza meg jónak tűnik nekem. Egyébként meg pár ötlet még: Nézd meg, hogy a késleltető delay_us mennyire pontos, illetve, hogy mennyire van pontosan hozzáigazítva az aktuális órajelfrekvenciához (PIC-nél az órajelfrekitől függ az időzítő kód, gondolom Atmegánál sincs másképp). Mivel minden ezekre épül, ezért fontos, hogy ezek jól legyenek belőve. A mikrovezérlőről azt írja az adatlapja, hogy kb. 1 utasítás/órajel a sebessége. Ez azt jelenti, hogy 15MHz-es óra esetén egy utasítást kb. 0.066 us alatt hajt végre. A kódban az egyes jelek előállítása külön eljárásban történik, aminek a meghívása összességében (call/return utasítások meg esetleg a paraméterek átadása) több (akár tíz-húsz) utasítás is lehet, ami hozzáadódik a végrehajtás idejéhez, és ez így ronthatja az időzítések pontosságát, főleg, hogy ennyi hívás van egymásba ágyazva. Nem ártana ellenőrizni a kimenőjel szintjeit és időzítéseit egy szkóppal (tv szkóp lenne erre az igazi). Amúgy ezzel a forrással egyeztettem: Bővebben: Link
Köszi a választ. Azt a mérés1.doc-ot néztem én is. Azért kezdek mindig feketével, mert a szinkronjelek előtt mindig van egy 1,5us fekete szint, a képcsövet csak aztán tudom "lezárni" a szinkronjellel. De ha elhagyhatom a beugró 1,5us-of fekete szintet, akkor elhagyom.
Megnézem a kódot. Addig küldök átnézésre egy másikat. Ugyanazt átírta olyan formára, ahogy az impulzusok és a félképek következnek. Megpróbálom ellenőrizni a delay_us hosszát. Amúgy a jelenség az, hogy az oszlopom elemei (sorok) közvetlenül egymás alatt, félsornyi eltéréssel lépcsőzetesen vannak. Egy hosszú, jobbra lefele nyúló lapos lépcső, aminek a fokai a felette levő felénél kezdődnek. Tuti valami időzítési gond, de nem jövök rá, hogy hol.
Akkor szinte biztosan az időzítéssel van a gond. Mivel jobbra lefelé nyúlik, ezért a soridőd jóval nagyobb, mint a szabványos. Feltétlenül meg kéne nézni, hogy mit csinál az a delay_us. Meg azt sem ártana megnézni, hogy milyen assembly kódot generál a fordító.
Megváltoztattam az időzítéseket és megjelent az oszlopom, ahogy kell. Köszi az ötletet, szkóppal megmértem a jeleket, igazad volt, kábé 15%-kal nagyobbak voltak az időzítések.
Annyi gondom van még, hogy az oszlop tetején vagy 5 mm szellemképszerűen balra hajlik (alatta ott a rendes kép), a kép alján egy jó 1/5-1/6-od magasságban pedig egy árnyalattal halványabb az oszlopom. A kép vibrál kicsit. Mi lehet még ?
Módosított kódban az első félkép végén nem 5, hanem csak 4 utószinkron ciklus kell. (133-142. sor) és nem kell utána fésor szünet.
177-183. sor: a 2. félkép utáni félsor kódjában nem jó az időzítés: először kell egy 5 us-os csőzár, majd utána a hosszú fekete. És még egy apróság a 105-108. és 171-174. soroknál:
Ez összevonható egy 23 us-os feketévé.
Köszi. Vettem a gépbe egy 16 MHz-es kristályt, azzal fogom megpróbálni. Sajnos, az Atmega32 amilyen jó kis gép, annyira nem megy 16 MHz-nél gyorsabban.
A két fekete sor az egy kísérlet eredménye volt, amiből az egyiket átírtam szürkének. Így most egy fehér és egy szürke oszlop van a képen. Elég lesz szerinted a 4 utószinkron is ? Kipróbálom. Kiveszem a félsor szünetet is (ha azóta nem vettem ki).
A szabvány szerint az első félkép kezdeténél 5, a másodiknál 4 félsorból áll az utókiegyenlítés.
|
Bejelentkezés
Hirdetés |