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

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

Members
  • Постов

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

  • Посещение

Сообщения, опубликованные Андрей Протаскин

  1. Здравствуйте! Кто-нибудь шарит в Arduino? Если кто и шарит, то пусть он мне нарисует схему где инфракрасный дальномер с 3 контактами, фоторезистор и светодиод и 2 резистора и отправьте мне! как здесь 

     

  2. Здравствуйте! Я тут написал код 

    //Atmega8
    //Укажем частоту
    #define F_CPU 8000000
    #include <avr/io.h>
    #include <util/delay.h>
    //Инициализируем библиотеку для работы с дисплеем
    #include "n5110.h"
    #include <stdlib.h>
    
    //Предварительные настройки
    void presets(){
    //Инициализируем дисплей
        Lcd_init();
    //Настройки АЦП
    //ADCSRA
    ADCSRA |= (1<<ADEN) //Задействовать АЦП
    | (1<<ADPS2) | (1<<ADPS2) | (1<<ADPS2) ; //Делитель 128 = 64 кГц
    
    //ADMUX	
    ADMUX |= (1<<REFS1)|(1<<REFS0); //Опорное напряжение 2.56 В внутреннее
    
    }
    
    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; 
    		case 2: set_admux |= ((0<<MUX3) | (0<<MUX2) | (1<<MUX1) | (0<<MUX0));break; 
    		
    		default:break;
    	}
    	ADMUX = set_admux;
    	int tmp = 0;
    	for (int i=0;i<40;i++)
    	{
    		ADCSRA |= (1<<ADSC); //Запуск преобразования
    		while ((ADCSRA &(1<<ADSC))); //Ожидание окончания преобразования
    	    tmp += ADC; //tmp = tmp + ADC;
    
    	}
       	return tmp/40;
    }
    
    
    int main(void)
    {
        presets();
        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*(3/2.56))/1023), 1);
    		//Градусы
    		Lcd_printf(0,2,FONT_1X,(((readADC(2)*2.56*100*(3.73/2.56))/1023)-273.15), 0);
    		Lcd_update();
    		_delay_ms(200);
        			
    		
        }
    }

    Собрал схему в Proteus , а АЦП (Вольтметр, амперметр и термометр) показывают 13.2, 1.3, -497, а должно показывать 23.4, 2.0, 95 Почему так?

    GccApplication7.atsln n5110.c n5110.h GccApplication7.hex New Project.pdsprj

  3. Пробовал - всё равно в Proteus преобразователь показывает 0.0.

    Вот код 

    //Atmega8
    //Укажем частоту
    #define F_CPU 8000000
    #include <avr/io.h>
    #include <util/delay.h>
    //Инициализируем библиотеку для работы с дисплеем
    #include "n5110.h"
    #include <stdlib.h>
    
    //Предварительные настройки
    void presets(){
    //Инициализируем дисплей
        Lcd_init();
    //Настройки АЦП
    //ADCSRA
    ADCSRA |= (1<<ADEN) //Задействовать АЦП
    | (1<<ADPS2) | (1<<ADPS2) | (1<<ADPS2) ; //Делитель 128 = 64 кГц
    
    //ADMUX	
    ADMUX |= (1<<REFS1)|(1<<REFS0); //Опорное напряжение 2.56 В внутреннее
    //| (0<<MUX3) | (0<<MUX2) | (0<<MUX1) | (1<<MUX0) //Выбор вывода
    }
    
    int readADC(unsigned int ch){
    	unsigned char set_admux = ADMUX;
    	set_admux &= ~((1<<MUX3) | (0<<MUX2) | (1<<MUX1) | (0<<MUX0));
    	switch(ch)
    	{
    	    case 1: set_admux |= ((0<<MUX3) | (0<<MUX2) | (0<<MUX1) | (1<<MUX0));break; 
    		default:break;
    	}
    	ADMUX = set_admux
    	;_delay_ms(10);
    	int tmp = 0;
    	for (int i=0;i<40;i++)
    	{
    		ADCSRA |= (1<<ADSC); //Запуск преобразования
    		while ((ADCSRA &(1<<ADSC))); //Ожидание окончания преобразования
    		ADMUX&=0xF0;
    		ADC +=tmp; //tmp = tmp + ADC;
    	}
       	return tmp/40;
    }
    
    
    int main(void)
    {
        presets();
        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)*0.02935)), 1);
    		Lcd_update();
    		_delay_ms(200);
        			
    		
        }
    }
    

     

    GccApplication7.atsln n5110.c n5110.h New Project.pdsprj

  4. Здравствуйте! Почему когда я написал вот такой код 

    //Atmega8
    //Укажем частоту
    #define F_CPU 8000000
    #include <avr/io.h>
    #include <util/delay.h>
    //Инициализируем библиотеку для работы с дисплеем
    #include "n5110.h"
    #include <stdlib.h>
    
    //Предварительные настройки
    void presets(){
    //Инициализируем дисплей
        Lcd_init();
    //Настройки АЦП
    //ADCSRA
    ADCSRA |= (1<<ADEN) //Задействовать АЦП
    | (1<<ADPS2) | (1<<ADPS2) | (1<<ADPS2) ; //Делитель 128 = 64 кГц
    
    //ADMUX	
    ADMUX |= (1<<REFS1)|(1<<REFS0); //Опорное напряжение 2.56 В внутреннее
    //| (0<<MUX3) | (0<<MUX2) | (0<<MUX1) | (1<<MUX0) //Выбор вывода
    }
    
    int readADC(unsigned int ch){
    	unsigned char set_admux = ADMUX;
    	set_admux &= ~((1<<MUX3) | (0<<MUX2) | (1<<MUX1) | (0<<MUX0));
    	switch(ch)
    	{
    	    case 1: set_admux |= ((0<<MUX3) | (0<<MUX2) | (0<<MUX1) | (1<<MUX0));break; 
    		default:break;
    	}
    	ADMUX = set_admux
    	;_delay_ms(10);
    	int tmp = 0;
    	for (int i=0;i<40;i++)
    	{
    		ADCSRA |= (1<<ADSC); //Запуск преобразования
    		while ((ADCSRA &(1<<ADSC))); //Ожидание окончания преобразования
    		ADC +=tmp; //tmp = tmp + ADC;
    	}
       	return tmp/40;
    }
    
    
    int main(void)
    {
        presets();
        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)*0.02935)), 1);
    		Lcd_update();
    		_delay_ms(200);
        			
    		
        }
    }

    набросал схему в Proteus - АЦП показывает 0.0, почему так?

         

    n5110.c n5110.h New Project.pdsprj GccApplication7.atsln

  5. Здравствуйте! Подскажите мне пожалуйста, как собрать микросхему АЦП в Proteus? Я тут написал код 

    //Atmega8
    //Укажем частоту
    #define F_CPU 8000000
    #include <avr/io.h>
    #include <util/delay.h>
    //Инициализируем библиотеку для работы с дисплеем
    #include "n5110.h"
    #include <stdlib.h>
    
    //Предварительные настройки
    void presets(){
    //Инициализируем дисплей
        Lcd_init();
    //Настройки АЦП
    //ADCSRA
    ADCSRA |= (1<<ADEN) //Задействовать АЦП
    | (1<<ADPS2) | (1<<ADPS2) | (1<<ADPS2) ; //Делитель 128 = 64 кГц
    
    //ADMUX	
    ADMUX |= (1<<REFS1)|(1<<REFS0) //Опорное напряжение 2.56 В внутреннее
    | (0<<MUX3) | (0<<MUX2) | (0<<MUX1) | (1<<MUX0); //Выбор вывода
    }
    
    int readADC(){
        ADCSRA |= (1<<ADCSRA); //Запуск преобразования	
    	while ((ADCSRA &(1<<ADSC))); //Ожидание окончания преобразования
    	return ADC;
    }
    
    
    int main(void)
    {
        presets();
        while (1) 
        {
    		Lcd_clear();
    		char buff[5];
    		itoa(readADC(), buff, 10);
    		Lcd_print(0,1, FONT_1X, (unsigned char*)buff);
    		Lcd_update();
    		_delay_ms(200);
    		
    		
    		
        }
    }

     набросал схему и почему-то у меня показывает 0

    New Project.pdsprj GccApplication7.hex n5110.c n5110.h

  6. Здравствуйте! Я просто спросить, почему программу для микронтроллеров надо писать с точностью до символов, и скелет программы, конфигурацию, и функции надо писать на английском языке, а не на русском, и в конце программы ставится точка с запятой? 

  7. @ARV  Да! Я понял! Оказывается в видеоуроке про LCD дисплей рассказывается всё неправильно! Там использовалась нестандартная библиотека в Proteus, а надо использовать стандартную, и код написали неправильно! Понаберут непрофессионалов типа меня, и тут хрен поймешь! 

  8. @ARV Во-первых - да, а во-вторых грешно смеяться над больными людьми! Я аутист, у меня проблемы с корой головного мозга, я на домашнем обучении, не люблю большое скопление людей!

    @ARV я просто хочу, чтобы вы мне разжевали мне информацию по LCD дисплею

×
×
  • Создать...