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

FinSS

Members
  • Постов

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

  • Посещение

Электроника

  • Стаж в электронике
    Не связан с электроникой

Достижения FinSS

Новичок

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

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

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

0

Репутация

  1. int main (void) { ADC_init (); led_port_ini(); sei(); for(;;); if (PINB&(1<<PB4)) { while(1) { ON_LED(LED_GREEN); _delay_ms(500); OFF_LED(LED_GREEN); _delay_ms(500); if (ADCW>=850) break; } } ON_LED(LED_GREEN); } не работает(
  2. Переписал код как вы сказали, спасибо. Проверил в протеусе, вроде работает. Но как реализовать индикацию процесса зарядки я не разобрался. А по поводу промежуточного светодиода, у меня в павер банке стоит синий диод, поэтому и обозвал так, возможности его поменять нет. там 3 в одном красный синий зеленый
  3. Здравствуйте! Как реализовать индикацию процесса заряда АКБ когда он подключен к сети? Когда на ножку мк PB4 подается напряжение, зеленый светодиод должен мигать, когда АКБ зарядится, светодиод должен гореть. Я предполагаю что нужно задействовать таймер, но как это реализовать? Скидываю код самой индикации #define F_CPU 4000000L #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #define PORT_LED PORTB //назначение порта светодиодов #define DDR_LED DDRB //назначение регистра направления порта светодиодов #define LED_GREEN PB0 //красный светодиод - индикатор 1/4 максимального напряжения #define LED_BLUE PB1 //синий светодиод - индикатор 2/4 максимального напряжения #define LED_RED PB2 //зеленый светодиод - индикатор 3/4 максимального напряжения #define ON_LED(LED) (PORT_LED &= ~(1<<LED)) //макрос включения светодиода #define OFF_LED(LED) (PORT_LED |= (1<<LED)) //макрос выключения светодиода #define ADC_VREF_TYPE (1<<REFS2) | (1<<REFS1) | (0<<REFS0) // в качестве ИОН - внутренний источник #define ADC_inputPB3 (0<<MUX3) | (0<<MUX2 ) | (1<<MUX1) | (1<<MUX0) // вход АЦП - PB3 #define StartConvAdc ADCSRA |= (1<<ADSC) //---Инициализация портов светодиодов--------- void led_port_ini (void) { DDRB=(0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (1<<DDB2) | (1<<DDB1) | (1<<DDB0); // порты светодиодов на выход PORT_LED = (1<<LED_RED) | (1<<LED_BLUE) | (1<<LED_GREEN); // Светодиоды изначально погашены } //------------------------------------------- //----Инициализация АЦП--------------------- void ADC_init (void) { ADMUX |= ADC_inputPB3 | ADC_VREF_TYPE; // вход АЦП на PB3, в качестве ОН- внутреннее опорное напряжение 2.56 ADCSRA |= (1<<ADEN) | (1<<ADSC) | (1<<ADIE) // разрешаем преобразование, запускаем его, разрешаем прерывание от АЦП | (0<<ADPS2) | (1<<ADPS1) | (1<<ADPS0); // тактовую частоту делим на 8 - получаем частоту преобразования 125 кГц } //------------------------------------------- ISR (ADC_vect) { unsigned int voltage_ADC; voltage_ADC = ADCW; if (!(PINB&(1 << PB4)) == 1) { if (voltage_ADC >=900) { ON_LED(LED_GREEN); OFF_LED(LED_BLUE); OFF_LED(LED_RED); } else if (voltage_ADC >= 770) { OFF_LED(LED_GREEN); ON_LED(LED_BLUE); OFF_LED(LED_RED); } else { OFF_LED(LED_GREEN); OFF_LED(LED_BLUE); ON_LED(LED_RED); } } else { OFF_LED(LED_GREEN); OFF_LED(LED_BLUE); OFF_LED(LED_RED); } ADCSRA |= (1<<ADSC); } int main (void) { ADC_init (); led_port_ini(); sei(); for(;;);//бесконечный цикл в ожидании прерывания по завершению преобразования АЦП }
×
×
  • Создать...