08.02.2012, 22:52 | #1 (permalink) |
Лентяй
Регистрация: 13.04.2009
Адрес: Тверь
Сообщений: 16,556
Записей в дневнике: 29
Сказал(а) спасибо: 15
Поблагодарили 81 раз(а) в 14 сообщениях
Репутация: 24915
|
Компилирование в 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 варьируется задержка, числа подобраны экспериментально //делаем после что бы включалось плавно и быстро }; } |
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) |
Лентяй
Регистрация: 13.04.2009
Адрес: Тверь
Сообщений: 16,556
Записей в дневнике: 29
Сказал(а) спасибо: 15
Поблагодарили 81 раз(а) в 14 сообщениях
Репутация: 24915
|
А вот и схема, то же самое, просто я подумал что атмега8 слишком большая для такой по сути игрушки И был прав Даже думаю что можно было бы это запихать и в более мелкий контроллер, типа аттини 13 На тринадцатой аттини кстати видел эмулятор пламени свечи, причём на 3 свечи
|
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) |
Лентяй
Регистрация: 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 варьируется задержка, числа подобраны экспериментально //делаем после что бы включалось плавно и быстро }; } |
08.02.2012, 23:28 | #8 (permalink) |
МАГистр
Регистрация: 11.07.2010
Сообщений: 2,196
Записей в дневнике: 9
Сказал(а) спасибо: 0
Поблагодарили 10 раз(а) в 2 сообщениях
Репутация: 2976
|
Какая ошибка? Нету дирректории #include <tiny2313.h> ?
У меня тоже такая ошибка была, дело в компиляторе, а сама программа правильная! |
08.02.2012, 23:29 | #10 (permalink) |
Лентяй
Регистрация: 13.04.2009
Адрес: Тверь
Сообщений: 16,556
Записей в дневнике: 29
Сказал(а) спасибо: 15
Поблагодарили 81 раз(а) в 14 сообщениях
Репутация: 24915
|
А ну так мож обновить вин авр надо, я на их сайте видел обновки да чё то вообще не понял никак студио скачать ни как обновки
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|