Здравствуйте! Пытаюсь собрать простой термометр, вроде бы все написал, да только вот проблема: при моделировании в протеусе два правых индикатора мигают, а постоянно горит только 3й справа. Вот код:
Я так понимаю, что проблема возникла из-за задержки при чтении температуры:
Собственно, как можно решить данную проблему?
Схема в Протеусе
Раздел: AVR
#include <tiny2313.h>
#include <delay.h>
#asm
.equ __w1_port=0x12
.equ __w1_bit=3
#endasm
#include <1wire.h>
#include <ds18b20.h>
void set(int s)
{
int i,n;
int j;
unsigned int a[] = {0b11111100, 0b01100000, 0b11011010, 0b11110010, 0b01100110, 0b10110110, 0b10111110, 0b11100000, 0b11111110, 0b11110110};
unsigned int c;
n=1;
for (j=0; j<3; j++) {
c=a[s%10];
if (n==1) {PORTD.1=1; PORTD.2=1;}
if (n==2) {PORTD.0=1; PORTD.2=1; c=c+1;}
if (n==3) {PORTD.0=1; PORTD.1=1;}
PORTB.2=0;
for (i=0; i<8; i++)
{
PORTB.1=c%2;
PORTB.0=0;
PORTB.0=1;
c=c/2;
}
PORTB.2=1;
if (n==1) {PORTD.0=0;}
if (n==2) {PORTD.1=0;}
if (n==3) {PORTD.2=0;}
delay_ms(1);
n=n+1;
s=s/10;
}
}
void main(void)
{
PORTB=0x00;
DDRB=0xFF;
PORTD=0b11110111;
DDRD=0b11110111;
w1_init();
while (1)
{
int temp;
temp=ds18b20_temperature(0)*10;
set(temp);
}
}
Я так понимаю, что проблема возникла из-за задержки при чтении температуры:
temp=ds18b20_temperature(0)*10;
Собственно, как можно решить данную проблему?
Схема в Протеусе
Раздел: AVR