Nastavení PWM - ATmega328 – Mikrokontroléry – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Nastavení PWM - ATmega328 – Mikrokontroléry – Fórum – Programujte.comNastavení PWM - ATmega328 – Mikrokontroléry – Fórum – Programujte.com

 

KlokanJa
~ Anonymní uživatel
6 příspěvků
17. 8. 2017   #1
-
0
-

Ahoj přátelé.

Mám menší problém, který se mi nedaří vyřešit. Nastavil jsem si PWM, kde potřebuju kontrolovat frekvenci a střídu. Ale nejde mi nstavit, aby byl výstup na obou pinech (OC0A a OC0B), tak třeba někdo bude vědět co dělám blbě. Díkes

void PWM0_INIT()
{
	/* Set OC0B pin to output */
	DDRD |= (1 << PD5) | (1 << PD6);
	
	TCCR0A |= (1<<WGM00)|(1<<WGM01)|(1<<COM0B1);  
	TCCR0B |= (1<<WGM02)|(1<<CS00)|(1<<CS01);  // delicka 32
	
	OCR0A  = 249;   // frekvence 1 kHz
	OCR0B  = 125;    // duty asi 50%
}
Nahlásit jako SPAM
IP: 77.92.210.–
KIIV
~ Moderátor
+43
God of flame
17. 8. 2017   #2
-
0
-

#1 KlokanJa
Jelikoz pouzivas OCR0A jako TOP, tak z toho asi vymlatis maximalne 50:50, za predpokladu, ze nastavis COM0A1. Jako PWM ho uz proste vyuzit nemuzes. Plus frekvence bude polovicni oproti OCR0B.

Nahlásit jako SPAM
IP: 93.91.151.–
Program vždy dělá to co naprogramujete, ne to co chcete...
KlokanJa
~ Anonymní uživatel
6 příspěvků
18. 8. 2017   #3
-
0
-

jj. Nakonec jsem to našel. :D

Takže buď to jít na to skrze soft-PWM, nebo použít TIMER1. Tam by to už mělo jít, nastavit frekvenci i střídu.

Nahlásit jako SPAM
IP: 80.251.250.–
KlokanJa
~ Anonymní uživatel
6 příspěvků
18. 8. 2017   #4
-
0
-

#3 KlokanJa
A ještě dodám. Mám generovat pulzy od 1Hz do 100Hz s proměnlivou střídou.

Takže nyní přemýšlím nad tím ,že bych si nastavil TIMER minimálně na 1kHz. A zde bych počítal pulzy. Např. pro frekvenci 35Hz, bych musel napočítat. Čím větší frekvence, tím lepší. Ale s rozumem, např. 10kHz. :D

Potom bych věděl, že pro 1 periodu signálu (o 35Hz) musím napočítat 28 pulzů. Tímto bych měl frekvenci 35Hz obdélník. A střída by do toho už měla jít taky. 

Takže kontrolní otázka, je to správná cesta, jakou se vydat?

Nahlásit jako SPAM
IP: 80.251.250.–
KIIV
~ Moderátor
+43
God of flame
18. 8. 2017   #5
-
0
-

#4 KlokanJa
ja bych volil Timer1 s ICR1 jako TOP. Pri vhodnem nastaveni preddelicky budes mit pak daleko jemnejsi nastaveni stridy.

Nahlásit jako SPAM
IP: 93.91.151.–
Program vždy dělá to co naprogramujete, ne to co chcete...
KlokanJa
~ Anonymní uživatel
6 příspěvků
18. 8. 2017   #6
-
0
-

#5 KIIV
Jo jako tak, že bych si přímo pomocí TIMERu1 generoval přerušení dané frekvence (vhodnou změnou registrů) a střídu už jenom pomocí IFu donastavit přímo v timeru. To je ještě lepší řešení, než mé, kde jsem chtěl mít přesně dané přerušení s frekvencí 10kHz.

A takto bych mohl docílit mnohem lepší přesnosti a procesor bude mít ještě dostatek času na to, aby se třeba dloubal v nose (LCD, Sériovka, .....).

Nahlásit jako SPAM
IP: 80.251.250.–
KIIV
~ Moderátor
+43
God of flame
18. 8. 2017   #7
-
0
-

#6 KlokanJa
ne, myslel jsem jako pouzit primo PWM na Timeru 1 :)

Jakmile zacnes generovat PWM softwarove, tak se pridavaji ruzne odchylky casovani a tak.

Nahlásit jako SPAM
IP: 93.91.151.–
Program vždy dělá to co naprogramujete, ne to co chcete...
KlokanJa
~ Anonymní uživatel
6 příspěvků
18. 8. 2017   #8
-
0
-

No problém je, že HW je už vyroben. A já potřebuju generovat 4 stejné průběhy na 4 různých pinech. A ty piny jsou:

OC0A, OC0B, OC1A, OC1B nevím, jestli timerem 1 v PWM režimu můžu nastavit všechny 4 piny.

Nahlásit jako SPAM
IP: 80.251.250.–
KIIV
~ Moderátor
+43
God of flame
18. 8. 2017   #9
-
0
-

#8 KlokanJa
no 4 stejne prubehy, to by stacil jedinej vystup a dratovy propojky. Jeste by teoreticky slo pouzit pevny TOP=255, ale napriklad timerem 2 generovat casovou zakladnu pro vstup T0 (external clock pro Timer0) - samo se to musi propojit vne obvodu.

Nahlásit jako SPAM
IP: 93.91.151.–
Program vždy dělá to co naprogramujete, ne to co chcete...
KlokanJa
~ Anonymní uživatel
6 příspěvků
18. 8. 2017   #10
-
0
-

#9 KIIV
Nic prdím na to.   

Udělám to takto. Na výstupu mám buffer, takže budu generovat pomocí TIMER1 PWM na pinu OC1A nebo OC1B, teď přesně nevím. 

Pomocí toho timeru bych měl být schopen generovat PWM od 1HZ do 100Hz se změnou střídy. A toto PWM potom pomocí páječky, cínu a drátků rozvedu do toho bufferu a ono ejhle, měl bych mít všude stejné průběhy. ;)

Takže teď už jenom vědět, že pomocí TIMERu1 budu schopen generovat toto:

1. Frekvence 1 - 100Hz

2. Změna střídy 0 - 100%

Nahlásit jako SPAM
IP: 80.251.250.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 3 hosté

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý