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

polych

Members
  • Постов

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

  • Посещение

Весь контент polych

  1. Здравствуйте! У меня возникла проблема с практикой 7 урока. Для начала решила сделать все в точности, как было показано в видео, чтобы понять вообще принцип, но при запуски модуляции в протеусе на дисплеи просто белый экран. Не могли бы вы посмотреть код, может где то есть ошибка. #define F_CPU 8000000 #include <avr/io.h> #include <util/delay.h> //Подключение библиотеки для работы с дисплем #include "n5110.h" #include <stdlib.h> //Предварительные настройик void preset() { //Инициализируем дисплей Lcd_init(); //Настройка АЦП //ADCRA ADCSRA |= (1<<ADEN)//Задействовать АЦП | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);// Делитель 128=64кГц //ADMUX ADMUX |= (1<<REFS1) | (1<<REFS0);//Опорное напряжение 2.56В внутренне // | (0<<MUX3)| (0<<MUX2)| (0<<MUX1)| (0<<MUX0);// выбор лапки ADC0 } int readADC(unsigned int ch) { unsigned char set_admux = ADMUX; set_admux &= ~((1<<MUX3)| (1<<MUX2)| (1<<MUX1)| (1<<MUX0)); switch(ch) { case 1: set_admux |= ((0<<MUX3) | (0<<MUX2) | (0<<MUX1) | (1<<MUX0));break; default: break; } ADMUX = set_admux; int tmp = 0; for(int i=0;i<32;i++) { ADCSRA |= (1<<ADSC); //Запуск преобразования while((ADCSRA &(1<<ADSC))); //Ожидание окончания преобразования tmp += ADC; } return tmp/32; } int main(void) { preset(); while(1) { Lcd_clear(); Lcd_printf(0,0,FONT_1X,((readADC(0)*2.56*(30/2.56))/1023),1); Lcd_printf(0,1,FONT_1X,((readADC(1)*2.56*(30/2.56))/1023),1); Lcd_update(); _delay_ms(200); } }
  2. polych

    Atmega 8

    Здравствуйте. У меня возникла проблема в прошивке микроконтроллера Atmega8. Задача заключается в том чтобы сравнивалось опорное на напряжение АЦП с подаваемым на вход АЦП напряжением и далее результат выводился на дисплей. У меня возникли сложности с настройкой АЦП, как я думаю оно находится в спящем режим так как когда я загружаю hex файл в Proteus и запускаю пошаговую отладку, то мои условия не выполняются и в переменной в которую я прописываю значение подаваемого напряжения постоянно находится значение опорного напряжения. Код пишу в Atmel Studio 6 на С Симуляцию делаю в Proteus Очень нужна помощь Спасибо! Примерный код в Atmel,не судите строго только начинаю изучать микроконтроллеры #define F_CPU 1000000UL #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> static volatile int u = 0; static volatile float v; int main(void) { DDRB=0xFF; PORTB=0x00; DDRC=0x00; PORTC=0xFF; //настройка АЦП// ADCSRA |=(1<<ADEN)//включение ацп |(1<<ADPS1)|(1<<ADPS0)|(1<<ADFR);//ADPS2-ADPS0-тактовая частота АЦП??? //ADCRA=0x83 ADMUX |= (0<<REFS1)|(1<<REFS0)//внешний ИОН |(0<<MUX0)|(0<<MUX1)|(0<<MUX2)|(0<<MUX3); //вход PC0 //ADMUX=0x00 while(1) {ADCSRA |=(1<<ADSC);//начинаем преобразование while ((ADCSRA&(1<<ADIF))==0);//ждём флага окончание преобразование _delay_ms(5); u=ADCW;// считываем ADC v = (float) u*0.0048828; if (v>=2.1){ PORTB=0x01; } else{ PORTB=0xFF; } _delay_ms(5); Также начальный проект в протеус, опять же не судите строго) micro.pdsprj
×
×
  • Создать...