.: fórum - hlavní stránka :.
Technology Stronghold by Rudolf Vesely
How to build Microsoft System Center hosted cloud series
FAQ
Hledat
Seznam uživatelů
Uživatelské skupiny
Registrace
Profil
Statistika
Soukromé zprávy
Přihlášení
 
Obsah fóra mcontrollers.com
->
AVR
Odeslat odpověď
Uživatel
Předmět
Tělo zprávy
Smajlíky (emotikony)
Zobrazit další smajlíky (emotikony)
Barva písma:
Výchozí
Kaštanová
Červená
Oranžová
Hnědá
Žlutá
Zelená
Olivová
Azurová
Modrá
Tmavě modrá
Fialová
Fuchsiová
Bílá
Černá
Velikost písma:
Velikost písma
Drobné
Malé
Výchozí
Velké
Obrovské
zavřít zn.
Možnosti
HTML:
VYPNUTO
Značky
:
POVOLENY
Smajlíky:
POVOLENY
Zakázat značky v tomto příspěvku
Zakázat smajlíky v tomto příspěvku
Přílohy
·
Kliknutím na tlačítko
Připojit soubor
se otevře panel pro přidání nové souborové přílohy.
·
Kliknutím na tlačítko
Seznam příloh
se otevře seznam aktuálních příloh, které můžete mazat i upravovat.
·
Chcete-li přepsat některý ze souborů (třeba jeho novější verzí), klikněte na obě dvě tlačítka. Potom postupujte jako při přikládání nového souboru, jen nakonec neklikejte na tlačítko
Připojit soubor
, ale klikněte na tlačítko
Přepsat novější verzí
u stávajícího souboru, který chcete přepsat. Pokud se komentář nemění, není jej třeba znovu zadávat.
Možnosti
Anti SPAM system
Jste neregistrovaný uživatel!
Na kontrolní otázky musí odpovovídat pouze neregistrovaní uživatelé.
Tuto otázku musíte zadat k tomu, aby bylo posílání zpráv složitější (ochrana proti SPAM botům).
Pokud si nejste jistý odpovědí, kontaktujte prosím
administrátora v BUG reportu
, který vám rád pomůže.
Anti SPAM system:
Z jaké země pochází toto fórum? Odpověď jsou dvě slova. První začína na Č a druhé na r.
Vaše odpověď: *
Časy uváděny v GMT + 2 hodiny
Přejdi na:
Zvolte fórum
Fórum
----------------
Zprávy od moderátorů (vývěsní tabule)
Zprávy pro moderátory
Programování, software, mikrokontroléry, mikropočítače, mikroprocesory
----------------
Microchip
ARM
AVR
8051 / 8052
Jiné mikrokontroléry, procesory, hradla
Elektronika, hardware a programátory
----------------
Elektronika s mikrokontroléry, procesory
Elektronika bez mikrokontrolérů, procesorů
Programátory
Ostatní
----------------
Download
Ostatní
Off – topic
Přehled tématu
Autor
Zpráva
Balů
Zaslal: 22 březen 2016, 15:58
Předmět:
Pokud bys netrval na PB0, tak si myslím, že by se dal udělat generátor 60kHz úplně bez účasti programu (vyjma prvotního nastavení čítače, samozřejmě) na pinu PB3, případně PD7, PD5 nebo PD4.
vladoxxx
Zaslal: 21 březen 2016, 17:24
Předmět:
Nakonec jsem vydoloval jenom starej krystal s popisem 16 000kHz
....funguje to, výsledek je takovej:
vladoxxx
Zaslal: 20 březen 2016, 18:29
Předmět:
Balů napsal:
Když ono to zadání bylo tak jednoduchý, že to domácí úlohou opravdu dost zavánělo.
Rozdíl mezi OCIE a TOIE je v tom, kdy přerušení nastává. OCIE nastává v okamžiku, kdy TCNT dosahne OCR. TOIE je přerušení při přetečení TCNT z 0xFF (0xFFFF pro 16-bitový čítač) do 0.
Jinak WGM01 je v tomto případě součástí WGM01:WGM00 a jeho nastavení určuje chování čítače. V tomto případě je čítač nastaven na CTC (Clear Timer on Compare match) neboli čítač čítá 0-OCR a ne 0-0xFF(0xFFFF). V tomto případě TOV nemůže nikdy nastat, protože čítač hodnoty 0xFF (0xFFFF) nidky nedosahne.
Ale tohle je dost dobře v datasheetech popsané.
Na druhou stranu, je dobře, že jsou i takoví jako Ty, kteří ještě něco doma staví a hlavně učí se. Drtivá většina jen koupí arduino, stáhnou uino a pak chodí na fóra s dotazy typu "Už týden hledám knihovnu na rozsvícení LEDky a nemůžu nic najít ...". Jasně, že pokud je tu vidět snaha (i když máš nějaký supertajný projekt o kterým se nesmíš zmínit
), tak tady poradíme a pomůžeme.
Díky moc!
V týdnu skočím pro krystal a dám sem měření z osciloskopu
Balů
Zaslal: 20 březen 2016, 17:32
Předmět:
Když ono to zadání bylo tak jednoduchý, že to domácí úlohou opravdu dost zavánělo.
Rozdíl mezi OCIE a TOIE je v tom, kdy přerušení nastává. OCIE nastává v okamžiku, kdy TCNT dosahne OCR. TOIE je přerušení při přetečení TCNT z 0xFF (0xFFFF pro 16-bitový čítač) do 0.
Jinak WGM01 je v tomto případě součástí WGM01:WGM00 a jeho nastavení určuje chování čítače. V tomto případě je čítač nastaven na CTC (Clear Timer on Compare match) neboli čítač čítá 0-OCR a ne 0-0xFF(0xFFFF). V tomto případě TOV nemůže nikdy nastat, protože čítač hodnoty 0xFF (0xFFFF) nidky nedosahne.
Ale tohle je dost dobře v datasheetech popsané.
Na druhou stranu, je dobře, že jsou i takoví jako Ty, kteří ještě něco doma staví a hlavně učí se. Drtivá většina jen koupí arduino, stáhnou uino a pak chodí na fóra s dotazy typu "Už týden hledám knihovnu na rozsvícení LEDky a nemůžu nic najít ...". Jasně, že pokud je tu vidět snaha (i když máš nějaký supertajný projekt o kterým se nesmíš zmínit
), tak tady poradíme a pomůžeme.
vladoxxx
Zaslal: 20 březen 2016, 17:07
Předmět:
Je smutný, že se člověk nemůže jen tak bavit a něco vymýšlet...
Úkol do školy to není...je mi 25
Každopádně sem asi nechci psát, čeho součástí bude ten generátor...
Tvoje řešení je hodně hezký,
Z datasheetu jsem moc nepochopil,
jakej je rozdíl mezi (1<<OCIE0) a 1 << TOIE0)
A současně nevím, co dělá 1<<WGM01)
...ale to je v tuto chvíli skoro jedno, vyzkouším to a bude to
Díky moc za vřešení problému!!
(...A doufám, že dnes nemá každej malej kluk doma osciloskop jako já ...to bych se nas*al
Balů
Zaslal: 20 březen 2016, 13:57
Předmět:
Teda teď fakt nevím, co vlastně chceš 50Hz není 60kHz - to jsi o řád jinde...
Výpočet máš pro 50 Hz, osciloskop ukazuje 44,279 kHz - opět o řád jinde.
To mi nějak nesedí.
Řešení je velice jednoduché, ale chci, abys mě přesvědčil, že je to Tvoje práce a není to domácí úkol. S domácím úkolem pomohu (pomůžeme), ale když to za Tebe tady vyřešíme, tak se nic nenaučíš. Jakmile tady vidíme snahu o řešení nebo alespoň se něco naučit pomůžeme (případně i řešení dodáme).
Řešní mám jednoduché (jednodušší a přesnější, než to Tvoje), i když se mi pořád moc nechce věřit, že to není domácí úkol.
Jinak z kmitočtu 14745600 neuděláš 60000 Hz (alespoň ne přesně). Musí to být dělitelný.
12000000/60000=200 => tohle lze.
14745600/60000=245,76 => tohle nepůjde => 14745600/246=59 941,46341 Hz
12000000/40000=300 => tohle lze.
14745600/40000=368,64 => tohle nepůjde => 14745600/367=40 178,746594 Hz
Tady je to řešení - samozřejmě pro krystal 12 MHz:
kód:
#define F_CPU 12000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
ISR(TIMER0_COMP_vect)
{
PORTB ^= (1<<PB0);
}
int main(void)
{
DDRB = (1<<PB0);
OCR0 = 99;// 60 kHz
//OCR0 = 149;//40 kHz
TCCR0 = (1<<WGM01)|(1<<CS00);
TIMSK = (1<<OCIE0);
sei();
for(;;)
{
}
}
vladoxxx
Zaslal: 20 březen 2016, 13:31
Předmět:
Balů napsal:
A nebude to tím, že máš zakomentované spuštění čítače ?
A 2 dotazy :
1) opravdu máš u procesoru krystal 12 MHz ?
2) Pokud to bude jenom generátor 60kHz, určitě potřebuješ IO s tolika nožičkama a tak velikou pamětí ?
Mám zakomentovanou jen předděličku (1024)
Udělal jsem změny:
1) Výměna krystalu za 14 745 600Hz
2) tento MCU jsem měl doma i s DPS...tak není co řešít....inak to samozřejmě nepotřebuju
Když odkomentuju předděličku a přepíšu konstanty v časovači, bude to vypadat takhle:
kód:
#define F_CPU 14745600UL
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <math.h>
volatile unsigned int tim0; //pomocna promenna - kolikrat pretece TIMER0
int main(void)
{
sei();//init interrupt
TIMSK|= (1 << TOIE0);// prerušeni pri pretečení TCNT0
TCCR0|= (1 << CS00)|(1 << CS00); // preddelicka /1024 //datasheet str.73
DDRB |= (1 << PB0); // LEDka na PB0
while (1)
{
}
}
//////////////////////////////////////////////////////////////////////////
// TIMER 0
ISR (TIMER0_OVF_vect){ //pocita do 255 - 8bitu
TCNT0 = 111; //Prerusi se po 10ms =>(14745600/1024)/(255-111)
tim0++;
switch (tim0)
{
case 1:
PORTB = (1 << PB0);
break;
case 2:
PORTB ^= (1 << PB0);
tim0=0;
break;
}
}
FUSES - LOW 0xDF, HIGH 0x D9
Výsledná frekvence by pak měla být 14745600/ 1024/ (255-111)/2
=20ms
Zpoždění MCU je 2us/cyklus....
Takže byl zřejmě špatný krystal...
Teď už jen vymyslet, jak to udělat, aby MCU dával přesně! 60 kHz (nebo 40kHz)
PS: Není to úkol...
Chtěl jsem udělat 12 000 000 bez předděličky, jenom do CASEů napsat 100+100
....bez zpoždění by to vyšlo přesně, byl by prostor na doladění (99+99)
Balů
Zaslal: 20 březen 2016, 12:27
Předmět:
1) Máš zakomentované spuštění čítače.
2) Jak jsi to počítal ? 12000000/1024/256 = 45,7763671875 Hz. Jak z toho chceš dalším dělením dostat obdélník 60 kHz ?
A 2 dotazy :
1) opravdu máš u procesoru krystal 12 MHz ?
2) Pokud to bude jenom generátor 60kHz, určitě potřebuješ IO s tolika nožičkama a tak velikou pamětí ?
Úloha má velice jednoduché řešení s minimálním nároky na výkon procesoru. V Cčku jsem shopný se při této konfiguraci dostat na obdélník přes 128khz (v assembleru ještě o kus výše). Samozřejmě s tím, že procesor má ještě čas i na další práci.
Ale domácí úkol tady opravdu řešit nebudu ...
vladoxxx
Zaslal: 20 březen 2016, 11:39
Předmět: Generátor obdélníku 60kHz
Ahoj,
potřeboval bych udělat generátor obdélníku 60kHz....
Chtěl jsem na to využít Atmegu16A....ale z nějakýho důvodu to nejde...
Program vypadá takhle:
kód:
#define F_CPU 12000000UL
//includovane knihovny zde
volatile unsigned int tim0; //pomocna promenna - kolikrat pretece TIMER0
int main(void)
{
sei();//init interrupt
TIMSK|= (1 << TOIE0);// prerušeni pri pretečení TCNT0
// TCCR0|= (1 << CS02)| (1 << CS00); // preddelicka 1024
DDRB |= (1 << PB0); // vystup
while (1)
{
}
}
//////////////////////////////////////////////////////////////////////////
// TIMER 0
ISR (TIMER0_OVF_vect){ // 8bitu
tim0++;
switch (tim0)
{
case 1:
PORTB = (1 << PB0);
break;
case 150:
PORTB ^= (1 << PB0);
break;
case 300:
PORTB ^= (1 << PB0);
tim0=0;
break;
}
}
Dá se s tím něco dělat?? ...a nebo to prostě nejde? (jaká je nejjednodušší lepší varianta)
Num Lock Holder - app to hold Numlock
Copyright © 2019
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)