forum.mcontrollers.com - hlavní stránka forum.mcontrollers.com - fórum

 

.: fórum - hlavní stránka :.
Technology Stronghold by Rudolf Vesely
How to build Microsoft System Center hosted cloud series
FAQFAQ HledatHledat Seznam uživatelůSeznam uživatelů Uživatelské skupinyUživatelské skupiny RegistraceRegistrace
ProfilProfil StatistikaStatistika Soukromé zprávySoukromé zprávy PřihlášeníPřihlášení

 
[C] Generátor pilového průběhu - D/A převodník na AT89S52

 
Přidat nové téma   Zaslat odpověď    Obsah fóra mcontrollers.com -> 8051 / 8052
 
neo2
Účastník
Účastník


Založen: 13.10.2010
Příspěvky: 16

PříspěvekZaslal: 25 říjen 2010, 18:09    Předmět: [C] Generátor pilového průběhu - D/A převodník na AT89S52 Citovat

Ahoj,
chci se zeptat jak lze v C zapsat (vytvořit) generátor pilovitého průběhu (pomocí cyklů) s využitím přípravku D/A převodníku? Jenočip: AT89S52.

Díky

Arrow administrator: přejmenováno z "[C] Generátor pilového průběhu"
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
piityy
Profesionál
Profesionál


Založen: 1.4.2008
Příspěvky: 2139

PříspěvekZaslal: 25 říjen 2010, 18:22    Předmět: Citovat

Když nevíme, jak onen přípravek vypadá a jak je připojen, tak blbě.
Pokud to bude paralelní převodník na některém portu, tak stačí v cyklu do proměnné přičítat číslo a neustále ho posílat na port. Aby ses na to mohl koukat (aby to jelo dostatečně pomalu), je třeba po každém zápisu na port počkat.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
Technik
Anonymní





PříspěvekZaslal: 25 říjen 2010, 18:54    Předmět: Re: [C] Generátor pilového průběhu Citovat

Taky to lze vytvořit z obdélníku pomocí integrátoru (jeden OZ s kondem ve zpětné vazbě). Obdélník ti vygeneruje MCU. Záleží na co to má být, protože způsobu je několik a každý z nich má své plusy a minusy.
Návrat nahoru
 

 
neo2
Účastník
Účastník


Založen: 13.10.2010
Příspěvky: 16

PříspěvekZaslal: 25 říjen 2010, 19:07    Předmět: Citovat

no měl by to generovat přímo mikročip. Schéma zapojení převodníku přikládám. Když budu vysílat číslo nebude to obdélníkový průběh?


DAC.png
 Komentář:
 Velikost:  27.5 kB
 Zobrazeno:  12285 krát

DAC.png


Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
piityy
Profesionál
Profesionál


Založen: 1.4.2008
Příspěvky: 2139

PříspěvekZaslal: 25 říjen 2010, 19:33    Předmět: Citovat

Bude to schodovitý průběh, ostatně jako na výstupu každého DA převodníku. Ikdyž v tomhle zapojení by C4 a C5 mohly ty skoky omezit. Záleží na velikostech. S tím nic neuděláš.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
neo2
Účastník
Účastník


Založen: 13.10.2010
Příspěvky: 16

PříspěvekZaslal: 25 říjen 2010, 19:35    Předmět: Citovat

potřebuju právě v C naprogramovat pilu
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
Atlan
Profesionál
Profesionál


Založen: 4.2.2009
Příspěvky: 889

PříspěvekZaslal: 25 říjen 2010, 20:40    Předmět: Citovat

ten procak nema PWM ? ozaj o akej frekvencii tej pily s abavime ?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
neo2
Účastník
Účastník


Založen: 13.10.2010
Příspěvky: 16

PříspěvekZaslal: 25 říjen 2010, 20:54    Předmět: Citovat

frekvence libovolna, nastavitelna...mělo by to byt pouze napsáno v programu pomoci cyklu nic vic
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
Technik
Anonymní





PříspěvekZaslal: 25 říjen 2010, 21:41    Předmět: Citovat

Znamená to od 0 Hz až po 5 THz? Při nízkých kmitočtech budeš mít schodišťový průběh, zatímco při vysokých se ti uplatní časová konstanta C4*R6 takže průběh už nebude pila, ale cosi mezi pilou a sinem. Mimochodem dioda D2 je nakreslana obráceně.

Pokud nechceš prozradit k čemu to má být, měl bys přesněji specifikovat požadavky na výsledný průběh, jako např. procentuálná odchylku od ideální pily, chvění hran (jitter) z toho vyplývjící fázový šum, stabilitu frekvence a amplitudy a hlavě frekvenční rozsah.
U MCU zejména u řady x51 je obtížné ba nemožné zajistit přesné časování výstupních operací (zápis do portu se může náhodně zpozďovat o několik us v důsledku přerušení) a proto se používá latch (např. 574) pro přesné předávání dat do DA, aby se eliminoval fázový šum. Pro řízení latche je nutné mít hw děličku, která současně řídí tok dat do DAC. x51 tím nedisponuje na rozdíl od AVR.
Pokud jitter řádově několika us nevadí, nemá smysl komlikovat HW. Nicméně to znamená dělat časovaou analýzu všech přerušení právě pro odhad jitteru nebo napsat program bez přerušení jen pro generování pily, ale pak mi není jasné , jak se ten program bude řídit.
Návrat nahoru
 

 
neo2
Účastník
Účastník


Založen: 13.10.2010
Příspěvky: 16

PříspěvekZaslal: 25 říjen 2010, 21:53    Předmět: Citovat

potřebuji čiste jen program, neco uplně základního nic složitéh - nejsem žádný odborník. Požadavky na průběh nebyly definovány. Vlastně vše co vím jsem už napsal. Vic zadané nebylo.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
piityy
Profesionál
Profesionál


Založen: 1.4.2008
Příspěvky: 2139

PříspěvekZaslal: 26 říjen 2010, 0:23    Předmět: Citovat

V čem je problém? Jak to jednoduše udělat máš už ve druhém postu.

neo2 napsal:
Když budu vysílat číslo nebude to obdélníkový průběh?
Samozřejmě, že na výstupu mcu bude obdélník (na různých bitech odlišný), co také jiného. Ovšem na výstupu DA už bude schodovitý průběch s pilovitou obálkou, nebo něco, co se tomu bude více či méně blížit. Programově se s tím nedá nic jiného dělat. Moc nad tím přemejšlíš a hledáš problémy kde nejsou.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
neo2
Účastník
Účastník


Založen: 13.10.2010
Příspěvky: 16

PříspěvekZaslal: 05 listopad 2010, 21:30    Předmět: Citovat

Tak pro uplnost toto sem chtel: Smile

kód:

#include <at89x52.h>
#define T0_M 0
#define T0_CNT 2
#define T0_G 3
#define HM 255 
#define DM 128        //definice spodni meze

unsigned int i;    // nezaporne cele cislo, ktere bude jakoby tancit po tom prubehu
void cas () interrupt 1  //  definice aby to byl interupt    prazdna zavorka nazev   interupt vyvolava prerus  jen kdyz dojde k preruseni je vyvolana
{
TR0=0;        //vypnu timer
TL0=255;   //definice sirky schodku
TH0=250;     //definice sirky schodku
TR0=1;         //zapnu timer

if (i==HM)   // kdyz zjisti ze icko je nahore HM tak zapise nulu
{ i=DM;
}
else
{ P0=i;
++i;
}
}

void main ()
{
  TMOD=0<<T0_G|0<<T0_CNT|1<<T0_M;    //| - zaroven
  TR0=1;
  TL0=255;        //zapisu prvni hodnoty
  TH0=250;
  ET0=1;              //povoleni od timeru nula preruseni
  EA=1;
  i=DM;    // kde ma zacit citat ... takze od nuly
  while (1);
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

Zobrazit příspěvky z předchozích:   
Zobrazit předchozí téma :: Zobrazit následující téma  
Přidat nové téma   Zaslat odpověď    Obsah fóra mcontrollers.com -> 8051 / 8052 Časy uváděny v GMT + 2 hodiny
 
Strana 1 z 1
Přejdi na:  
Můžete přidat nové téma do tohoto fóra.
Můžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Můžete k příspěvkům připojovat soubory
Můžete stahovat a prohlížet přiložené soubory
 



Num Lock Holder - app to hold Numlock
Copyright © 2017 Rudolf Veselý, mcontrollers.com.
Je zakázáno používat části tohoto webu bez souhlasu autora. || Powered by phpBB © 2001, 2002 phpBB Group - with RedSquare DoubleJ(Jan Jaap)