Показать сообщение отдельно
Старый 25.01.2018, 00:33   #668
Alekssandr
Старший Пользователь
 
Регистрация: 11.08.2013
Возраст: 34
Регион: 86
Сообщений: 445
Alekssandr is a jewel in the roughAlekssandr is a jewel in the roughAlekssandr is a jewel in the rough
По умолчанию

Прошивка блока питания на ATTINY24 для платформы DIXOM-C12

Микроконтроллер работает от внутреннего генератора на частоте 1Мгц, прошивка занимает 752байта паймяти из доступных 2кБ, и 10 байт оперативки из доступных 128 байт. В общем ещё есть место для фантазий.

Прошивка очень простая, в принципе этого более чем достаточно для нормальной работы платы, все тайминги можно регулировать.

Так как счётчик тикает каждые 100мс, то 1 это 100мс, 10 это 1000мс т.е. 1 секунда и т.д.


PHP код:
#define F_CPU 1000000
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

#define POWER_33v      _BV(PB0)
#define TABLET_POWER_1 _BV(PB1)
#define TABLET_POWER_2 _BV(PB2)
#define POWER_5v       _BV(PA7)
#define BUZZER         _BV(PA6)
#define ACC            _BV(PA5)
#define OTG_MODE       _BV(PA4)
#define REMOT          _BV(PA3)
#define REMOT_OU       _BV(PA0)

unsigned long timerOFF   0;
unsigned long timerOn    0;
int adc_value 0;


int main(void)
{
            
DDRB |=  POWER_33v;        // OUTPUT
            
DDRB |=  TABLET_POWER_1;   // OUTPUT
            
DDRB |=  TABLET_POWER_2;   // OUTPUT
            
DDRA |=  POWER_5v;         // OUTPUT
            
DDRA |=  BUZZER;           // OUTPUT
            
DDRA |=  OTG_MODE;         // OUTPUT
            
DDRA |=  REMOT;            // OUTPUT
            
DDRA |=  REMOT_OU;         // OUTPUT            
               
ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS0);
            
ADMUX=0x05;

        
  while(
1){ 
               
              
ADCSRA |= (1<<ADSC);         //Запуск конвертации АЦП
              
while (ADCSRA & (1<<ADSC));  //Ждём завершение конвертации АЦП    
              
adc_value ADCW;            //Забираем значение АЦП

              
if (adc_value 200)
              {    
///////////////////////////////////////////////////ACC Выключен////////////////////////////////////////////////////
                
timerOn  =0;               //Обнуляем счётчик включения
                
if (timerOFF<=33000000){  //Если таймер выключения меньше 33 млн          
                 
timerOFF ++;             //То прибавляем 1 каждые 100мс
                
}
                
//              PORTA |=  BUZZER; 
                
if(timerOFF==1)       {  PORTA |=  BUZZER;             } //Включаем пищалку    
                
if(timerOFF==4)       {  PORTA &= ~BUZZER;             } //Отключаем пищалку    
                
if(timerOFF==100)     {  PORTA &= ~REMOT;              } //Отключаем питание REMOT
                
if(timerOFF==120)     {  PORTA &= ~REMOT_OU;         } //Отключаем питание REMOT2 OU (операционные усилители)
                
if(timerOFF==300)     {  PORTB &= ~POWER_33v;         } //Отключаем питание переферии 3.3v
                
if(timerOFF==300)     {  PORTA &= ~POWER_5v;         } //Отключаем питание USB HUB
                
if(timerOFF==200)     {  PORTA &= ~OTG_MODE;          } //перехватываем управление ОТГ у stm32                
                
if(timerOFF==2200)    {  PORTB &= ~TABLET_POWER_2;     } //Отключаем 2-ю фазу питания планшета
                
if(timerOFF==13000000){  PORTB &= ~TABLET_POWER_1;     } //через 2 недели отключаем полностью питание планшета
                            
               
}else {
///////////////////////////////////////////////////ACC Включён////////////////////////////////////////////////////
                 
timerOFF =0;         //Обнуляем счётчик таймера отключения
                 
if (timerOn<=100){   //Если таймер включения меньше 100
                      
timerOn++;      //То прибавляем 1 каждые 100мс
                 
}
                
//     PORTA &= ~BUZZER; 
                 
if(timerOn==1)       { PORTA |= BUZZER;             } //Включаем пищалку
                 
if(timerOn==4)       { PORTA &= ~BUZZER;             } //Отключаем пищалку                
                 
if(timerOn==20)      { PORTB |= TABLET_POWER_1;    } //Включаем 1-ю фазу питания планшета
                 
if(timerOn==20)      { PORTB |= TABLET_POWER_2;    } //Включаем 2-ю фазу питания планшета
                 
if(timerOn==20)      { PORTA |= POWER_5v;          } //Включаем питание USB HUB        
                 
if(timerOn==20)      { PORTB |= POWER_33v;         } //Включаем питание переферии 3.3v                 
                 
if(timerOn==20)      { PORTA |= OTG_MODE;          } //Отдаём управление режимом отг STM32
                 
if(timerOn==20)      { PORTA |= REMOT_OU;          } //Включаем питание операционных усилителей
                 
if(timerOn==60)      { PORTA |= REMOT;             } //Включаем питание REMOT                 
                                                
              

        
_delay_ms(100); //задержка 100мс для таймеров
        
} return (0);

Alekssandr вне форума   Ответить с цитированием