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í 

PWM

 
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
mirecc



Založen: Nov 13, 2006
Příspěvky: 33

PříspěvekZaslal: st prosinec 16 2009, 18:36    Předmět: PWM Citovat

Mam jeden problem robil som program na PWM na C/C2 pre atmega8, len mi to pwm nejde, neviete mi poradit???
Tu je program>
#include <C:\WinAVR-20090313\avr\include\avr\io.h>


#define increaseButton_PRESSED !(PIND & 0x40)
#define increaseButton_OPEN (PIND & 0x40)
#define decreaseButton_PRESSED !(PIND & 0x80)
#define decreaseButton_OPEN (PIND & 0x80)


#define COUNTER_MIN 0x0090
#define COUNTER_MAX 0x00f8
#define KROK 0x0008

void port_init(void)
{
PORTB = 0x00;
DDRB = 0x08;
PORTC = 0x00;
DDRC = 0x00;
PORTD = 0xC0;
DDRD = 0x00;
}


void timer2_init(void)
{
TCCR2 = 0x61; //setup
OCR2 = COUNTER_MIN;

}

void init_devices(void)
{
//stop errant interrupts until set up
//CLI(); //disable all interrupts
port_init();
timer2_init();

//MCUCR = 0x00;
//GICR = 0x00;
//TIMSK = 0x00; //timer interrupt sources
//SEI(); //re-enable interrupts
//all peripherals are now initialized
}


//***** DELAY OF 1 mSEC (appx.) *******

void delay_ms(int miliSec) //for 1 Mhz crystal
{
int i,j;

for(i=0;i<miliSec;i++)
for(j=0;j<100;j++)
{
asm("nop");
asm("nop");
}
}

//************************ main ***************************

void main(void)
{
unsigned int counter = COUNTER_MIN;

init_devices();

while(1)
{

}

if(increaseButton_PRESSED)
{
delay_ms(20);
if(increaseButton_OPEN)
while(increaseButton_PRESSED);
delay_ms(20);

if(counter >= COUNTER_MAX)
counter = COUNTER_MAX;
else
counter += KROK;
OCR2 = counter;

}
else
{
delay_ms(20);

if(decreaseButton_OPEN) ;
while(decreaseButton_PRESSED);
delay_ms(20);

if(counter <= COUNTER_MIN)
counter = COUNTER_MIN;
else
counter -= KROK;
OCR2 = counter;

}

}

//****************************** END ***************
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Andrea



Založen: Sep 07, 2007
Příspěvky: 9340

PříspěvekZaslal: st prosinec 16 2009, 20:01    Předmět: Citovat

No jestli jsi to psal opravdu ty, tak umíš docela dobře anglicky.
Jak zjišťuješ, jestli ta PWM funguje nebo ne?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
mirecc



Založen: Nov 13, 2006
Příspěvky: 33

PříspěvekZaslal: st prosinec 16 2009, 20:49    Předmět: Citovat

Andrea napsal(a):
No jestli jsi to psal opravdu ty, tak umíš docela dobře anglicky.
Jak zjišťuješ, jestli ta PWM funguje nebo ne?

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



Založen: Sep 07, 2007
Příspěvky: 9340

PříspěvekZaslal: st prosinec 16 2009, 21:06    Předmět: Citovat

A jak ten překladač pozná, co máš za procesor? Tam, co jsi ten program opajcoval, mají na začátku #include <iom8v.h>, tak jestli by tam nemělo být něco podobnýho pro AVR GCC.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
GeorgeB



Založen: Nov 21, 2005
Příspěvky: 1216
Bydliště: Pardubice

PříspěvekZaslal: st prosinec 16 2009, 21:40    Předmět: Citovat

Andrea napsal(a):
Tam, co jsi ten program opajcoval, mají ...

Přesně: http://images.robolabz.multiply.multiplycontent.com/attachment/0/SpofCQoKCCwAAFzNnzM1/Stuff%20of%20Dharmanitech.pdf?nmid=279223533 Very Happy
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
mtajovsky



Založen: Sep 19, 2007
Příspěvky: 3698
Bydliště: Praha

PříspěvekZaslal: st prosinec 16 2009, 22:47    Předmět: Citovat

- máte ten program nějaký "vykuchaný". Zastaví se to na while(1){} a nic se dál nebude dít. V originále je tam "cosi" navíc. Very Happy

- vidím špatně udělanou funkci pro zpožďování. Převážná část kódu bude v těch cyklech for a ne v nop. Takže výsledek silně závisí na tom, jakou optimalizaci překladač provede. Pro zpožďování jsou určené funkce z avr-libc _delay_ms() a _delay_us().
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Andrea



Založen: Sep 07, 2007
Příspěvky: 9340

PříspěvekZaslal: čt prosinec 17 2009, 8:06    Předmět: Citovat

On tam těch chyb vyrobil víc, ale na funkci PWM by neměli mít vliv.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Atlan



Založen: May 10, 2004
Příspěvky: 4511
Bydliště: Košice

PříspěvekZaslal: čt prosinec 17 2009, 10:29    Předmět: Citovat

Toje tak aj opajcovat treba vediet Very Happy sadnut studovat...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zmije



Založen: Jun 30, 2005
Příspěvky: 1570
Bydliště: Pardubický kraj

PříspěvekZaslal: čt prosinec 17 2009, 10:49    Předmět: Citovat

Pokud to překládaš ve WinAVR pomocí GCC, tak naprosto špatně pracuješ s vektory přerušení, na začátek musíš dát kromě #include <avr/io.h> ještě #include <avr/interrupt.h> a obsluhu přerušení potom dát do ISR( TIMER2_COMP_vect ){ //nejaky kod }pokud chceš obsloužit přerušení od c/t2 při shodě, ostatní vektory viz. tabulka.
PS: nezapomeň povolit globální přerušení sei() ;



INTvektory.jpg
 Komentář:

Stáhnout
 Soubor:  INTvektory.jpg
 Velikost:  60.78 kB
 Staženo:  72 krát

Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Zmije



Založen: Jun 30, 2005
Příspěvky: 1570
Bydliště: Pardubický kraj

PříspěvekZaslal: čt prosinec 17 2009, 11:01    Předmět: Citovat

Dodávám, že tabulka platí pro ATmega16, pro ostatní procesory se potřebné informace nachází v datasheetech.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
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
Strana 1 z 1

 
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.13 sekund