Elektronika.lt
 2025 m. sausio 21 d. Projektas | Reklama | Žinokite | Klausimai | Prisidėkite | Atsiliepimai | Kontaktai
Paieška portale
EN Facebook RSS

 Kas naujo  Katalogas  Parduotuvės  Forumas  Tinklaraščiai
 Pirmas puslapisSąrašas
 Forumas / + pokalbiai
 - Paieška forume
 - D.U.K. / Forumo taisyklės
 - Narių sąrašas
 - Registruotis
 - Prisijungti

Elektronika.lt portalo forumas

Jūs esate neprisijungęs lankytojas. Norint dalyvauti diskusijose, būtina užsiregistruoti ir prisijungti prie forumo. Prisijungę galėsite kurti naujas temas, atsakyti į kitų užduotus klausimus, balsuoti forumo apklausose.

Administracija pasilieka teisę pašalinti pasisakymus bei dalyvius, kurie nesilaiko forumo taisyklių. Pastebėjus nusižengimus, prašome pranešti.

Dabar yra 2025 01 21, 18:34. Visos datos yra GMT + 2 valandos.
 Forumas » Mikrovaldikliai » ATmega16 pertraukimai
Jūs negalite rašyti naujų pranešimų į šį forumą
Jūs negalite atsakinėti į pranešimus šiame forume
Jūs negalite redaguoti savo pranešimų šiame forume
Jūs negalite ištrinti savo pranešimų šiame forume
Jūs negalite dalyvauti apklausose šiame forume
 
  
Puslapis 11
Pradėti naują temą  Atsakyti į pranešimą Rodyti ankstesnį pranešimą :: Rodyti kitą pranešimą 
 ATmega16 pertraukimai
PranešimasParašytas: 2007 05 14, 21:13 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Domantas
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Mėginu išmokti panaudoti kontrolerio pertraukimus, bet kažko paprasto dar nesuprantu. Štai paprastos programos fragmentas su CodeVisionAVR:

#include <mega16.h>
#include <stdio.h>
#include <lcd.h>

unsigned int counter1, counter2;
char lcd_buffer[33];

// Timer 2 overflow interrupt service routine
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
counter1++;
}

void main(void)
{
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: 10.800 kHz
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x07; //daliklis iš 1024
TCNT2=0x00;
OCR2=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x40;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// Global enable interrupts
#asm("sei")

while (1)
{
lcd_gotoxy(0,1);
sprintf(lcd_buffer, "Counter2=%d", counter2);
lcd_puts(lcd_buffer);
if (counter1==100){
counter2++;
counter1=0;
}

}
}

Pertraukimas sudirba tik vieną kartą, o toliau toks vaizdas, kad reikia nuresetinti skaitliuko persipildžiusį registrą, kad pradėtų skaičiuoti iš naujo, bet neįsikertu kurį.
 ATmega16 pertraukimai
PranešimasParašytas: 2007 05 14, 22:11 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Digix
VIP narys
VIP narys
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
is kur zinai kad viena karta?

siap tai tavo skaitliukas turetu suktis ratu
ir padarei nelabai gerai
geraiu daruk taip:

long counter=0;

// Timer 2 overflow interrupt service routine
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
counter++;
}

panaudoji tiesiog 32 bitu kintamaji ir nereikes vargti. arba taip:

// Timer 2 overflow interrupt service routine
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
counter1++;
if (counter1==100){
counter2++;
counter1=0;
}
 ATmega16 pertraukimai
PranešimasParašytas: 2007 05 15, 07:17 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Domantas
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Ačiū už patarimą. Bet tada mano programos kita dalis kreivai parašyta, kuri išvedinėja "counter2" reikšmes, nes nuo 0 pasikeičia į 1, o daugiau ir nesikeičia. Tiesa pasakius, originali programa atlieka dar keletą nuoseklių funkcijų "main" dalyje, tai gal tiesiog ta 100 reikšmė prašokama? Gal sąlygos išraišką pakeisti į if (counter1>100)?
 ATmega16 pertraukimai
PranešimasParašytas: 2007 05 15, 08:15 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Domantas
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
dublis


Paskutinį kartą redagavo Domantas, 2007 05 30, 10:03. Redaguota 1 kartą
 ATmega16 pertraukimai
PranešimasParašytas: 2007 05 15, 13:18 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Digix
VIP narys
VIP narys
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
taip, tavo programoje reikia if (counter1>100)?
bet tada skaiciavimas bus netikslus
 ATmega16 pertraukimai
PranešimasParašytas: 2007 05 15, 13:31 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Domantas
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Supratau. Tikslumas čia buvo nesvarbu, tiesiog norėjau suprasti, kaip tai veikia. Dar kartą ačiū.
 ATmega16 pertraukimai
PranešimasParašytas: 2007 05 30, 10:29 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Domantas
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Grįžtu prie to pačio klausimo. Jaučiu, kad dar ne viską supratau arba čia yra dar kokių tai povandeninių sroviųSad
Programos esmė yra matuoti temperatūrą (DS1820), nuskaityti laiką (DS1307) ir pakaitomis išvedinėti duomenis į LCD ekraną. Išvedinėjimas pakaitomis ir realizuotas su Timer interrupt. Viskas lyg ir veikia, bet be jokios sistemos programa, kažkurioje vietoje lūžta, ir tai gali atsitikti po 10 min ir po 2 val. Toks jausmas, kad kažkokiu specifiniu momentu po pertraukimo procesorius negrįžtą į darbinę būseną. Gal pertraukimas įvyksta kažkokiu netinkamu momentu, kai matuojama temperatūra ar nuskaitomas laikas?
Kvarcas naudojamas 11.0592MHz
Timerio Clock source parinktas 11.0592MHz/1024=10.8kHz
Tai kiekvienas pertraukimas turėtų įvykti kas 10800/255=42.35Hz arba 0.024s. Ar čia teisingai viską supratau?
Temperatūrai nuskaityti rašo, kad reikia apie 0.2s. Na ir laikrodis dar. Ar gali čia būti kokios problemos?
 ATmega16 pertraukimai
PranešimasParašytas: 2007 05 30, 13:11 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Digix
VIP narys
VIP narys
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
kiek pertraukimu naudoji?

gali buti kad kazkuriohe programos vistoje sunaudojama daug steko atminties ir pertraukimui nebeuztenka.
 ATmega16 pertraukimai
PranešimasParašytas: 2007 05 30, 13:35 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Domantas
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Naudoju, tik tą vieną pertraukimą. Tiesa dar labai nesigilinau, kaip parašytos standartinės bibliotekos DS1820 ir DS1307 įrenginiams. Bet nemanau, kad ten kas nors blogai būtų.
Taimeriai išnaudoti visi OC0, OC1A ir OC1B generuoja PWM siganalą, o OC2 naudojamas pertraukimams.
Dar toks niuansas, kad kompiliatoriaus wizardas praneša apie klaidą, kad konfliktas tarp OC0 timerio ir LCD, kuris prijungtas prie PORTB. Nors būtent šio porto 3 bitas ir lieka laisvas nuo LCD.
 ATmega16 pertraukimai
PranešimasParašytas: 2007 05 30, 14:04 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Digix
VIP narys
VIP narys
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
jei atminties netruksta pabandyk steka padidinti 2 kartus ir paziurek kaip veiks
 ATmega16 pertraukimai
PranešimasParašytas: 2007 05 30, 14:17 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Domantas
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Nemoku įdėti paveiksliuko Sad
Čia turbūt, kur Data Stack Size nusistato?
 ATmega16 pertraukimai
PranešimasParašytas: 2007 06 26, 10:41 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Tomas221
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
sveiki as dar labai zalias ant C kalbos, gal galit parasyt proge
kad kas sekunde keistus portd=0 i portd=255? (su interruptais)
 ATmega16 pertraukimai
PranešimasParašytas: 2007 06 26, 16:05 Pranešti apie taisyklių pažeidimą Atsakyti su citata
jedas
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Apsilankyti vartotojo tinklapyje
#include "delay.h"

main{

while (1)
{
PORTD=~PORTD;
delay(1);
}


}


va tau programa :) biblioteka delay.h neduosiu

_________________
-----
That's what she said.
Pradėti naują temą  Atsakyti į pranešimą
 
Forumo sistema: phpBB
 „Google“ paieška forume
 Kas naujesnio?
 Naujos temos forume

Global electronic components distributor – Allicdata Electronics

Electronic component supply – „Eurodis Electronics“

LOKMITA – įvairi matavimo, testavimo, analizės ir litavimo produkcija

Full feature custom PCB prototype service

Sveiki ir ekologiški maisto produktai

Mokslo festivalis „Erdvėlaivis Žemė

LTV.LT - lietuviškų tinklalapių vitrina

„Konstanta 42“

Technologijos.lt

www.matuok.lt - Interneto spartos matavimo sistema

www.esaugumas.lt – apsaugok savo kompiuterį!

PriedaiMobiliems.lt – telefonų priedai ir aksesuarai

Draugiškas internetas

FS25 Tractors
Farming Simulator 25 Mods, FS25 Maps, FS25 Trucks
ETS2 Mods
ETS2 Trucks, ETS2 Bus, Euro Truck Simulator 2 Mods
FS22 Tractors
Farming Simulator 22 Mods, FS22 Maps, FS25 Mods
VAT calculator
VAT number check, What is VAT, How much is VAT
LEGO
Mänguköök, mudelautod, nukuvanker
Thermal monocular
Thermal vision camera,
Night vision ar scope,
Night vision spotting scope
FS25 Mods
FS25 Harvesters, FS25 Tractors Mods, FS25 Maps Mods
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija
FS25 Mods
FS25 Maps, FS25 Cheats, FS25 Install Mods
GTA 6 Weapons
GTA 6 Characters, GTA 6 Map, GTA 6 Vehicles
FS25 Mods
Farming Simulator 25 Mods,
FS25 Maps
ATS Trailers
American Truck Simulator Mods, ATS Trucks, ATS Maps
Reklama
‡ 1999– © Elektronika.lt | Autoriaus teisės | Privatumo politika | Atsakomybės ribojimas | Turinys | Reklama | Kontaktai LTV.LT - lietuviškų tinklalapių vitrina
Script hook v, Openiv, Menyoo
gta5mod.net
FS25 Mods, FS25 Tractors, FS25 Maps
fs25mods.lt
Optical filters, UV optics, electro optical crystals
www.eksmaoptics.com
Reklamos paslaugos
SEO sprendimai

www.addad.lt
Elektroninių parduotuvių optimizavimas „Google“ paieškos sistemai
www.seospiders.lt
FS22 mods, Farming simulator 22 mods,
FS22 maps

fs22.com
Reklama


Reklama