|
Не работает с float, mega16 |
|
|
|
 |
Ответов
|
Apr 28 2006, 04:00
|

Частый гость
 
Группа: Новичок
Сообщений: 85
Регистрация: 13-01-05
Из: Москва
Пользователь №: 1 922

|
Код следующий:
//Mega16 //iar EW AVR 4.12
#include <iom16.h> #include <ioavr.h> #include <inavr.h> #include <stdlib.h> #include <math.h>
#define NUM_IZM 128
//#define _N0 0x03 //#define _N1 0x9f //#define _N2 0x25 //#define _N3 0x0d //#define _N4 0x99 //#define _N5 0x49 //#define _N6 0x41 //#define _N7 0x1f //#define _N8 0x01 //#define _N9 0x09
// 1-st digit 0x10 // 2-nd digit 0x08 // 3-rd digit 0x04 // 4-th digit 0x02 // 5-th digit 0x01
//fuses 8MHz CKSEL3=0 CKSEL2=1 CKSEL1=0 CKSEL0=0 // SUT1=1 SUT0=0 65ms startup
__flash unsigned char Nums[]={0x03, 0x9f, 0x25, 0x0d, 0x99, 0x49, 0x41, 0x1f, 0x01, 0x09};
#pragma vector = TIMER2_OVF_vect __interrupt void TIMER2_OVF(void);
#pragma vector = TIMER2_COMP_vect __interrupt void TIMER2_COMP(void);
unsigned char print[5]; unsigned char num=0, di=0; unsigned int i=0; unsigned int temp=0, gc=0; //float temperature=0.0;
void init(void); void long2char(unsigned int); unsigned int ADCread(void);
//long int ADCread(void);
void main(void) { init(); di=0; while(1) { temp = ADCread(); gc=(unsigned int)((log(((temp*0.0025)-0.1438)/4.959))/0.029); long2char(gc); } }
unsigned int ADCread(void) { unsigned long ADC=0, tempADC=0; unsigned char i=0; while (i < NUM_IZM) // Усреднение по NUM_IZM замерам { // VCC ref and ADCx ADMUX = (1<<REFS1) | (1<<REFS0) | (0<<ADLAR) | (0<<MUX4) | (0<<MUX3) | (0<<MUX2) | (0<<MUX1) | (0<<MUX0); //Начинаем одиночное преобразование // ADLAR=0 -> ADCH ------98 ADCL 76543210 ADCSRA |= (1<<ADSC); while (ADCSRA & (1<<ADSC)); // ADCSRA |= (1<<ADSC); // ADLAR=1 -> ADCH 98765432 ADCL 10------ // while(!(ADCSRA & (1 << ADIF))); //Ждем окончания преобразования ADCSRA |= (1<<ADIF); //Сбрасываем флаг tempADC = ADCL; tempADC += (ADCH<<8); ADC +=tempADC; i++; } ADC /= NUM_IZM; return ((unsigned int)ADC); }
#pragma vector = TIMER2_OVF_vect __interrupt void TIMER2_OVF(void) { di++; if (di>=5) { di=0; // i++; } }
#pragma vector = TIMER2_COMP_vect __interrupt void TIMER2_COMP(void) { PORTB = 0x1f^(1<<di); PORTC = Nums[print[di]]; }
void long2char(unsigned int input_num) { unsigned char ni=5; while (ni>0) { print[ni-1]=div(input_num,10).rem; input_num /=10; ni--; } }
#pragma inline=forced void init (void) { //port setup using portb & portc
PORTC = (1<<PORTC7) | (1<<PORTC6) | (1<<PORTC5) | (1<<PORTC4) | (1<<PORTC3) | (1<<PORTC2) | (1<<PORTC1) | (1<<PORTC0); DDRC = (1<<DDC7) | (1<<DDC6) | (1<<DDC5) | (1<<DDC4) | (1<<DDC3) | (1<<DDC2) | (1<<DDC1) | (1<<DDC0); PORTB = (1<<PORTB4) | (1<<PORTB3) | (1<<PORTB2) | (1<<PORTB1) | (1<<PORTB0); DDRB = (1<<DDB4) | (1<<DDB3) | (1<<DDB2) | (1<<DDB1) | (1<<DDB0);
TCCR2 = (0<<FOC2) | (0<<WGM20) | (0<<COM21) | (0<<COM20) | (0<<WGM21) | (0<<CS22) | (0<<CS21) | (1<<CS20); TIFR = (1<<OCF2) | (1<<TOV2); //clear TIMSK = (1<<OCIE2) | (1<<TOIE2); //enable interrupt
TCNT2 = 0; OCR2 = 0x7f;
//ADC init //internal 2.56v with external capacitor at AREF pin //ADC0 single ended ADMUX = (1<<REFS1) | (1<<REFS0) | (0<<ADLAR) | (0<<MUX4) | (0<<MUX3) | (0<<MUX2) | (0<<MUX1) | (0<<MUX0);
ADCSRA = (1<<ADEN) | (0<<ADSC) | (0<<ADATE) | (1<<ADIF) | (0<<ADIE) | (1<<ADPS2) | (1<<ADPS1) | (0<<ADPS0);
ADCSRA |= (1<<ADSC); while (ADCSRA & (1<<ADSC)); //wait for end conversion ADCSRA=ADCSRA; //clear ADCSRA __enable_interrupt();
}
|
|
|
|
Сообщений в этой теме
Serg_greS Не работает с float Apr 27 2006, 13:43 _artem_ code please ... Apr 27 2006, 14:00 Виктория ЦитатаX = -(log((0.0025*Y)/4.959)/0.029)
А также ... Apr 27 2006, 14:30 WHALE а симулятор что показывает? Apr 27 2006, 17:34 Old1 Цитата(Serg_greS @ Apr 27 2006, 16:43) ..... Apr 27 2006, 20:34 arttab float пробовал на меги8 - работает. только код сил... Apr 28 2006, 01:20 Serg_greS Логарифм натуральный, т.е. с основанием е Apr 28 2006, 04:35 Serg_greS и все равно что-то не то, даже если использовать: ... May 2 2006, 04:52 proba С по сушеству 16 битный язык.
советую каждое решен... May 2 2006, 06:50 vet Цитата(Serg_greS)а на float я стал грешить после т... May 2 2006, 06:51 Serg_greS в общем, помучал еще немного и выяснилось, что ... May 2 2006, 08:11 Serg_greS подскажите в чем проблема при вычислении, если вот... May 3 2006, 06:18 Serg_greS Подскажите почему не работает такая конструкция:
g... May 3 2006, 08:07 vet Цитата(Serg_greS @ May 3 2006, 12:07) Под... May 3 2006, 09:15 topkin gc - какой тип данных? May 3 2006, 10:03 Serg_greS 2 vet Цитатаgc=((float)temp*0.5);
так тоже не рабо... May 3 2006, 13:14 Old1 Цитата(Serg_greS @ May 3 2006, 16:14) даж... May 3 2006, 17:46 WHALE Имхо,что-то с выводом на ALC.У тебя динамическая и... May 3 2006, 16:26 Serg_greS 2 WHALE ЦитатаИмхо,что-то с выводом на ALC.У тебя ... May 4 2006, 04:03 otrog Цитата(Serg_greS @ May 4 2006, 08:03) Так... May 4 2006, 05:48 Old1 Цитата(Serg_greS @ May 4 2006, 07:03) 2 W... May 4 2006, 07:55 Serg_greS 2 Old1 ЦитатаЯ ради интереса запустил код в JTAGIC... May 4 2006, 10:59 Old1 Цитата(Serg_greS @ May 4 2006, 13:59) ...... May 4 2006, 19:50  Old1 2 Serg_greS
Цитата(Old1 @ May 4 2006, 22... May 5 2006, 07:26 Serg_greS ЦитатаВот выкладываю файл с прошивкой, и на всякий... May 5 2006, 08:40 Old1 Цитата(Serg_greS @ May 5 2006, 11:40) Цит... May 5 2006, 09:29 Serg_greS ЦитатаЧем прошиваете
прошиваю с помощью http://avr... May 5 2006, 12:47 Old1 Цитата(Serg_greS @ May 5 2006, 15:47) Цит... May 5 2006, 18:42 Serg_greS Цитатано только до тех пор пока в коде не появляют... May 6 2006, 03:58 Serg_greS Old1 огрОмный респект, все заработало. Сделал кло... May 11 2006, 08:32 Old1 Цитата(Serg_greS @ May 11 2006, 11:32) Ol... May 11 2006, 09:19
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|