Перейти к содержанию

NIckilanto

Members
  • Постов

    2
  • Зарегистрирован

  • Посещение

Информация

  • Город
    Уфа

Электроника

  • Стаж в электронике
    Менее года
  • Сфера радиоэлектроники
    Микроконтроллеры

Достижения NIckilanto

Новичок

Новичок (1/14)

  • Неделя на форуме
  • Месяц на форуме
  • Год на форуме

Последние значки

0

Репутация

  1. Видимо я совсем тупенький, спасибо большое!
  2. Есть такая задачка, сваять измеритель мощности на atmega32p. Первое время все шло гладко, вроде и схему сваял и код написал #define F_CPU 8000000L #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> //-------------------------------------------- unsigned int i; unsigned char R1=0, R2=0; //-------------------------------------------- void segchar (unsigned char seg) { switch(seg) { case 1: PORTD = 0b11111001; break; case 2: PORTD = 0b10100100; break; case 3: PORTD = 0b10110000; break; case 4: PORTD = 0b10011001; break; case 5: PORTD = 0b10010010; break; case 6: PORTD = 0b10000010; break; case 7: PORTD = 0b11111000; break; case 8: PORTD = 0b10000000; break; case 9: PORTD = 0b10010000; break; case 0: PORTD = 0b11000000; break; } } //-------------------------------------------- void timer_ini(void) { TCCR1B |= (1<<WGM12); OCR1AH = 0b00001111; //записываем в регистр число для сравнения OCR1AL = 0b01000010; TCCR1B |= (1<<CS11);//установим делитель. } //-------------------------------------------- unsigned char n_count=0; //-------------------------------------------- ISR (TIMER1_COMPA_vect) { if(n_count==0) {PORTB&=~(1<<PORTB0);PORTB|=(1<<PORTB1);segchar(R1);} if(n_count==1) {PORTB&=~(1<<PORTB1);PORTB|=(1<<PORTB0);segchar(R2);} n_count++; if (n_count>1) n_count=0; } //-------------------------------------------- void ledprint(unsigned int number) { R1 = number%10; R2 = number/10; } //-------------------------------------------- void ADC_Init(){ ADCSRA |= (1 << ADEN) // Включаем АЦП |(0 << ADPS1)|(0 << ADPS0); // устанавливаем пределитель преобразователя на 8 ADMUX=(1<<MUX0)|(0<<MUX1)|(0<<MUX2)|(0<<MUX3)|(1<<REFS0)|(0<<REFS1); } int main(void) { unsigned int u; ADC_Init(); timer_ini(); DDRD = 0xFF; DDRB = 0b00111111; PORTD = 0b11111111; PORTB = 0b0000000; i=0; sei(); ledprint(97); while(1) { unsigned int u, u_VCC; ADCSRA|=(1<<ADEN) //Включение АЦП |(1<<ADPS1)|(1<<ADPS0); // Предделитель преобразователя на 8 ADMUX|=(0<<MUX0)|(1<<MUX1)|(1<<MUX2)|(0<<MUX3)//Вход PC0 |(1<<REFS0)|(0<<REFS1); //AVcc является опорным напряжением ADCSRA |= (1 << ADSC); //Начинаем преобразование while ((ADCSRA&(1 << ADIF))== 0); //Ждем флага окончания преобразования u = (ADCL|ADCH << 8); // Считываем ADC if (u > -32767){ PORTD = 0b00000110; }else{ PORTD = 0b00111111; } /* switch(max) { case -1: PORTD = 0b00000110; break; case -2: PORTD = 0b01011011; break; case -3: PORTD = 0b10110000; break; case -4: PORTD = 0b10011001; break; case -5: PORTD = 0b10010010; break; case -6: PORTD = 0b10000010; break; case -7: PORTD = 0b11111000; break; case -8: PORTD = 0b10000000; break; case -9: PORTD = 0b10010000; break; case 0: PORTD = 0b00111111; break; case 1: PORTD = 0b00000110; break; case 2: PORTD = 0b01011011; break; case 3: PORTD = 0b10110000; break; case 4: PORTD = 0b10011001; break; case 5: PORTD = 0b10010010; break; case 6: PORTD = 0b10000010; break; case 7: PORTD = 0b11111000; break; case 8: PORTD = 0b10000000; break; case 9: PORTD = 0b10010000; break; };*/ /* PORTB = 0b11111110; PORTD = 0b00000110; _delay_ms(1); PORTB = 0b11111111; Центральный верхний PORTB = 0b11111101; PORTD = 0b01011011; _delay_ms(1); PORTB = 0b11111111; //Левый верхний PORTB = 0b11111011; PORTD = 0b01001111; _delay_ms(1); PORTB = 0b11111111; //Правый нижний PORTB = 0b11110111; PORTD = 0b01100110; _delay_ms(1); PORTB = 0b11111111; //Центральный нижний PORTB = 0b11101111; PORTD = 0b01101101; _delay_ms(1); PORTB = 0b11111111; //Левый нижний PORTB = 0b11011111; PORTD = 0b01111101; _delay_ms(1); PORTB = 0b11111111; */ } } только вот значение получаемое в "u" (в нее мы ADC получаем) равно -32768 вместо положенного диапазона от 100 до 600, может кто подскажет чего?
×
×
  • Создать...