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í 

Prerusenie od Timer0 v jazyku C

 
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: pá květen 07 2010, 10:54    Předmět: Prerusenie od Timer0 v jazyku C Citovat

Zdravim nevie niekto ako sa nastavuje prerusenie casovaca0 a najma ako sa povoluje v jazyku c.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
mikollar



Založen: Dec 26, 2004
Příspěvky: 1426
Bydliště: Košice - okolie

PříspěvekZaslal: pá květen 07 2010, 11:05    Předmět: Citovat

podla toho v akom prekladaci to robis, ale vacsinou je to rovnake ako u asm, cize nastavit prislusne bity v registroch, intcon...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
mirecc



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

PříspěvekZaslal: pá květen 07 2010, 11:43    Předmět: Citovat

Tuto je program:
#include <C:\WinAVR-20100110\avr\include\avr\io.h>
#include <C:\WinAVR-20100110\avr\include\avr\interrupt.h>

#define vpredButton_PRESSED !(PIND & 0x01) //PD0 vpred
#define vpredButton_OPEN (PIND & 0x01)

#define vzadButton_PRESSED !(PIND & 0x02) //PD1 vzad
#define vzadButton_OPEN (PIND & 0x02)

#define vlavoButton_PRESSED !(PIND & 0x04) //PD2 vlavo
#define vlavoButton_OPEN (PIND & 0x04)

#define vpravoButton_PRESSED !(PIND & 0x08) //PD3 vpravo
#define vpravoButton_OPEN (PIND & 0x08)





void timer0_init(void)
{
TCNT0=131;
TCCR0 = 0x81; // TCnt=256-125f=64000 -> 8MHz/256

TIMSK=0x01;//povol.

}




void port_init(void)
{

PORTD = 0x00; //PD0-PD3 ovladanie vstupy
DDRD = 0x00; //PD4-OC1B, PD5-OC1A motor c.1 PD7-OC2 motor c.2vystupy

/*PORTB = 0x00; //motor c2
DDRB = 0x08; //PB3- OC0 vystup*/

PORTC = 0xFF;
DDRC = 0xFF;

}
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
void init_devices(void)
{

port_init();
timer0_init();
MCUCR = 0x0;
GICR =0x00;
GIFR =0x00;
SFIOR=0x00;
WDTCR=0x00;
SREG=0x00;

}

//---------------------------------------------------------------------------
void delay_ms(int miliSec) //1 Mhz crystal
{
int i,j;
for(i=0;i<miliSec;i++)
for(j=0;j<100;j++)
{
asm("nop");
asm("nop");
}
}

//************************ main ***************************
//---------------------------------------------------------------------------
volatile int PWM_cnt=0;
int PWM_T=64;
int PWM_t0=-32;
int PWM_t1=50;
//int PORTC=0;
const int _PWM0=1;
const int _PWM1=2;
const int _PWM2=4;
const int _PWM3=8;
//---------------------------------------------------------------------------
void timer0_oweflow(void)
{
TCNT0=131;
if (PWM_cnt==0)
{
PORTC|=_PWM0|_PWM1|_PWM2|_PWM3;
if (PWM_t0>=0) PORTC^=_PWM0;
if (PWM_t0<=0) PORTC^=_PWM1;
if (PWM_t1>=0) PORTC^=_PWM2;
if (PWM_t1<=0) PORTC^=_PWM3;
}

PWM_cnt++;
if (PWM_cnt==-PWM_t0) PORTC^=_PWM0;
if (PWM_cnt==+PWM_t0) PORTC^=_PWM1;
if (PWM_cnt==-PWM_t1) PORTC^=_PWM2;
if (PWM_cnt==+PWM_t1) PORTC^=_PWM3;

if (PWM_cnt>=PWM_T)
{
PWM_cnt=0;
}


}
//---------------------------------------------------------------------------
int main(void)
{



init_devices();

for(;;)
{

//---------------------------------------------------------------------------

if(vpredButton_PRESSED)
{

delay_ms(500);
if(vpredButton_OPEN)
{
delay_ms(500);
}

if(PWM_t0<PWM_T) PWM_t0++;
if(PWM_t1<PWM_T) PWM_t1++;
}





}
//---------------------------------------------------------------------------
if(vzadButton_PRESSED)
{


delay_ms(100);

if(vzadButton_OPEN) {

delay_ms(100);
}

if(PWM_t0>-PWM_T) PWM_t0--;
if(PWM_t1>-PWM_T) PWM_t1--;
}

//---------------------------------------------------------------------------
if(vlavoButton_PRESSED)
{

delay_ms(500);
if(vpredButton_OPEN)
{
delay_ms(500);
}

if(PWM_t0<PWM_T) PWM_t0++;
if(PWM_t1<PWM_T) PWM_t1--;






}
//---------------------------------------------------------------------------
if(vlavoButton_PRESSED)
{


delay_ms(100);

if(vzadButton_OPEN) {

delay_ms(100);
}

if(PWM_t0>-PWM_T) PWM_t0--;
if(PWM_t1>-PWM_T) PWM_t1++;





};

}
//****************************** END ***************************************


Program generuje PWM po zatlaceni urciteho tlacidla (Port D 0-3), PWM je na (Port C 0-3), po preteceni casovaca 0 sa ma vyvolat podprogram a vlastne neviem nastavit ten casovac- prerusenie.
Proste chcem ovladat dva jednosmerne motorceky pomocov PWM, tak aby isli stale 2 PWM sucastne
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
mirecc



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

PříspěvekZaslal: pá květen 07 2010, 14:14    Předmět: Citovat

Alebo nema niekto program na prerusenie C/T 0 po preteceni???
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
LordFus



Založen: Sep 20, 2009
Příspěvky: 39

PříspěvekZaslal: pá květen 07 2010, 14:52    Předmět: Citovat

takhle

#include <avr/io.h>
#include <avr/interrupt.h>

ISR(TIMER1_OVF_vect) {
//zde kód přeručení
}

int main() {

//inicializace

while(1) {
//smyčka
}
return 0;
}

_________________
..::Darovanému čipu na křemík nehleď::..
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
Atlan



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

PříspěvekZaslal: pá květen 07 2010, 18:00    Předmět: Citovat

Tonebude fungovat...hchcel timer 0 Very Happy

ISR(TIMER0_OVF_vect) {
//zde kód přeručení
}
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
LordFus



Založen: Sep 20, 2009
Příspěvky: 39

PříspěvekZaslal: pá květen 07 2010, 18:02    Předmět: Citovat

sakra, sry upsal sem se, ale tak snad je to zřejmé, že sem idiot a kde sem se sekl Very Happy
_________________
..::Darovanému čipu na křemík nehleď::..
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
ceeert



Založen: Apr 05, 2009
Příspěvky: 105
Bydliště: Plzen

PříspěvekZaslal: pá květen 07 2010, 22:51    Předmět: Citovat

Nevidím tam globální zapnutí přerušení...
_________________
Ceeert
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
mirecc



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

PříspěvekZaslal: so květen 08 2010, 6:49    Předmět: Citovat

ceeert napsal(a):
Nevidím tam globální zapnutí přerušení...

A ako to zapnem??
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
ceeert



Založen: Apr 05, 2009
Příspěvky: 105
Bydliště: Plzen

PříspěvekZaslal: so květen 08 2010, 7:07    Předmět: Citovat

Hledej v datasheetu global interrupt enable. Je to v nějakém základním registru(mozna MCUCR),nevim ted z hlavy a nesedím u počítače. Jinak je na to i příkaz SEI,jen nevim presne v jaké formě pro gcc. V CodeVision se vkládá inline assembler fce #asm("sei");
_________________
Ceeert
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
LordFus



Založen: Sep 20, 2009
Příspěvky: 39

PříspěvekZaslal: so květen 08 2010, 10:22    Předmět: Citovat

ve WinAvr stačí napsat sei(); pro zapnutí, cli(); pro vypnutí globálního přerušení. Pak jenom nastavit TOV0 v TIMSK.
_________________
..::Darovanému čipu na křemík nehleď::..
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
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