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

trivet

Участник
  • Постов

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

  • Посещение

Репутация

0 Обычный

Контакты

  • ICQ
    Array
  1. Спасибо всем. Все заработало после того как я решил не подстраиваться под чужую схему а на макетке собрал свою где все сегменты индикатора висят на одном порту. И все теперь работает. Там наверно где то во время моего разложение на биты клинило.
  2. "88" выводится и в железе и в протеусе. пробовал вообще не выводить восьмерки, но результат тот же!
  3. Я пробовал проверять если приходит непонятное значение или вообще восьмерки на вывод их не выводить а оставлять предыдущее значение. Тот же эффект
  4. У меня таймер для вывода на индикатор чтоб он не тух во время опроса датчика. я начал возится с таймером только из-за этого. А если я буду запрещать прерывание во время опроса датчика я вернусь к морганию. Я пробовал считывать реже тот же эффект.
  5. lcd.h здесь непричем, я его сейчас не использую. а как таймер может помешать? Я пробовал делать проверку если приходит непонятное значение от датчика или вообще если приходят восьмерки на вывод их не выводить. Но все равно это происходит. Такое впечатление что чтото выводит на порты используемые для вывода непонятно что. И если это таймер ко как его именно в это время отключить?
  6. Объясните пожалуйста, я новичек и если что извиняйте за тупой вопрос. У меня датчик техразрядный индикатор(использую 2 из разрадов). Написал прогу в CodeVisionAVR, все работает. Но прикол в том что иногда(часто но никакой закономерности) заместо значений выводится "88". #include <mega8.h> #include <delay.h> #include <stdio.h> // 1 Wire Bus interface functions #include <1wire.h> // DS1820 Temperature Sensor functions #include <ds18b20.h> //#asm //сообщаем куда подключён экран // .equ __lcd_port=0x18 //#endasm //#include <lcd.h> #define A PORTB.6 #define B PORTB.2 #define C PORTB.0 #define D PORTD.6 #define E PORTD.5 #define F PORTB.7 #define G PORTB.1 #define H PORTD.7 #define D1 PORTB.5 #define D2 PORTB.4 #define D3 PORTB.3 #define D4 PORTC.1 #define MAX_DS18b20 8 unsigned char ds18b20_devices; unsigned char ds18b20_rom_codes[MAX_DS18b20][9]; float temper; int temper_int,temper_fl,min=0,temp[2],i; flash int digits[11][8] = {{0,0,1,1,1,1,1,1}, //0 {0,0,0,0,0,1,1,0}, //1 {0,1,0,1,1,0,1,1}, //2 {0,1,0,0,1,1,1,1}, //3 {0,1,1,0,0,1,1,0}, //4 {0,1,1,0,1,1,0,1}, //5 {0,1,1,1,1,1,0,1}, //6 {0,0,0,0,0,1,1,1}, //7 {0,1,1,1,1,1,1,1}, //8 {0,1,1,0,1,1,1,1}, //9 {0,0,0,0,0,0,0,0}}; //пусто interrupt [TIM1_OVF] void timer2_ovf_isr(void) { switch(i) { case 0:D3=1; D1=0; break; case 1:D1=1; D2=0; break; case 2:D2=1; D3=0; break; }; if(i>0) { A=digits[temp[i-1]][7]; B=digits[temp[i-1]][6]; C=digits[temp[i-1]][5]; D=digits[temp[i-1]][4]; E=digits[temp[i-1]][3]; F=digits[temp[i-1]][2]; G=digits[temp[i-1]][1]; } else { A=digits[10][7]; B=digits[10][6]; C=digits[10][5]; D=digits[10][4]; E=digits[10][3]; F=digits[10][2]; G=digits[10][1]; } i++; if(i==3) i=0; TCNT1H=0xEC; TCNT1L=0x77; } void temperature(void) // функция по работе с термо-датчиком { temper=ds18b20_temperature(&ds18b20_rom_codes[0][0]); temper_int=temper; // отбор целой части от температуры if(temper<0) // при отрицательной температуре { temper_fl=(temper-temper_int-0.0625)*10; // дробная часть temper_int=-((temper_int*10)+temper_fl); // температура*10 min=1; // минус } else // при положительной { temper_fl=(temper-temper_int)*10; // дробная часть temper_int=(temper_int*10)+temper_fl;// температура*10 min=0; // плюс } } void main(void) { PORTB=0x00; DDRB=0xFF; PORTC=0x00; DDRC=0x00; PORTD=0x00; DDRD=0xFF; TCCR0=0x02; TCNT0=0x00; TCCR1A=0x00; TCCR1B=0x02; TCNT1H=0xEC; TCNT1L=0x77; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; ASSR=0x00; TCCR2=0x00; TCNT2=0x00; OCR2=0x00; MCUCR=0x00; TIMSK=0x04; UCSRB=0x00; ACSR=0x80; SFIOR=0x00; SREG|=(1<<7); ADCSRA=0x00; SPCR=0x00; TWCR=0x00; w1_init(); ds18b20_devices=w1_search(0xf0,ds18b20_rom_codes); ds18b20_init(0,-35,35,DS18B20_12BIT_RES); while (1) { temperature(); temp[0]=temper_int/100; temp[1]=(temper_int-temp[0]*100)/10; } } Вот проект CodeVisionAVR и Proteus proga.rar
  7. Помогите пожалуйста с проблемой.... Везде где ни читаю написано как считать время, дату, а вот день недели как считать стандартной библиотекой DS1302 в CodeVisionAVR нигде не написано.. Зарание спасибо
×
×
  • Создать...