Технический форум

Технический форум (http://www.tehnari.ru/)
-   Микропроцессоры (http://www.tehnari.ru/f115/)
-   -   Компилирование в HEX (http://www.tehnari.ru/f115/t63816/)

Weles 08.02.2012 22:52

Компилирование в HEX
 
Ребята, кто умеет компилировать, скомпилируйте пожалуйста в hex:D:
Код:

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 варьируется задержка, числа подобраны экспериментально
                                                      //делаем после что бы включалось плавно и быстро
   
}; 

}

Я не умею и вин-авр не знаю как скачать, и вообще ........:D:D:D

Валерий 08.02.2012 23:05

А под какой микроконтроллер?

Валерий 08.02.2012 23:08

Всё, почёл...
Решил лампу настроения на ATtiny2313 сделать? А где схема?

Ильмир 08.02.2012 23:17

Я давно хотел это сделать, тоже тему создал, но ни кто не скопировал)))
Может тебе скомпилируют))) жду с нетерпением!!!!
Валерий, схема вот она Лампа настроения — LicrymWiki
Была бы прошивка собрал бы на tiny2313, дешевле выходит))))

Weles 08.02.2012 23:18

Вложений: 1
А вот и схема, то же самое, просто я подумал что атмега8 слишком большая для такой по сути игрушки:D И был прав:D Даже думаю что можно было бы это запихать и в более мелкий контроллер, типа аттини 13:D На тринадцатой аттини кстати видел эмулятор пламени свечи, причём на 3 свечи:D

Валерий 08.02.2012 23:21

Компилятор находит ошибки.

Weles 08.02.2012 23:25

Плохо:( Возможно какую то часть кода надо исключить. Попробуй вот так может:D
Код:

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 варьируется задержка, числа подобраны экспериментально
                                                      //делаем после что бы включалось плавно и быстро
   
}; 

}

А какие ошибки пишет? Я просто вин авр только один раз видел но помоему что то вроде майкрософт визуал студио, там ошибки в коде показывались.

Ильмир 08.02.2012 23:28

Какая ошибка? Нету дирректории #include <tiny2313.h> ?
У меня тоже такая ошибка была, дело в компиляторе, а сама программа правильная!

Валерий 08.02.2012 23:28

Да, именно так.

Weles 08.02.2012 23:29

А ну так мож обновить вин авр надо, я на их сайте видел обновки да чё то вообще не понял никак студио скачать ни как обновки:D


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

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.