Перейти к содержанию

igorryzhov

Members
  • Постов

    22
  • Зарегистрирован

  • Посещение

Информация

  • Город
    Харьков

Электроника

  • Стаж в электронике
    6-10 лет

Достижения igorryzhov

Новичок

Новичок (1/14)

  • 10 постов на форуме
  • Месяц на форуме
  • Год на форуме
  • Неделя на форуме

Последние значки

0

Репутация

  1. Не работает. Буду новый мк покупать. сейчас МК ATMEGA8A-PU. Имеет ли индекс значение?
  2. Отпаял все резисторы, индикаторы оставил только разъем для программатора. Прошил та же фигня . Попробую через "5 проводков" :wall:
  3. Хм..странно. Отключил индикатор, теперь на пд0 - 70гц, на пд1, пд2, пд3 - 30 гц. Это при питании от avr910. Когда подключаю 5 в напрямую от блока питания, то пд0 -70 гц, пд1, пд2,пд3 - 0 гц. Вообще бред какой то... попробую изменить прошивку чтобы подключать к пд4-пд7 тут еще нашел ошибку PORTD = (1<<PB3)|(1<<PB2)|(1<<PB1)|(1<<PB0);
  4. ХЗ ... не работает. Буду перепаивать плату. А какие у вас фьюзы выставлены?
  5. Только что заменил мк, то же самое. А чем Вы прошиваете мк?
  6. Монтаж проверял, индикатор тоже. Сейчас потыкал частотомером на выводы PD0-PD3, на PD0 импульсы с частотой около 40 герц ( замерял мультиметром), на PD1-PD3 импульсы отсутствуют. Получается проблема где то в коде?!
  7. Это устройство не совсем для кодового замка. Есть ящичек с электроприводом - так вот если правильно ввести цифры он откроется. Сейчас запустил в железе - работает только 1 индикатор,остальные не горят. В протеусе все отлично работает. В чем может быть дело? #define F_CPU 8000000UL #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> unsigned int z0,z1,z2,z3,razryad,a; unsigned char seg[] ={ 0b00111111, //0 0b00000110, //1 0b01011011, //2 0b01001111, //3 0b01100110, //4 0b01101101, //5 0b01111101, //6 0b00000111, //7 0b01111111, //8 0b01101111 //9 }; void pereschet(unsigned int adc) { if (adc <= 102) { PORTB = seg[0];} if ((adc > 102)&&(adc <=204)) { PORTB = seg[1];} if ((adc > 204)&&(adc <=306)) { PORTB = seg[2];} if ((adc > 306)&&(adc <=408)) { PORTB = seg[3];} if ((adc > 408)&&(adc <=510)) { PORTB = seg[4];} if ((adc > 510)&&(adc <=612)) { PORTB = seg[5];} if ((adc > 612)&&(adc <=714)) { PORTB = seg[6];} if ((adc > 714)&&(adc <=816)) { PORTB = seg[7];} if ((adc > 816)&&(adc <=918)) { PORTB = seg[8];} if ((adc > 918)&&(adc <=1023)){ PORTB = seg[9];} } ISR( TIMER2_COMP_vect) { cli(); PORTD|=(1<<PD3)|(1<<PD2)|(1<<PD1)|(1<<PD0); switch ( razryad ) { case 0: PORTD&=~(1<<PD0); pereschet(z0); break; case 1: PORTD&=~(1<<PD1); pereschet(z1); break; case 2: PORTD&=~(1<<PD2); pereschet(z2); break; case 3: PORTD&=~(1<<PD3); pereschet(z3); break; } razryad = razryad + 1; if (razryad == 4) {razryad = 0;} sei(); } int readADC(unsigned char mux) { switch (mux) { case 0: ADMUX &=~((1<<MUX3)|(1<<MUX2)|(1<<MUX1)|(1<<MUX0));break; case 1: ADMUX |= ((0<<MUX3)|(0<<MUX2)|(0<<MUX1)|(1<<MUX0));break; case 2: ADMUX &=~(1<<MUX0); ADMUX|=(1<<MUX1);break; case 3: ADMUX |= (1<<MUX0);break; } _delay_us(10); ADCSRA |= (1<<ADSC);//запуск преобразования while((ADCSRA &(1<<ADSC))); // ждем завершения преобразования return ADC; } int main(void) { DDRB = 0b11111111; PORTB = 0b00000000; DDRD = 0b11111111; PORTD = (1<<PB3)|(1<<PB2)|(1<<PB1)|(1<<PB0); ADMUX |= (0<<REFS1)|(1<<REFS0);//ион - напряжение питания ADCSRA |= (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); a = 1; TCCR2 |= (1<<WGM21)|(0<<WGM20)|(1<<CS22)|(1<<CS21)|(1<<CS20); // сброс при совпадении и делитель на 1024 OCR2 = 65;// СЧЕТ ДО 50 TIMSK |= (1<<OCIE2); // прерывание по совпадению sei(); while(a) { z0=readADC(0); z1=readADC(1); z2=readADC(2); z3=readADC(3); if (((z0 > 510)&&(z0 <=612))&&((z1 > 918)&&(z1 <=1023))&&((z2 > 714)&&(z2 <=816))&&((z3 > 408)&&(z3 <=510))) { PORTD|=(1<<PD4); _delay_ms(1000); PORTD&=~(1<<PD4); a = 0; PORTB = 0b00000000; PORTD = 0b00000000;} } }
  8. Berg, все теперь работает!!! Устройство - что то вроде кодового замка только вместо кнопок - переменные резисторы. Если правильно выставить код то сработает замок. Резисторы по 220 ом. Спасибо !!!
  9. В общем, так как мне не удалось запрограммировать атмегу328 (avr910 не дружит с ней(, пришлось переделывать код под атмегу 8. И опять не работает. На 1 индикаторе горит ноль. С атмегой 328 все прекрасно работало а тут... хз. код для 328, работает: /* * projektatmega328.c * * Created: 07.03.2016 23:16:47 * Author: игорь */ //mega328 #define F_CPU 8000000UL #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> unsigned int z0,z1,z2,z3,count; //----------------------0-----1-----2-----3-----4-----5-----6-----7-----8------9-- //unsigned char seg[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90}; //общий анод unsigned char seg[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; //общий катод void pereschet(unsigned int adc){ if (adc <= 102) { PORTD = seg[0];} if ((adc > 102)&&(adc <=204)) { PORTD = seg[1];} if ((adc > 204)&&(adc <=306)) { PORTD = seg[2];} if ((adc > 306)&&(adc <=408)) { PORTD = seg[3];} if ((adc > 408)&&(adc <=510)) { PORTD = seg[4];} if ((adc > 510)&&(adc <=612)) { PORTD = seg[5];} if ((adc > 612)&&(adc <=714)) { PORTD = seg[6];} if ((adc > 714)&&(adc <=816)) { PORTD = seg[7];} if ((adc > 816)&&(adc <=918)) { PORTD = seg[8];} if ((adc > 918)&&(adc <=1023)) { PORTD = seg[9];} } ISR( TIMER0_COMPA_vect){ PORTB |= (1<<PB3)|(1<<PB2)|(1<<PB1)|(1<<PB0); if(count==0){PORTB &=~(1<<PB0); pereschet(z0);} if(count==1){PORTB &=~(1<<PB1); pereschet(z1);} if(count==2){PORTB &=~(1<<PB2); pereschet(z2);} if(count==3){PORTB &=~(1<<PB3); pereschet(z3);} count++; if(count == 4){count=0;} } int readADC(unsigned int ch){ switch (ch){ case 0: ADMUX &= ~((1<<MUX3)|(1<<MUX2)|(1<<MUX1)|(1<<MUX0));break; case 1: ADMUX |= ((0<<MUX3)|(0<<MUX2)|(0<<MUX1)|(1<<MUX0));break; case 2: ADMUX &=~(1<<MUX0); ADMUX|=(1<<MUX1);break; case 3: ADMUX |= (1<<MUX0);break; } _delay_us(10); ADCSRA |= (1<<ADSC);//запуск преобразования while ((ADCSRA &(1<<ADSC)));//ожидание окончания преобразов. return ADC;} int main(void) { DDRB |= (1<<PB0)|(1<<PB1)|(1<<PB2)|(1<<PB3); PORTB |= (1<<PB0)|(1<<PB1)|(1<<PB2)|(1<<PB3); DDRD |= (1<<PD0)|(1<<PD1)|(1<<PD2)|(1<<PD3)|(1<<PD4)|(1<<PD5)|(1<<PD6); PORTD &=~(1<<PD0)|(1<<PD1)|(1<<PD2)|(1<<PD3)|(1<<PD4)|(1<<PD5)|(1<<PD6); ADCSRA |= (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); ADMUX |= (1<<REFS0)|(1<<MUX3)|(1<<MUX2)|(1<<MUX1)|(1<<MUX0); TIMSK0 |= (1<<OCIE0A); TCCR0A |= (1<<WGM01); TCCR0B |= (1<<CS02)|(0<<CS01)|(1<<CS00); OCR0A = 50; sei(); while(1) { z0=readADC(0); z1=readADC(1); z2=readADC(2); z3=readADC(3); } } код для атмеги 8, не работает: /* * projektatmega8.c * * Created: 08.03.2016 0:02:05 * Author: игорь */ //mega8 #define F_CPU 8000000UL #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> unsigned int z0,z1,z2,z3,razryad; unsigned char seg[] = { 0b00111111, //0 0b00000110, //1 0b01011011, //2 0b01001111, //3 0b01100110, //4 0b01101101, //5 0b01111101, //6 0b00000111, //7 0b01111111, //8 0b01101111 //9 }; void pereschet(unsigned int adc){ if (adc <= 102) { PORTB= seg[0];} if ((adc > 102)&&(adc <=204)) { PORTB = seg[1];} if ((adc > 204)&&(adc <=306)) { PORTB = seg[2];} if ((adc > 306)&&(adc <=408)) { PORTB = seg[3];} if ((adc > 408)&&(adc <=510)) { PORTB = seg[4];} if ((adc > 510)&&(adc <=612)) { PORTB = seg[5];} if ((adc > 612)&&(adc <=714)) { PORTB = seg[6];} if ((adc > 714)&&(adc <=816)) { PORTB = seg[7];} if ((adc > 816)&&(adc <=918)) { PORTB = seg[8];} if ((adc > 918)&&(adc <=1023)) { PORTB = seg[9];} } ISR( TIMER2_COMP_vect) { PORTD|=(1<<PD3)|(1<<PD2)|(1<<PD1)|(1<<PD0); if (razryad == 0){PORTD&=~(1<<PD0); pereschet(z0);} if (razryad == 1){PORTD&=~(1<<PD1); pereschet(z1);} if (razryad == 2){PORTD&=~(1<<PD2); pereschet(z2);} if (razryad == 3){PORTD&=~(1<<PD3); pereschet(z3);} razryad++; if (razryad == 4) {razryad = 0;} } int readADC(unsigned char mux) { switch (mux) { case 0: ADMUX &= ~((1<<MUX3)|(1<<MUX2)|(1<<MUX1)|(1<<MUX0));break; case 1: ADMUX |= ((0<<MUX3)|(0<<MUX2)|(0<<MUX1)|(1<<MUX0));break; case 2: ADMUX &=~(1<<MUX0); ADMUX|=(1<<MUX1);break; case 3: ADMUX |= (1<<MUX0);break; } _delay_us(10); ADCSRA |= (1<<ADSC);//запуск преобразования while((ADCSRA &(1<<ADSC))); // ждем завершения преобразования return ADC; } int main(void) { DDRB = 0b11111111; PORTB = 0b00000000; DDRD = 0b11111111; PORTD = 0b11111111; ADMUX |= (0<<REFS1)|(1<<REFS0)|(1<<MUX3)|(1<<MUX2)|(1<<MUX1)|(1<<MUX0);//ион - напряжение питания, ножки входа ацп подключить к земле ADCSRA |= (1<<ADEN)|(1<<ADSC)|(0<<ADFR)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); ADC|= ~(1<<ADLAR); // делитель для ацп - делитель на 128 TCCR2 |= (1<<WGM21)|(0<<WGM20)|(1<<CS22)|(1<<CS21)|(1<<CS20); // сброс при совпадении и делитель на 1024 OCR2 = 255;// СЧЕТ ДО 50 TIMSK |= (1<<OCIE2); // прерывание по совпадению sei(); while(1) { z0 = readADC(0); z1 = readADC(1); z2 = readADC(2); z3 = readADC(3); } } Новая папка (3).rar
  10. Спасибо большое, все работает. Только не открывается проект в студии 6.1. Не могли бы Вы выложить сюда код?
×
×
  • Создать...