Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Goodefine
Держит паяльник хвостом
Сообщения: 906 Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь
Сообщение
Goodefine » Пн июн 15, 2009 22:33:13
mr_smit писал(а): Что сделал?
То о чем писал:
Код: Выделить всё
for (;;)//---------------------MAIN_LOOP----------------------------------
{
#asm("wdr") //для Протеуса
temp=ds18b20_temperature(&ds18b20_rom_codes[0][0]);
if((temp>=0)&&(temp<100))decbin_ds(&temp, buffer);
delay_ms(500);
} //end MAIN_LOOP----------------------------------------------------
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Goodefine
Держит паяльник хвостом
Сообщения: 906 Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь
Сообщение
Goodefine » Пн июн 15, 2009 22:35:24
mr_smit писал(а): ОПА!!! Только что глюк был.
Мега глючит тогда пожоже - в программе уже глючить нечему, с питанием все в порядке?
Кстати, а схему покажи, ресет подключен через резистор к питанию?
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
GP1
Поставщик валерьянки для Кота
Сообщения: 2401 Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:
Сообщение
GP1 » Пн июн 15, 2009 22:55:48
Почитал я тему и понял почему я не люблю коробку автомат в машине и ЯВУ для микриков
люблю управлять прцессом, а не наблюдать как это делает компилятор/автомат сделаный кем-то
Чем дальше, тем больше становлюсь занудой...
mr_smit
Вымогатель припоя
Сообщения: 651 Зарегистрирован: Пн мар 23, 2009 09:25:58
Откуда: Самара
Сообщение
mr_smit » Пн июн 15, 2009 23:03:25
Goodefine писал(а): Мега глючит тогда пожоже - в программе уже глючить нечему, с питанием все в порядке?
Кстати, а схему покажи, ресет подключен через резистор к питанию?
Питание от USB, ресет не подключен. Завтра исправлю.
P.S. Хотя вот сейчас сколько уже смотрю на него вроде не глючит, может показалось, спать хочу.
Последний раз редактировалось
mr_smit Пн июн 15, 2009 23:12:36, всего редактировалось 1 раз.
Нельзя всё знать, достаточно понимать.
Goodefine
Держит паяльник хвостом
Сообщения: 906 Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь
Сообщение
Goodefine » Пн июн 15, 2009 23:09:25
mr_smit писал(а):
Питание от USB, ресет не подключен. Завтра исправлю.
Так может это контроллер USB периодически питалово рвет... Сколько схемка, кстати, потребляет? А ресет через 5-10кОм к питанию подключите. И конденсатор 0.1мкф на землю от ресета тоже. И по питанию кондеры сильно не помешают...
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
mr_smit
Вымогатель припоя
Сообщения: 651 Зарегистрирован: Пн мар 23, 2009 09:25:58
Откуда: Самара
Сообщение
mr_smit » Вт июн 16, 2009 18:07:55
В протеусе подключил терминал. Простой вывод в USART. Без всяких индикаторов. Я ахренел... пятая строка.
Вложения
Temp.rar
(25.44 КБ) 223 скачивания
Нельзя всё знать, достаточно понимать.
mr_smit
Вымогатель припоя
Сообщения: 651 Зарегистрирован: Пн мар 23, 2009 09:25:58
Откуда: Самара
Сообщение
mr_smit » Ср июн 17, 2009 15:14:54
2-ой день работает, вроде нормально. Спасибо Goodefine .
Нельзя всё знать, достаточно понимать.
Danko
Сверлит текстолит когтями
Сообщения: 1287 Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай
Контактная информация:
Сообщение
Danko » Ср июн 17, 2009 16:23:15
Код: Выделить всё
if((temp>=0)&&(temp<100))decbin_ds(&temp, buffer);
т.е. отрицательные температуры не в счет?
У меня были те же грабли в CVAVR. Возможно прерывание на динамическую индикацию мешает.
Я делал так:
Goodefine
Держит паяльник хвостом
Сообщения: 906 Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь
Сообщение
Goodefine » Ср июн 17, 2009 18:11:30
Danko писал(а): Код: Выделить всё
if((temp>=0)&&(temp<100))decbin_ds(&temp, buffer);
т.е. отрицательные температуры не в счет?
У автора всего две цифры используется...
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Obidjon
Родился
Сообщения: 6 Зарегистрирован: Сб сен 17, 2011 15:44:24
Сообщение
Obidjon » Сб сен 17, 2011 15:53:37
Alex Medvedev писал(а): Я замучался в свое время с этим.
Исходник прилагается. Все работает но вот тока индикаторов не два а четыре..
Помогите мне пожалуйста
Я хочу собрать двухканальный термостат на Atmega8+DS18b20
увидел ваш проект откомпилировал файл но у меня показывает на индикаторе все девятки
а как можно устранить
Спасибо!
Obidjon
Родился
Сообщения: 6 Зарегистрирован: Сб сен 17, 2011 15:44:24
Сообщение
Obidjon » Сб сен 17, 2011 15:56:29
Alex Medvedev писал(а): Я замучался в свое время с этим.
Исходник прилагается. Все работает но вот тока индикаторов не два а четыре..
Помогите мне пожалуйста
Я хочу собрать двухканальный термостат на Atmega8+DS18b20
увидел ваш поект откомпилировал файл но у меня показывает на индикаторе все девятки
#define xtal 8000000L
#include <mega8.h>
#asm
.equ __w1_port=0x12 ;PORTD :-D
.equ __w1_bit=0
#endasm
#include <ds18b20.h>
#include <delay.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define MAX_DEVICES 8
unsigned char pos=0;
unsigned char str[4];
unsigned char st;
unsigned char mesto[4]={
0b11110111,
0b11111011,
0b11111101,
0b11111110
};
unsigned char rom_codes[MAX_DEVICES][9];
unsigned char i,devices;
int z;
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
TCNT2=0x00;
}
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
TCNT0=0x00;
switch (str[pos])
{
case '0':
i=0b00111111;
break;
case '1':
i=0b00000110;
break;
case '2':
i=0b01011011;
break;
case '3':
i=0b01001111;
break;
case '4':
i=0b01100110;
break;
case '5':
i=0b01101101;
break;
case '6':
i=0b01111101;
break;
case '7':
i=0b00000111;
break;
case '8':
i=0b01111111;
break;
case '9':
i=0b01101111;
break;
case '-':
i=0b01000000; // Минус
break;
case 'B':
i=0b01100011; // Градус
break;
case 'C':
i=0b00000000; // пусто
break;
};
PORTC=mesto[pos];
PORTB=i;
pos++;
if (pos==4) pos=0;
}
void main(void)
{
#asm("cli");
TIMSK=0b01000001;
TCCR0=0b00000001;
TCCR2=0b00000010;
DDRB=0xFF;
DDRC=0b00001111;
DDRD=0x01;
PORTB=0b01000000;
PORTC=0b00001001;
devices=w1_search(0xf0,rom_codes);
z=ds18b20_temperature(&rom_codes[0][0]);
itoa(z, str);
if (z>=100) str[3]='B'; //Трехзначное положительное
if (z==0) {str[0]='C';str[1]='C';str[2]='0';str[3]='B';goto ggg;}; //Ноль!
if ((z>=10) && (z<100))
{
str[3]='B';
str[2]=str[1];
str[1]=str[0];
str[0]='C';
goto ggg;
};
if ((z>0) && (z<10))
{
st=str[0];
str[0]='C';
str[1]='C';
str[2]=st;
str[3]='B';
goto ggg;
};
if (abs(z)<10)
{
str[3]='B';
str[2]=str[1];
str[1]=str[0];
str[0]='C';
goto ggg;
};
if (abs(z)>=10)
{
str[3]='B';
};
ggg:
#asm("sei");
}
а как можно устранить
Спасибо!