|
|
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 02 11, 01:44. Visos datos yra GMT + 2 valandos.
|
|
|
|
Forumas » Mikrovaldikliai » ATMEGA taimerio reiksme TCNT1.
|
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
|
|
|
|
ATMEGA taimerio reiksme TCNT1. |
Parašytas: 2010 11 12, 13:25 |
|
|
|
Susibalamutinau su TCNT1 rodanciu taimerio reiksme.
Situacija tokia: ant atmegos8 sukofiguruotas 16bit taimeris Normal top=FFFFh rezimu. Taimeris turetu skaiciuoti nuo 0, pasiekti max reiksme 65536 ir nusinulinti. Bet pvz rasant :
Kodas: |
printf("%d\n\r", TCNT1); |
gaunu reiksmes nuo -32768 iki 32768, kaikur programa ta TCNT1 mato kaip -32768 32768, kaikur kaip 0 65536, kaip man gauti visad 0 65536?....Programuoju su CodeVisionAVR. |
|
|
|
|
|
ATMEGA taimerio reiksme TCNT1. |
Parašytas: 2010 11 12, 14:34 |
|
|
|
A.. rasant
Kodas: |
printf("%u\n\r", TCNT1); |
gaunu 0 65563..prazioplinau duomenu tipa.
Dar klausimas ar programa TCNT1 reiksme visad mato kaip unsigned? Pvz sitoje vietoje
Kodas: |
if (TCNT1>60000){}; |
TCNT1 kaip 0 65563 ar ne? |
|
|
|
|
|
|
ATMEGA taimerio reiksme TCNT1. |
Parašytas: 2010 11 16, 19:16 |
|
|
|
nevisai, pagal C standartą (dar vadinamą K&R), yra atitinkamos taisyklės pagal kurias vykdoma tipų keitimas. T.y.:
Citata: |
If either operand is long double, convert the other to long double.
Otherwise, if either operand is double, convert the other to double.
Otherwise, if either operand is float, convert the other to float.
Otherwise, convert char and short to int.
Then, if either operand is long, convert the other to long.
|
tavo atveju TCNT yra registras, todėl jo tipas priklauso nuo proco ant kurio dirbi.
jeigu nori priverstinai naudoti vieną ar kitą tipą, naudok taip vadinamą cast`inimą. |
|
_________________ nepamirškit, klysti žmogiška
privatas - privatiems klausimams
arch linux |
|
|
|
|
|
ATMEGA taimerio reiksme TCNT1. |
Parašytas: 2010 12 02, 11:16 |
|
|
|
Su atmega8 ir TCNT1 reiksme viskas tvarkoj, viskas veikia kaip turetu, bet dabar bedos iskilo su atmega168. Bandant pasiekti TCNT1 registra meta klaida, kaip suprantu meta todel kad mega168.h include nera apibreztas TCNT1. Sia reiksme reikia pasiekti per du 8bit registrus TCNTL ir TCNTH.
Klausimas butu ar galima kazkaip iterpti TCNT1 registra i mega168.h? Aciu
P.S. paziurejau kad atmega8 include TCNT1 bei TCNT1L priskirta 0x2c reiksmei, kas pagal datasheeta reiskia Timer/Counter1 Counter Register Low byte, ar taip pat galiu padaryt ir su mega168 includu ar cia kazkokia nesamone? Rezultate man reikia tureti Timer1 counterio reiksme nuo 0 iki 65536.
Pateikiu mega8 ir mega168 includus:
Kodas: |
// CodeVisionAVR C Compiler
// (C) 1998-2004 Pavel Haiduc, HP InfoTech S.R.L.
// I/O registers definitions for the ATmega8
#ifndef _MEGA8_INCLUDED_
#define _MEGA8_INCLUDED_
#pragma used+
sfrb TWBR=0;
sfrb TWSR=1;
sfrb TWAR=2;
sfrb TWDR=3;
sfrb ADCL=4;
sfrb ADCH=5;
sfrw ADCW=4; // 16 bit access
sfrb ADCSRA=6;
sfrb ADMUX=7;
sfrb ACSR=8;
sfrb UBRRL=9;
sfrb UCSRB=0xa;
sfrb UCSRA=0xb;
sfrb UDR=0xc;
sfrb SPCR=0xd;
sfrb SPSR=0xe;
sfrb SPDR=0xf;
sfrb PIND=0x10;
sfrb DDRD=0x11;
sfrb PORTD=0x12;
sfrb PINC=0x13;
sfrb DDRC=0x14;
sfrb PORTC=0x15;
sfrb PINB=0x16;
sfrb DDRB=0x17;
sfrb PORTB=0x18;
sfrb EECR=0x1c;
sfrb EEDR=0x1d;
sfrb EEARL=0x1e;
sfrb EEARH=0x1f;
sfrw EEAR=0x1e; // 16 bit access
sfrb UBRRH=0x20;
sfrb UCSRC=0X20;
sfrb WDTCR=0x21;
sfrb ASSR=0x22;
sfrb OCR2=0x23;
sfrb TCNT2=0x24;
sfrb TCCR2=0x25;
sfrb ICR1L=0x26;
sfrb ICR1H=0x27;
sfrw ICR1=0x26; // 16 bit access
sfrb OCR1BL=0x28;
sfrb OCR1BH=0x29;
sfrw OCR1B=0x28; // 16 bit access
sfrb OCR1AL=0x2a;
sfrb OCR1AH=0x2b;
sfrw OCR1A=0x2a; // 16 bit access
sfrb TCNT1L=0x2c;
sfrb TCNT1H=0x2d;
sfrw TCNT1=0x2c; // 16 bit access
sfrb TCCR1B=0x2e;
sfrb TCCR1A=0x2f;
sfrb SFIOR=0x30;
sfrb OSCCAL=0x31;
sfrb TCNT0=0x32;
sfrb TCCR0=0x33;
sfrb MCUCSR=0x34;
sfrb MCUCR=0x35;
sfrb TWCR=0x36;
sfrb SPMCR=0x37;
sfrb TIFR=0x38;
sfrb TIMSK=0x39;
sfrb GIFR=0x3a;
sfrb GICR=0x3b;
sfrb SPL=0x3d;
sfrb SPH=0x3e;
sfrb SREG=0x3f;
#pragma used-
// Interrupt vectors definitions
#define EXT_INT0 2
#define EXT_INT1 3
#define TIM2_COMP 4
#define TIM2_OVF 5
#define TIM1_CAPT 6
#define TIM1_COMPA 7
#define TIM1_COMPB 8
#define TIM1_OVF 9
#define TIM0_OVF 10
#define SPI_STC 11
#define USART_RXC 12
#define USART_DRE 13
#define USART_TXC 14
#define ADC_INT 15
#define EE_RDY 16
#define ANA_COMP 17
#define TWI 18
#define SPM_READY 19
#endif
|
Kodas: |
// CodeVisionAVR C Compiler
// (C) 1998-2004 Pavel Haiduc, HP InfoTech S.R.L.
// I/O registers definitions for the ATmega168(V)
#ifndef _MEGA168_INCLUDED_
#define _MEGA168_INCLUDED_
#pragma used+
sfrb PINB=3;
sfrb DDRB=4;
sfrb PORTB=5;
sfrb PINC=6;
sfrb DDRC=7;
sfrb PORTC=8;
sfrb PIND=9;
sfrb DDRD=0xa;
sfrb PORTD=0xb;
sfrb TIFR0=0x15;
sfrb TIFR1=0x16;
sfrb TIFR2=0x17;
sfrb PCIFR=0x1b;
sfrb EIFR=0x1c;
sfrb EIMSK=0x1d;
sfrb GPIOR0=0x1e;
sfrb EECR=0x1f;
sfrb EEDR=0x20;
sfrb EEARL=0x21;
sfrb EEARH=0x22;
sfrw EEAR=0x21; // 16 bit access
sfrb GTCCR=0x23;
sfrb TCCR0A=0x24;
sfrb TCCR0B=0x25;
sfrb TCNT0=0x26;
sfrb OCR0A=0x27;
sfrb OCR0B=0x28;
sfrb GPIOR1=0x2a;
sfrb GPIOR2=0x2b;
sfrb SPCR=0x2c;
sfrb SPSR=0x2d;
sfrb SPDR=0x2e;
sfrb ACSR=0x30;
sfrb MONDR=0x31;
sfrb SMCR=0x33;
sfrb MCUSR=0x34;
sfrb MCUCR=0x35;
sfrb SPMCSR=0x37;
sfrb SPL=0x3d;
sfrb SPH=0x3e;
sfrb SREG=0x3f;
#pragma used-
#define WDTCSR (*(unsigned char *) 0x60)
#define CLKPR (*(unsigned char *) 0x61)
#define PRR (*(unsigned char *) 0x64)
#define OSCCAL (*(unsigned char *) 0x66)
#define PCICR (*(unsigned char *) 0x68)
#define EICRA (*(unsigned char *) 0x69)
#define PCMSK0 (*(unsigned char *) 0x6b)
#define PCMSK1 (*(unsigned char *) 0x6c)
#define PCMSK2 (*(unsigned char *) 0x6d)
#define TIMSK0 (*(unsigned char *) 0x6e)
#define TIMSK1 (*(unsigned char *) 0x6f)
#define TIMSK2 (*(unsigned char *) 0x70)
#define ADCL (*(unsigned char *) 0x78)
#define ADCH (*(unsigned char *) 0x79)
#define ADCW (*(unsigned int *) 0x78) // 16 bit access
#define ADCSRA (*(unsigned char *) 0x7a)
#define ADCSRB (*(unsigned char *) 0x7b)
#define ADMUX (*(unsigned char *) 0x7c)
#define DIDR0 (*(unsigned char *) 0x7e)
#define DIDR1 (*(unsigned char *) 0x7f)
#define TCCR1A (*(unsigned char *) 0x80)
#define TCCR1B (*(unsigned char *) 0x81)
#define TCCR1C (*(unsigned char *) 0x82)
#define TCNT1L (*(unsigned char *) 0x84)
#define TCNT1H (*(unsigned char *) 0x85)
#define ICR1L (*(unsigned char *) 0x86)
#define ICR1H (*(unsigned char *) 0x87)
#define OCR1AL (*(unsigned char *) 0x88)
#define OCR1AH (*(unsigned char *) 0x89)
#define OCR1BL (*(unsigned char *) 0x8a)
#define OCR1BH (*(unsigned char *) 0x8b)
#define TCCR2A (*(unsigned char *) 0xb0)
#define TCCR2B (*(unsigned char *) 0xb1)
#define TCNT2 (*(unsigned char *) 0xb2)
#define OCR2A (*(unsigned char *) 0xb3)
#define OCR2B (*(unsigned char *) 0xb4)
#define ASSR (*(unsigned char *) 0xb6)
#define TWBR (*(unsigned char *) 0xb8)
#define TWSR (*(unsigned char *) 0xb9)
#define TWAR (*(unsigned char *) 0xba)
#define TWDR (*(unsigned char *) 0xbb)
#define TWCR (*(unsigned char *) 0xbc)
#define TWAMR (*(unsigned char *) 0xbd)
#define UCSR0A (*(unsigned char *) 0xc0)
#define UCSR0B (*(unsigned char *) 0xc1)
#define UCSR0C (*(unsigned char *) 0xc2)
#define UBRR0L (*(unsigned char *) 0xc4)
#define UBRR0H (*(unsigned char *) 0xc5)
#define UDR0 (*(unsigned char *) 0xc6)
// Interrupt vectors definitions
#define EXT_INT0 2
#define EXT_INT1 3
#define PCINT0 4
#define PCINT1 5
#define PCINT2 6
#define WDT 7
#define TIM2_COMPA 8
#define TIM2_COMPB 9
#define TIM2_OVF 10
#define TIM1_CAPT 11
#define TIM1_COMPA 12
#define TIM1_COMPB 13
#define TIM1_OVF 14
#define TIM0_COMPA 15
#define TIM0_COMPB 16
#define TIM0_OVF 17
#define SPI_STC 18
#define USART_RXC 19
#define USART_DRE 20
#define USART_TXC 21
#define ADC_INT 22
#define EE_RDY 23
#define ANA_COMP 24
#define TWI 25
#define SPM_READY 26
#endif
|
|
|
|
|
|
|
|
ATMEGA taimerio reiksme TCNT1. |
Parašytas: 2010 12 03, 10:50 |
|
|
|
evvaldis rašo: |
...atmega8 include TCNT1 bei TCNT1L priskirta 0x2c reiksmei, kas pagal datasheeta reiskia Timer/Counter1 Counter Register Low byte, ar taip pat galiu padaryt ir su mega168 includu ar cia kazkokia nesamone? |
Atkreipk demesi, kad atmega168 TCNT1 adresas ne 2c, o 85. |
|
|
|
|
|
|
ATMEGA taimerio reiksme TCNT1. |
Parašytas: 2010 12 07, 00:08 |
|
|
|
xoom rašo: |
Kodas: |
#define TCNT1 = (TCNTH<<8)|TCNTL |
idomu taip netiktu ? |
define`e nereikia naudoti lygybės (jeigu C kalba) ir jeigu vykdomas nors koks nors veiksmas (šiuo atveju shift ir loginis OR) būtina apskliausti, nes paskui bus problemų su veiksmų atlikimo tvarka. Be to << turi aukštesnį prioritetą už | todėl tie pirmieji skliaustai nereikalingi. Galutinis kodas atrodytų taip:
Kodas: |
#define TCNT1 (TCNT1H << 8 | TCNT1L)
|
TCNT1H ir TCNT1L registrai turi būti teisingai uždefine`ti. |
|
_________________ nepamirškit, klysti žmogiška
privatas - privatiems klausimams
arch linux |
|
|
|
|
|
ATMEGA taimerio reiksme TCNT1. |
Parašytas: 2010 12 07, 16:21 |
|
|
|
bachurelis rašo: |
evvaldis rašo: |
...atmega8 include TCNT1 bei TCNT1L priskirta 0x2c reiksmei, kas pagal datasheeta reiskia Timer/Counter1 Counter Register Low byte, ar taip pat galiu padaryt ir su mega168 includu ar cia kazkokia nesamone? |
Atkreipk demesi, kad atmega168 TCNT1 adresas ne 2c, o 85. |
suprantu kas bandoma pasakyt, bet ne 85, m168 TCNT1 adreso neturi isvis, 85 yra TCNT1H.
p.s.
Kodas: |
#define TCNT1 (TCNT1H << 8 | TCNT1L) |
ismeta "shift result will be 0"
EDIT!!!:
Kadangi M8 include TCNT1 priskiriama TCNT1L, tai panasiai padariau ir M168 include.
Kodas: |
#define TCNT1L (*(unsigned char *) 0x84)
#define TCNT1H (*(unsigned char *) 0x85)
#define TCNT1 (*(unsigned int *) 0x84) //mano dadeta eilute |
Padariau pora testuku tai tvarkingai gaunu TCNT1 reiksmes 0-65536, taip kaip ir noriu. Gal kas pakomentuos ar taip galim? |
|
|
|
|
|
|
Google paieška forume |
|
|
Naujos temos forume |
|
|
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 |
|
KCD2 Mods
Installing KCD 2 Mods,
KCD 2 Guides,
KCD 2 Cheats |
|
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 Wiki
GTA 6 Map,
GTA 6 Characters,
GTA 6 News |
|
FS25 Mods
Farming Simulator 25 Mods,
FS25 Maps |
|
ATS Trailers
American Truck Simulator Mods,
ATS Trucks,
ATS Maps |
|
|
|