Keresés

Új hozzászólás Aktív témák

  • DarkByte

    addikt

    válasz DarkByte #91 üzenetére

    Tegyük fel hogy pl. leosztod az órajelet 1024-el. Ekkor ugye 15625kHz-es négyszögjelet kapsz ha az rá van kapcsolva valamelyik kimeneti tűre. 16 bites időzítő esetén ekkor még beállítod a felső limitet 800-ra vagy 4000-re és úgy kell konfigurálni az időzítőt hogy a limit elérésekor nullázódjon.

    Viszont közben gondolkodtam és ez így nem jó. Mint írtam régen csináltam már. Szóval az órajel hatására növekszik a timer értéke. Minél jobban leosztod az órajelet annál lassabban számol előre a timer. Ergó ha 1024-el osztod le a főórajelet akkor a fő órajel minden 15626Khz-es ciklusára növekszik a timer. Ergó vissza kell számolnod hogy mi legyen a top limitje a timer-nek ha 8Khz-es jelet akarsz. Nem akarok okoskodni mert tényleg régen csináltam, olvasd el a doksit amit linkeltem, abban vannak példák konkrét számításokkal.

    #93: oké :) Bocs még egyszer a kavarásért. Ha van oszcilloszkópod akkor már előnyben vagy. Én anélkül próbálkoztam és úgy eléggé sötétben tapogatózás. Hangkártyával próbáltam digizni a jelet egy fotószenzoron keresztül. Sajna elég gyenge megoldásnak bizonyult de a semminél több. (szegény ember vízzel gőz :DDD)

  • DarkByte

    addikt

    válasz DarkByte #91 üzenetére

    Még valami. Érdekesebb a helyzet ha pl. csak bizonyos számú ciklusig akarsz egy négyszögjelet generálni. Pl. van egy protokoll amihez a jelet generálod. Ilyenkor fontos hogy pontosan a négyszögjel emelkedő vagy leeső élénél kezdjen el máshogyan viselkedni az időzítő. Ekkor már képbe jönnek a megszakítások. Illetve ha túl gyors a protokoll (az interrupt kezelőd hosszabb ideig fut mint két átmenetet közti idő) lehet érdemes az egész időzítő alapú működést elvetni és tisztán a kódból kapcsolgatni a jelet. Ilyenkor viszont el lehet kezdeni számolgatni hogy az AVR-en egy utasítás mennyi időt emészt fel hogy szinkronban maradj a protokollal. Ilyenkor szoktak egyébként átváltani AVR assembly-re, mert ott minden utasításra megvan a pontos órajelciklus ami kell a végrehajtásához. De ez már tényleg csak a legvége a dolognak, a Te négyszögjeled sokszor lassabb mint az Arduino tehát a megszakításokkal való operálásnak működnie kell ha szükség van az élenkénti időzítő módosításokra.

    Én pl. a C64 soros portjához csináltam még múlt év elején egy illesztést és ahhoz van egy egész pontos dokumentáció hogy a protokol időzítései hogyan alakulnak. Mivel ott még azt is meg akartam oldani hogy a géptől közben stream-elem az adatokat, fontos volt hogy amíg a négyszögjel generálódik mást is tudjak csinálni viszont amikor eljött az idő atom pontosan tudjak reagálni. Erre nagyon jó a timer mert amíg nem éri el a limitet futhat a főszálon lévő program (ami fogadja az adatokat és elmenti egy közös RAM területre), de amikor a jellel kell foglalkozni a megszakítás félrerakja a programomat és meghívja a jel módosításáért felelős kezelőt ami gyorsan megcsinálja amit kell, kilép és folytatódik a főszálon a program ahol abbamaradt.

Új hozzászólás Aktív témák