Технический форум
Вернуться   Технический форум > Электроника, самоделки и техника > Форум по электронике > Микропроцессоры


Ответ
 
Опции темы Опции просмотра
Старый 08.02.2012, 22:52   #1 (permalink)
Weles
Лентяй
 
Аватар для Weles
 
Регистрация: 13.04.2009
Адрес: Тверь
Сообщений: 16,556
Записей в дневнике: 29
Сказал(а) спасибо: 15
Поблагодарили 81 раз(а) в 14 сообщениях
Репутация: 24915
По умолчанию Компилирование в HEX

Ребята, кто умеет компилировать, скомпилируйте пожалуйста в hex:
Код:
This program was produced by the
CodeWizardAVR V2.03.4 Standard
Automatic Program Generator
© Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project : 
Version : 
Date    : 06.08.2009
Author  : 
Company : 
Comments: 


Chip type           : ATtiny2313
Clock frequency     : 8,000000 MHz
Memory model        : Tiny
External RAM size   : 0
Data Stack size     : 32
*****************************************************/

#include <tiny2313.h>
#include <stdlib.h>
#include <math.h>
#include <delay.h>


unsigned char sred, sgreen, sblue;            //showing colors


int red, green, blue;                         //now colors
unsigned int tred, tgreen, tblue;             //tagert colors
int delta_red, delta_green, delta_blue;       //величина прибавки за шаг
unsigned int time = 1;                        //длительность шага


void delay(unsigned int delayt)               //задержка delay_ms() на вход принимает только константу( 
{
  while (delayt != 0)
  {
    delay_ms(1);
    delayt--;
  };
};


void main(void)
{

unsigned int temp1, temp2, temp3, temp4;

// Crystal Oscillator division factor: 1
//#pragma optsize-
//CLKPR=0x80;
//CLKPR=0x00;
//#ifdef _OPTIMIZE_SIZE_
//#pragma optsize+
//#endif

// Input/Output Ports initialization
// Port A initialization
// Func2=In Func1=In Func0=In 
// State2=T State1=T State0=T 
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=Out Func3=Out Func2=Out Func1=In Func0=In 
// State7=T State6=T State5=T State4=0 State3=0 State2=0 State1=T State0=T 
PORTB=0x00;
DDRB=0x1C;

// Port D initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 8000,000 kHz
// Mode: Fast PWM top=FFh
// OC0A output: Non-Inverted PWM
// OC0B output: Disconnected
TCCR0A=0x83;
TCCR0B=0x01;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 8000,000 kHz
// Mode: Fast PWM top=00FFh
// OC1A output: Non-Inv.
// OC1B output: Non-Inv.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0xA1;
TCCR1B=0x09;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;



// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// Interrupt on any change on pins PCINT0-7: Off
//GIMSK=0x00;
//MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;

srand(1);             //инициализируем рандомайзер этим значением


while (1)
{

    do 
    {
        tred = rand()&0xFF;
        tgreen = rand()&0xFF;
        tblue = rand()& 0xFF;
		
        temp1 = (abs(tred - tgreen));
        temp2 = (abs(tred - tblue));
        temp3 = (abs(tgreen - tblue));
    }
    while (( temp1 < 150 ) && (temp2 < 150) && (temp3 < 150));     //если все цвета будут примерно равные то будет белый что не интересно

	
    if (rand() < 13100)                                            //c вероятностью 0,4 (32767) вышибаем один цвет
    {
		do
        {
            temp4 = rand() & 0x000F ;
        }
        while ((temp4 == 0) || (temp4 > 3));
       
        if (temp4 == 1)                                            //не повезло красному
        {                                                          //гасим до 0 - 20% от исходного
           do
           {
			temp4 = rand() & 0x0FFF;
           }
           while ((temp4 == 0) || (temp4 > 3276));
          
           tred = ceil ((float) (temp4 / 32767) * tred);
        };
        
        if (temp4 == 2)
        {
          do
           {
             temp4 = rand() & 0x0FFF;
           }
          while ((temp4 == 0) || (temp4 > 3276));
          
          tgreen = ceil ((float) (temp4 / 32767) * tgreen);
        };
        
        if (temp4 == 3)
        {
          do
           {
             temp4 = rand() & 0x0FFF;
           }
          while ((temp4 == 0) || (temp4 > 3276));
          
          tblue = ceil ((float) (temp4 / 32767) * tblue);
        };
        
    };

    delta_red = (tred - sred); 
    delta_green = (tgreen - sgreen);
    delta_blue =  (tblue - sblue); 
  
  

    do 
    {
        sred=((red&0xFF00)/256);
        sgreen=((green&0xFF00)/256);  
        sblue=((blue&0xFF00)/256);
        
        if ((tred) != (sred))
          red = red + delta_red;
        
        if ((tgreen) != (sgreen))
          green = green + delta_green;
         
        if ((tblue) != (sblue))
          blue = blue + delta_blue;


        OCR1B = sred;
        OCR1A = sgreen;
        OCR0A = sblue;
    
        delay(time);
      
    }
    while ((tred != (sred)) || (tgreen != (sgreen)) || (tblue != (sblue))); 


    delay(time * 255);                                 //стремились к этому цвету, задержим его
    
    
    time = 1 + rand()&0x0F;                            // 1 до 16 варьируется задержка, числа подобраны экспериментально
                                                       //делаем после что бы включалось плавно и быстро
     
};   

}
Я не умею и вин-авр не знаю как скачать, и вообще ........
Weles вне форума   Ответить с цитированием
Старый 08.02.2012, 23:05   #2 (permalink)
Валерий
Member
 
Аватар для Валерий
 
Регистрация: 11.04.2007
Адрес: Санкт-Петербург
Сообщений: 40,320
Записей в дневнике: 73
Сказал(а) спасибо: 885
Поблагодарили 2,792 раз(а) в 431 сообщениях
Репутация: 186775
По умолчанию

А под какой микроконтроллер?
__________________
Пингвин птица гордая, пока не пнёшь - не полетит.
Валерий вне форума   Ответить с цитированием
Старый 08.02.2012, 23:08   #3 (permalink)
Валерий
Member
 
Аватар для Валерий
 
Регистрация: 11.04.2007
Адрес: Санкт-Петербург
Сообщений: 40,320
Записей в дневнике: 73
Сказал(а) спасибо: 885
Поблагодарили 2,792 раз(а) в 431 сообщениях
Репутация: 186775
По умолчанию

Всё, почёл...
Решил лампу настроения на ATtiny2313 сделать? А где схема?
__________________
Пингвин птица гордая, пока не пнёшь - не полетит.
Валерий вне форума   Ответить с цитированием
Старый 08.02.2012, 23:17   #4 (permalink)
Ильмир
МАГистр
 
Аватар для Ильмир
 
Регистрация: 11.07.2010
Сообщений: 2,196
Записей в дневнике: 9
Сказал(а) спасибо: 0
Поблагодарили 10 раз(а) в 2 сообщениях
Репутация: 2976
По умолчанию

Я давно хотел это сделать, тоже тему создал, но ни кто не скопировал)))
Может тебе скомпилируют))) жду с нетерпением!!!!
Валерий, схема вот она Лампа настроения — LicrymWiki
Была бы прошивка собрал бы на tiny2313, дешевле выходит))))
Ильмир вне форума   Ответить с цитированием
Старый 08.02.2012, 23:18   #5 (permalink)
Weles
Лентяй
 
Аватар для Weles
 
Регистрация: 13.04.2009
Адрес: Тверь
Сообщений: 16,556
Записей в дневнике: 29
Сказал(а) спасибо: 15
Поблагодарили 81 раз(а) в 14 сообщениях
Репутация: 24915
По умолчанию

А вот и схема, то же самое, просто я подумал что атмега8 слишком большая для такой по сути игрушки И был прав Даже думаю что можно было бы это запихать и в более мелкий контроллер, типа аттини 13 На тринадцатой аттини кстати видел эмулятор пламени свечи, причём на 3 свечи
Миниатюры
moodlamp_scheme2.jpg  
Weles вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 08.02.2012, 23:21   #6 (permalink)
Валерий
Member
 
Аватар для Валерий
 
Регистрация: 11.04.2007
Адрес: Санкт-Петербург
Сообщений: 40,320
Записей в дневнике: 73
Сказал(а) спасибо: 885
Поблагодарили 2,792 раз(а) в 431 сообщениях
Репутация: 186775
По умолчанию

Компилятор находит ошибки.
__________________
Пингвин птица гордая, пока не пнёшь - не полетит.
Валерий вне форума   Ответить с цитированием
Старый 08.02.2012, 23:25   #7 (permalink)
Weles
Лентяй
 
Аватар для Weles
 
Регистрация: 13.04.2009
Адрес: Тверь
Сообщений: 16,556
Записей в дневнике: 29
Сказал(а) спасибо: 15
Поблагодарили 81 раз(а) в 14 сообщениях
Репутация: 24915
По умолчанию

Плохо Возможно какую то часть кода надо исключить. Попробуй вот так может
Код:
Chip type           : ATtiny2313
Clock frequency     : 8,000000 MHz
Memory model        : Tiny
External RAM size   : 0
Data Stack size     : 32
*****************************************************/

#include <tiny2313.h>
#include <stdlib.h>
#include <math.h>
#include <delay.h>


unsigned char sred, sgreen, sblue;            //showing colors


int red, green, blue;                         //now colors
unsigned int tred, tgreen, tblue;             //tagert colors
int delta_red, delta_green, delta_blue;       //величина прибавки за шаг
unsigned int time = 1;                        //длительность шага


void delay(unsigned int delayt)               //задержка delay_ms() на вход принимает только константу( 
{
  while (delayt != 0)
  {
    delay_ms(1);
    delayt--;
  };
};


void main(void)
{

unsigned int temp1, temp2, temp3, temp4;

// Crystal Oscillator division factor: 1
//#pragma optsize-
//CLKPR=0x80;
//CLKPR=0x00;
//#ifdef _OPTIMIZE_SIZE_
//#pragma optsize+
//#endif

// Input/Output Ports initialization
// Port A initialization
// Func2=In Func1=In Func0=In 
// State2=T State1=T State0=T 
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=Out Func3=Out Func2=Out Func1=In Func0=In 
// State7=T State6=T State5=T State4=0 State3=0 State2=0 State1=T State0=T 
PORTB=0x00;
DDRB=0x1C;

// Port D initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 8000,000 kHz
// Mode: Fast PWM top=FFh
// OC0A output: Non-Inverted PWM
// OC0B output: Disconnected
TCCR0A=0x83;
TCCR0B=0x01;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 8000,000 kHz
// Mode: Fast PWM top=00FFh
// OC1A output: Non-Inv.
// OC1B output: Non-Inv.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0xA1;
TCCR1B=0x09;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;



// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// Interrupt on any change on pins PCINT0-7: Off
//GIMSK=0x00;
//MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;

srand(1);             //инициализируем рандомайзер этим значением


while (1)
{

    do 
    {
        tred = rand()&0xFF;
        tgreen = rand()&0xFF;
        tblue = rand()& 0xFF;
		
        temp1 = (abs(tred - tgreen));
        temp2 = (abs(tred - tblue));
        temp3 = (abs(tgreen - tblue));
    }
    while (( temp1 < 150 ) && (temp2 < 150) && (temp3 < 150));     //если все цвета будут примерно равные то будет белый что не интересно

	
    if (rand() < 13100)                                            //c вероятностью 0,4 (32767) вышибаем один цвет
    {
		do
        {
            temp4 = rand() & 0x000F ;
        }
        while ((temp4 == 0) || (temp4 > 3));
       
        if (temp4 == 1)                                            //не повезло красному
        {                                                          //гасим до 0 - 20% от исходного
           do
           {
			temp4 = rand() & 0x0FFF;
           }
           while ((temp4 == 0) || (temp4 > 3276));
          
           tred = ceil ((float) (temp4 / 32767) * tred);
        };
        
        if (temp4 == 2)
        {
          do
           {
             temp4 = rand() & 0x0FFF;
           }
          while ((temp4 == 0) || (temp4 > 3276));
          
          tgreen = ceil ((float) (temp4 / 32767) * tgreen);
        };
        
        if (temp4 == 3)
        {
          do
           {
             temp4 = rand() & 0x0FFF;
           }
          while ((temp4 == 0) || (temp4 > 3276));
          
          tblue = ceil ((float) (temp4 / 32767) * tblue);
        };
        
    };

    delta_red = (tred - sred); 
    delta_green = (tgreen - sgreen);
    delta_blue =  (tblue - sblue); 
  
  

    do 
    {
        sred=((red&0xFF00)/256);
        sgreen=((green&0xFF00)/256);  
        sblue=((blue&0xFF00)/256);
        
        if ((tred) != (sred))
          red = red + delta_red;
        
        if ((tgreen) != (sgreen))
          green = green + delta_green;
         
        if ((tblue) != (sblue))
          blue = blue + delta_blue;


        OCR1B = sred;
        OCR1A = sgreen;
        OCR0A = sblue;
    
        delay(time);
      
    }
    while ((tred != (sred)) || (tgreen != (sgreen)) || (tblue != (sblue))); 


    delay(time * 255);                                 //стремились к этому цвету, задержим его
    
    
    time = 1 + rand()&0x0F;                            // 1 до 16 варьируется задержка, числа подобраны экспериментально
                                                       //делаем после что бы включалось плавно и быстро
     
};   

}
А какие ошибки пишет? Я просто вин авр только один раз видел но помоему что то вроде майкрософт визуал студио, там ошибки в коде показывались.
Weles вне форума   Ответить с цитированием
Старый 08.02.2012, 23:28   #8 (permalink)
Ильмир
МАГистр
 
Аватар для Ильмир
 
Регистрация: 11.07.2010
Сообщений: 2,196
Записей в дневнике: 9
Сказал(а) спасибо: 0
Поблагодарили 10 раз(а) в 2 сообщениях
Репутация: 2976
По умолчанию

Какая ошибка? Нету дирректории #include <tiny2313.h> ?
У меня тоже такая ошибка была, дело в компиляторе, а сама программа правильная!
Ильмир вне форума   Ответить с цитированием
Старый 08.02.2012, 23:28   #9 (permalink)
Валерий
Member
 
Аватар для Валерий
 
Регистрация: 11.04.2007
Адрес: Санкт-Петербург
Сообщений: 40,320
Записей в дневнике: 73
Сказал(а) спасибо: 885
Поблагодарили 2,792 раз(а) в 431 сообщениях
Репутация: 186775
По умолчанию

Да, именно так.
__________________
Пингвин птица гордая, пока не пнёшь - не полетит.
Валерий вне форума   Ответить с цитированием
Старый 08.02.2012, 23:29   #10 (permalink)
Weles
Лентяй
 
Аватар для Weles
 
Регистрация: 13.04.2009
Адрес: Тверь
Сообщений: 16,556
Записей в дневнике: 29
Сказал(а) спасибо: 15
Поблагодарили 81 раз(а) в 14 сообщениях
Репутация: 24915
По умолчанию

А ну так мож обновить вин авр надо, я на их сайте видел обновки да чё то вообще не понял никак студио скачать ни как обновки
Weles вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 16:31.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.