Vítejte na Elektro Bastlírn?
Nuke - Elektro Bastlirna
  Vytvořit účet Hlavní · Fórum · DDump · Profil · Zprávy · Hledat na fóru · Příspěvky na provoz EB

Vlákno na téma KORONAVIRUS - nutná registrace


Nuke - Elektro Bastlirna: Diskuzní fórum

 FAQFAQ   HledatHledat   Uživatelské skupinyUživatelské skupiny   ProfilProfil   Soukromé zprávySoukromé zprávy   PřihlášeníPřihlášení 

1 KHz PWM na Arduino UNO
Jdi na stránku 1, 2  Další
 
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Last_HighLander



Založen: May 07, 2013
Příspěvky: 51
Bydliště: Ždiar

PříspěvekZaslal: pá leden 15 2021, 20:53    Předmět: 1 KHz PWM na Arduino UNO Citovat

Ahojte kóderi.
Potrebujem poradiť ako dostať presne 1kHz na PWM pine z Arduina UNO.
Že sa to nedá viem aj sám.

dík
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
ZdenekHQ
Administrátor


Založen: Jul 21, 2006
Příspěvky: 25741
Bydliště: skoro Brno

PříspěvekZaslal: pá leden 15 2021, 21:04    Předmět: Citovat

No jestli je to jak všude jinde odvozený děličkou z krystalu, tak budeš muset vyměnit krystal.
_________________
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
bdn



Založen: Jan 16, 2020
Příspěvky: 467

PříspěvekZaslal: pá leden 15 2021, 21:57    Předmět: Citovat

Krystal měnit není potřeba.

CTC mód je přímo dělaný na vyrábění frekvence, v datasheetu je na to formulka na str. 196.
citace:
fout = fin / (2*prescaler*(OCRnx+1))



Postup např. pro krystal 16MHz lze rozdělit takto
1/
např. fin= 16MHz -> fout=2kHz
n= (16.000.000 Hz/ 2.000 Hz) = 8.000

2/
8.000 = (64) .(125)
takže např. prescaler nastavit na 64x a OCRnx=(125-1)

3/ o podělení 2x dojde 'automaticky' na output waveform bloku

PS. jako inspirace tady chlápek zapojil dva timery/country za sebou, aby dosáhnul 1Hz URL:
https://create.arduino.cc/projecthub/moty/frequency-counter-for-pc-a19f63
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
misocko



Založen: Jun 26, 2009
Příspěvky: 1282
Bydliště: Hlohovec (Sk)

PříspěvekZaslal: pá leden 15 2021, 22:04    Předmět: Citovat

Last_HighLander napsal(a):
Že sa to nedá viem aj sám.

ked vies ze sa to neda, tak naco sa kurna pytas?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
ZdenekHQ
Administrátor


Založen: Jul 21, 2006
Příspěvky: 25741
Bydliště: skoro Brno

PříspěvekZaslal: so leden 16 2021, 0:42    Předmět: Citovat

@bdn: Ale on píše o PWM, ta je většinou generovaná jinak než CTC. Já taky umím vygenerovat téměř libovolnej kmitočet na pinu, ale nemím do něho následně nacpat PWM.

Tady je otázka, co je vlastně důležitý.

_________________
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
monterjirka



Založen: Jun 14, 2003
Příspěvky: 2791
Bydliště: Blížejov

PříspěvekZaslal: so leden 16 2021, 9:58    Předmět: Citovat

Záleží na tom co vše dalšího má ještě modul dělat. Dokázal bych si na portu a konkrétním pinu vytvořit PWM s jakoukoliv frekvencí (v nějakém rozumném rozsahu od - do), ale trochu bych tím zaměstnal jádro, časovače, omezil možnosti interuptu...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Last_HighLander



Založen: May 07, 2013
Příspěvky: 51
Bydliště: Ždiar

PříspěvekZaslal: so leden 16 2021, 10:04    Předmět: Citovat

OK, trocha ste mi pomohli, našiel som v CTC mode kalkulačku:
https://www.arduinoslovakia.eu/application/timer-calculator

Krásne - kalkulačka napíše sama kód pre 1kHz, to je dobrá správa. Tá zlá je, že strieda je 50%, ja však potrebujem na výber striedy: 5%, 10%, 16%, 25%. Tu presnosť nie je až taká limitná. (Preto bol pôvodný zámer PWM)

Viete mi poradiť ako zmeniť striedu v CTC mode?

Veľké díky za pomoc.
HL
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
bdn



Založen: Jan 16, 2020
Příspěvky: 467

PříspěvekZaslal: so leden 16 2021, 12:40    Předmět: Citovat

Pokud chceme PWM 1kHz,tak není problém.
Chce to najít si datasheet pro atmega328(P) a podívat se.
K dispozici jsou 3 časovače, z toho TC0 a TC1 umí 'variable PWM period'

Např. časovač TC1, datasheet s.166
Phase and Frequency Correct PWM Mode
focnx_pfc_pwm = fin/(2.N.TOP)

1/ 16.000.000Hz/1.000Hz = 16.000
2/ nastavit TC1 na mode 0x8, nastavit WGMx bity a COMx bity
3/ ICR1 (TOP) nastavit na (125)
4/ OCR1A (duty) se nastaví na někam v rozsahu (0..124)
5/ prescaler nastavit na (64)

PS. pro ladění pomůže osciloskop
kód:

/*
  file: test_pwm.ino
*/

// pwm_1khz_set_pwm_duty(0);
//
void pwm_1khz_set_pwm_duty( uint8_t value)
{
  if (value < 125)
  {
    OCR1A = value;
  }
  else
  {
    OCR1A = (125 - 1);
  }
}

// pwm_1khz_setup_oc1a_pb1_IO9();
//
// Phase and Frequency correct PWM mode x8
// TOP is 125
// duty is 0
// prescaler is 64
// enable pin as output
void pwm_1khz_setup_oc1a_pb1_IO9( void)
{
  TCCR1A = 0;
  TCCR1B = 0;
  //
  // WGM: 0b1000, mode: 0x8,
  // COM1A:0b10, clear output on compare match when upcounting
  //
  TCCR1A = _BV(COM1A1);

  // ICR1
  ICR1 = (125);

  // OCR1A
  OCR1A = (0);

  // CS: 0b011, prescaler: 64
  //
  TCCR1B = _BV(WGM13) | (0b011 << CS10);

  // OC1A is PB1 is IO9
  DDRB |= _BV(PB1);
}


void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
  Serial.begin(9600);           //  setup serial
  pwm_1khz_setup_oc1a_pb1_IO9();
}


void loop() {
 
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second

  uint8_t i = 0;
  do
  {
    pwm_1khz_set_pwm_duty(i);
    Serial.println(i);          // debug value
    delay(200);
    i = i + 1;
  }
  while (i < 125);
}
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
ZdenekHQ
Administrátor


Založen: Jul 21, 2006
Příspěvky: 25741
Bydliště: skoro Brno

PříspěvekZaslal: ne leden 17 2021, 17:54    Předmět: Citovat

No jo, to je výhoda, když si ten krystal můžeš dělit libovolným číslem i u PWM. Ty malý potvory umí většinou jen mocninu dvou...
_________________
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
Last_HighLander



Založen: May 07, 2013
Příspěvky: 51
Bydliště: Ždiar

PříspěvekZaslal: ne leden 17 2021, 18:11    Předmět: Citovat

Veľké uznanie za odpoveď a kód od BDN. Naozaj správne funguje, striedu si môžem softvérovo meniť, výstup má 1kHz. Skvelé, moja požiadavka je vyriešená.

Celkovo však zapojenie ešte nekomunikuje s autom, zrejme je teraz problém s presnosťou zdroja +-12V. Ten ma v kladnej vetvi iba +11.6V. Budem ho musieť vymeniť... uvidím či sa veci pohnú.

Ešte raz, vďaka za pomoc.
HL
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
FHonza



Založen: Nov 20, 2012
Příspěvky: 1453
Bydliště: Praha

PříspěvekZaslal: po leden 18 2021, 21:09    Předmět: Citovat

ZdenekHQ napsal(a):
Ty malý potvory umí většinou jen mocninu dvou...

Vyzkoušej nové malé potvory, jako třeba Attiny412, 416. Cena příznivá, dělají se i v SOIC.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
ZdenekHQ
Administrátor


Založen: Jul 21, 2006
Příspěvky: 25741
Bydliště: skoro Brno

PříspěvekZaslal: po leden 18 2021, 22:21    Předmět: Citovat

Když já to mám odladěný "na tělo" v JSA-51 (google to už nezná, tak teda assembler) a jen to přehazuju. Jsem přes HW, ty nohatý potvory beru jen jako nutnost.
_________________
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
FHonza



Založen: Nov 20, 2012
Příspěvky: 1453
Bydliště: Praha

PříspěvekZaslal: po leden 18 2021, 22:58    Předmět: Citovat

Schválně jsem kouknul do knižnice ČSCTS-FEL "Nové typy jednoobvodových mikropočítačů řady 8051 a 8096" z roku 1990. A ani tam už není nikde JAS Smile

Původním příspěvkem jsem chtěl říct, že existuje celá (relativně) nová řada TinyAVR, se kterou lze hodně úloh řešit mnohem jednodušeji. Už jenom to, že mají konečně I²C a DAC.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Mahoney



Založen: Oct 26, 2019
Příspěvky: 381

PříspěvekZaslal: út leden 19 2021, 11:59    Předmět: Citovat

ZdenekHQ napsal(a):
…v JSA-51 (google to už nezná, tak teda assembler)…


Ale no tak… Cool Very Happy
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Last_HighLander



Založen: May 07, 2013
Příspěvky: 51
Bydliště: Ždiar

PříspěvekZaslal: út leden 19 2021, 19:05    Předmět: Citovat

Už to funguje!!

Myslím, že si to zaslúži vysvetlenie.
Postavil som troj-fázovú 11kW nabíjačku pre Peugeot e2008. Tá v domácich podmienkách nabíja auto 64km/hod.
Nabíjačku, ktorú Vám pribalia v základe má iba 1.8kW! a nabíja cca 6km/hod. Takže teraz nabíjam 10x rýchlejšie, mám však prepínač
aby to mohlo ísť aj pomalšie. Rýchlonabíjačku v meste mám zatiaľ oskúšanú jednu s 360km/hod.

Nakoniec stačilo použiť klasické PWM arduina s 988Hz a PC zdroj tiež plne vyhovoval. V schéme na webe chýbal odpor, ktorý mal byť priamo v konektore - ten mal nastavovať medzné hodnoty výkonu nabíjania.

Ak by mal niekto na fóre záujem poskytnem zapojenie aj softvér.

Ešte raz veľká vďaka za pomoc.
HL



Charger.jpg
 Komentář:
 Velikost:  293.2 kB
 Zobrazeno:  143 krát

Charger.jpg


Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů Časy uváděny v GMT + 1 hodina
Jdi na stránku 1, 2  Další
Strana 1 z 2

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra.
Nemůž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.
Nemůžete připojovat soubory k příspěvkům
Můžete stahovat a prohlížet přiložené soubory

Powered by phpBB © 2001, 2005 phpBB Group
Forums ©
Nuke - Elektro Bastlirna

Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.


PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Čas potřebný ke zpracování stránky 0.16 sekund