Показано с 1 по 5 из 5
  1. #1
    Местный
    Регистрация
    01.09.2009
    Возраст
    40
    Сообщений
    110
    Вес репутации
    203

    По умолчанию Помогите разобраться или аналог ATTINY15

    Добрый вечер
    Помогите разобраться, дело в том что я сваял блок питания с управлением по микроконтроллеру ATTINY15, так вот все бы нечего, если бы не устаревшая микросхема которую некак немогу найти в инете в наличии!
    Так к чему это я Порывшись в инете нашел аналог точнее следующее поколение этого контроллера ATTINY25, вопрос только в том насколько он аналогичен с ATTINY15 нарыл вот такой мануал

    Я конечно неочень бум-бум по инглишу но понял что вроде как сушествует какой то режим совместимости с ATTINY15

    PS Автор БП yurich38 Вот его тема http://www.pccar.ru/showthread.php?t=9254

  2. #2
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,379
    Вес репутации
    10

    По умолчанию Re: Помогите разобраться или аналог ATTINY15

    ДУмаю что нужно автору поправить исходник под доступный контроллер или попросить у него обнародовать этот исходник.

  3. #3
    Местный
    Регистрация
    01.09.2009
    Возраст
    40
    Сообщений
    110
    Вес репутации
    203

    По умолчанию Re: Помогите разобраться или аналог ATTINY15

    Цитата Сообщение от Chip Посмотреть сообщение
    ДУмаю что нужно автору поправить исходник под доступный контроллер или попросить у него обнародовать этот исходник.
    А это не исходный код?

    //----------------------------------------------------------------------------------------------
    // Программа управления блоком питания для EeeCarPc. версия 2
    // Тестировано на Tiny15
    //
    // © Bunin.Dev, 2009
    //
    // Лицензия GPL
    // Данная программа является свободным программным обеспечением.
    // Вы вправе распространять ее и/или модифицировать в соответствии с условиями версии 2
    // либо по вашему выбору с условиями более поздней версии Стандартной Общественной Лицензии GNU,
    // опубликованной Free Software Foundation.
    // http://www.gnu.org/copyleft/gpl.html
    //
    //----------------------------------------------------------------------------------------------


    //
    // Индикация лампы "Режим"
    // Отключена - Комп выключен
    // Мигает 1 раз в сек - переходный режим, начат процесс включения/отключения
    // Включена - Комп включен
    // Мигает "Длинный-Короткий" - режим сбоя, компьютер отключтился самостоятельно.
    //

    .include "TN15DEF.INC" ; include chip definition
    ;------------------------------
    .def mig =r26 // всякая всячина
    .def tmp =r28
    .def temp1=r30
    .def temp2=r31

    .equ CalibrateValue = 0x3F

    // Состояние системы
    .equ ON_POCESS=1 // процесс вкл
    .equ ON=2 // вкл
    .equ OFF_POCESS=3
    .equ OFF=4 // соответственно выкл
    .equ SYSTEM_FAILURE=10 // и сбой.


    // преднастройки.. примерно в секундах
    .equ PowerDownDelay = 35; // время удержания питания 30сек
    .equ initBeforeOFFDelay = 150; // время до отключения 150сек
    .equ initBeforeOFFDelay_Multipler = 6; // множитель 6 .=> 150сек*6 = 900сек = 15мин

    .equ initBeforeStartDelay = 10; // время до включения 10сек.
    .equ initButtonDelay = 2; // задержка кнопки 2сек
    .equ initAfterStartDelay = 50; // задержка после включения 50сек время нужное на старт винде.
    .equ initPC_OFFCritical_Time = 20; // сколько ждать отключения..
    .equ initPC_ONCritical_Time = 20;


    // переменные
    .def PowerLife=r16; // сщетчик отключения питания
    .def PC_State=r17; // состояние системы

    .def PC_OFF_ON_Time=r18; // сщетчик времени

    .def BeforeStartDelay_Multipler=r19; // Множитель задержки перед стартом
    .def BeforeStartDelay=r20; // задержка перед стартом

    .def ButtonDelay=r21; // задержка нажатия кнопки
    .def AfterStartDelay=r22; // задержка после нажатия кнопки
    .def Waiting=r23; // бит ожидания

    .def Timer_step=r24; // делитель прерывания таймера.
    .def PC_Life_Time=r25; // сщетчик времени изменения PC_Life_State

    .def PC_on_signal=r27; // сигнал РС жив



    .MACRO WAIT ; Макрос ожидания "нуля" в переменной, для задержек
    ;subi @1,low(@0)
    ;sbci @2,high(@0)

    tst @0
    breq L88363
    dec @0
    rjmp return
    L88363:
    .ENDMACRO ; End macro definition


    ;------------------------------
    rjmp RESET ; Reset Handle
    rjmp INT0VECT ; External Interrupt0
    rjmp NOVECT ; Pin change Interrupt
    rjmp NOVECT ; Timer/Counter1 Compare Match A ATTiny15
    rjmp NOVECT ; Overflow1 Interrupt ATTiny15
    rjmp OVF0VECT ; Overflow0 Interrupt
    rjmp NOVECT ; EEPROM ready Interrupt ATTiny12 ATTiny15 (Analog Comparator Interrupt Vector Address ATTiny11)
    rjmp NOVECT ; Analog Comparator Interrupt ATTiny12 ATTiny15
    rjmp NOVECT ; ADC conversion complete ATTiny15
    ;------------------------------
    RESET:

    ldi temp1, CalibrateValue
    out EEAR, temp1
    sbi EECR, 0
    in temp1, EEDR
    out OSCCAL, temp1


    ; init timer
    ldi temp1, (1<<CS02)|(1<<CS00) ; enable timer, CLK/1024
    out TCCR0, temp1
    ldi temp1, (1<<TOIE0) ; enable Timer0 Overflow int
    out TIMSK, temp1
    ; init int0
    ; ldi temp1, (1<<INT0) ; enable int0
    ; out GIMSK, temp1
    ; ldi temp1, (1<<ISC00) ; int0 at change
    ; out MCUCR, temp1
    ; init ports
    ldi temp1, (1<<PINB0)|(1<<PINB1)|(1<<PINB3) ; 0 - output pin
    out DDRB, temp1
    ; clear values

    ldi PowerLife, 0
    ldi PC_State, OFF
    ldi PC_OFF_ON_Time, 0
    ldi BeforeStartDelay_Multipler, initBeforeOFFDelay_Multipler
    ldi BeforeStartDelay, initBeforeStartDelay
    ldi ButtonDelay, initButtonDelay
    ldi AfterStartDelay, initAfterStartDelay
    ldi Waiting, 0
    ldi PC_Life_Time, 0
    ldi PC_on_signal, 1
    ldi Timer_step, 0

    cbi PORTB, PINB0
    cbi PORTB, PINB1
    ; enable interrupts
    sei
    ;------------------------------
    MAIN:
    rjmp MAIN
    ;------------------------------
    OVF0VECT:
    in temp1, SREG ; Store the Status register in reg temp1

    //обрабатываем только каждое 6-е перерывание, т.е. раз в 1 сек.
    WAIT Timer_step
    ldi Timer_step, 6


    in tmp, PINB // читаем состояние порта

    sbrc tmp, 2 // если bit 2 = 0 т.е. от компа сигнала НЕТ
    rjmp L9538
    ;{
    ldi PC_on_signal, 0;
    ;}
    rjmp L9539
    L9538:
    ;{
    ldi PC_on_signal, 1;
    ;}
    L9539:

    sbrc tmp, 4 // если bit 4 = 0 т.е. питания нет !ACC
    rjmp L9645
    ;{
    cpi PC_State, SYSTEM_FAILURE // если сбой
    brne L7794
    ;{
    ldi PC_State, OFF; // сбросить сбой
    ;}
    L7794:

    cpi PC_State, ON // если комп включен
    brne L4759
    ;{ // выключаем
    ldi PC_OFF_ON_Time, 0; // сброс параметров отключения
    ldi BeforeStartDelay, initBeforeOFFDelay;
    ldi BeforeStartDelay_Multipler, initBeforeOFFDelay_Multipler;
    ldi ButtonDelay, initButtonDelay;
    ldi AfterStartDelay, initAfterStartDelay;
    ldi Waiting, 0;
    ldi PC_State, OFF_POCESS; // переход в режим отключения
    rjmp return;
    ;}
    L4759:
    ; }
    L9645:

    cpi PowerLife, 0 // если время прошло, отрубает питание
    brne L4760
    ;{
    cbi PORTB, PINB1
    ;}
    rjmp L4760e
    L4760:;else
    ;{ // если нет
    sbi PORTB, PINB1 // питание включено
    cpi PC_State, OFF
    brne L4760e
    ;{
    dec PowerLife; // считаем время, если комп отключен.
    ;}
    ;}
    L4760e:

    // состояние сбоя -----------------------------------------------------------------------------

    cpi PC_State, SYSTEM_FAILURE
    brne L4163
    ;{
    ldi PowerLife, 0; // отключение питания

    // мигалка в режиме аварии
    cpi mig, 3
    breq L1874 // если mig != 0
    ;{
    inc mig
    sbi PORTB, PINB3 // погастиь светодиод
    rjmp l1873
    ;}
    L1874:
    ;else
    ;{
    ldi mig, 0
    cbi PORTB, PINB3 // зажечь светодиод
    ;}
    L1873:

    rjmp return;
    ;}
    L4163:

    ;in temp1, PINB // читаем состояние порта

    ;sbrs mig, 2 // если bit 3 = 1 т.е. питания нет
    // индикация режима вкл/выкл
    cpi PC_State, ON
    brne L4322
    ;{
    cbi PORTB, PINB3
    rjmp L1333 // зажечь светодиод
    ;}
    L4322:
    cpi PC_State, OFF
    brne L4312
    ;{
    sbi PORTB, PINB3 // погастиь светодиод
    rjmp L1333
    ;}
    L4312:
    // мигалка
    tst mig
    breq L1234 // если tmp != 0
    ;{
    ldi mig, 0
    sbi PORTB, PINB3 // погастиь светодиод
    rjmp l1333
    ;}
    L1234:
    ;else
    ;{
    ldi mig, 1
    cbi PORTB, PINB3 // зажечь светодиод
    ;}
    L1333:

    //-----------------------------------------------------------------------------
    in tmp, PINB // читаем состояние порта

    sbrs tmp, 4 // если bit 4 = 1 т.е. питание есть ACC
    rjmp L3545
    ;{
    ldi PowerLife, PowerDownDelay; // не отключать питание
    cpi PC_State, OFF // если комп отключен
    brne L3545
    ;{
    ldi PC_OFF_ON_Time, 0; // сброс параметров включеня
    ldi BeforeStartDelay, initBeforeStartDelay;
    ldi ButtonDelay, initButtonDelay;
    ldi AfterStartDelay, initAfterStartDelay;
    ldi Waiting, 0;
    ldi PC_State, ON_POCESS; // переход в режим включения
    rjmp return;
    ;}
    L3545:
    ;}

    //-----------------------------------------------------------------------------
    cpi PC_State, ON_POCESS // режим включения
    brne L4682
    ;{

    cpi Waiting, 0 // если кнопка еще не нажималлась
    brne L4892
    ;{
    sbrc tmp, 4 // если bit 4 = 0 т.е. питания нет !ACC то (при отключении питания)
    rjmp L4892
    ;{
    ldi PC_State, OFF; // отменяем запуск
    rjmp return;
    ;}
    ;}
    L4892:

    WAIT BeforeStartDelay // задержка перед

    cpi Waiting, 0
    brne L7921
    ;{
    sbi PORTB, PINB0 // нажатие кнопки
    ldi Waiting, 1; // запрет отмены запуска и повторного нажатия кнопки
    ;}
    L7921:
    WAIT ButtonDelay

    cbi PORTB, PINB0 // восстановление

    WAIT AfterStartDelay // задержка после

    inc PC_OFF_ON_Time; // считаем время

    cpi PC_on_signal, 1
    brne L1830
    ;{
    ldi PC_State, ON; // комп включен. процесс запуска завершен
    ;}
    rjmp L1830e
    L1830://else // комп не включился
    ;{
    cpi PC_OFF_ON_Time, initPC_ONCritical_Time // слишком долго
    brne L1830e
    ;{
    ; if(PC_OFF_ON_Time > initPC_ONCritical_Time)
    ldi PC_State, SYSTEM_FAILURE; // сбой!
    ;}
    L1830e:
    rjmp return;
    ;}
    L4682:


    //-----------------------------------------------------------------------------
    cpi PC_State, OFF_POCESS // режим выключения
    brne L0682
    ;{



    cpi Waiting, 0 // если кнопка еще не нажималлась
    brne L0892
    ;{
    cpi PC_on_signal, 0 // если нет сигнала
    brne L19839
    ;{
    ldi PC_State, OFF // отключение!
    ldi PowerLife, 0; // отключение питания
    ;}

    L19839:
    sbrs tmp, 4 // если bit 4 = 1 т.е. питания есть ACC то (при восстановлении питания)
    rjmp L0892
    ;{
    ldi PC_State, ON; // отменяем запуск
    rjmp return;
    ;}
    ;}
    L0892:

    WAIT BeforeStartDelay // задержка перед

    tst BeforeStartDelay_Multipler // множитель задержки
    breq L0963
    ;{
    dec BeforeStartDelay_Multipler
    ldi BeforeStartDelay, initBeforeOFFDelay; // повторяем задержку
    rjmp return
    ;}
    L0963:

    cpi Waiting, 0
    brne L0921
    ;{
    sbi PORTB, PINB0 // нажатие кнопки
    ldi Waiting, 1; // запрет отмены запуска и повторного нажатия кнопки
    ;}
    L0921:
    WAIT ButtonDelay

    cbi PORTB, PINB0 // восстановление

    WAIT AfterStartDelay // задержка после

    inc PC_OFF_ON_Time; // считаем время

    cpi PC_on_signal, 0 // выключился либо
    breq L9897
    cpi PC_OFF_ON_Time, initPC_OFFCritical_Time // слишком долго
    brne return
    ;{
    L9897:
    ; if(PC_OFF_ON_Time > initPC_ONCritical_Time)
    ldi PC_State, OFF; // сбой!
    ;}

    rjmp return;
    ;}
    L0682:

    //-----------------------------------------------------------------------------
    cpi PC_State, ON // состояние включен
    brne L4931
    ;{
    ldi PowerLife, PowerDownDelay; // поддерживаем питание
    cpi PC_on_signal, 0 // если нет сигнала
    brne L9830
    ;{
    ldi PC_State, SYSTEM_FAILURE // Сбой!
    ldi PowerLife, 0; // отключение питания
    ;}
    L9830:
    ;}
    L4931:

    return:

    ;//rjmp MAIN

    EX_OVF0VECT:
    out SREG, temp1 ; Restore Status register
    reti

    ;------------------------------
    INT0VECT:
    in temp2, SREG ; Store the Status register in reg temp2

    EX_INT0VECT:
    out SREG, temp2 ; Restore Status register
    reti
    ;------------------------------
    NOVECT:
    reti

  4. #4
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,379
    Вес репутации
    10

    По умолчанию Re: Помогите разобраться или аналог ATTINY15

    Он самый

  5. #5
    Местный
    Регистрация
    01.09.2009
    Возраст
    40
    Сообщений
    110
    Вес репутации
    203

    По умолчанию Re: Помогите разобраться или аналог ATTINY15

    Цитата Сообщение от Chip Посмотреть сообщение
    Он самый
    А тут есть специ кто шарит в этих кодах и может перекомпилировать под микросхему аттину25? Пробывал связаться с автором пока молчит =(

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •