Преобразование числа в строку и обратно (DS18B20 + 7 сегм.)

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Аватара пользователя
Goodefine
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

Сообщение Goodefine »

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 »

mr_smit писал(а):ОПА!!! Только что глюк был.
Мега глючит тогда пожоже - в программе уже глючить нечему, с питанием все в порядке?
Кстати, а схему покажи, ресет подключен через резистор к питанию?
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Реклама
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Сообщение GP1 »

Почитал я тему и понял почему я не люблю коробку автомат в машине и ЯВУ для микриков :)
люблю управлять прцессом, а не наблюдать как это делает компилятор/автомат сделаный кем-то :)))
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
mr_smit
Вымогатель припоя
Сообщения: 651
Зарегистрирован: Пн мар 23, 2009 09:25:58
Откуда: Самара

Сообщение mr_smit »

Goodefine писал(а):Мега глючит тогда пожоже - в программе уже глючить нечему, с питанием все в порядке?
Кстати, а схему покажи, ресет подключен через резистор к питанию?
Питание от USB, ресет не подключен. Завтра исправлю.

P.S. Хотя вот сейчас сколько уже смотрю на него вроде не глючит, может показалось, спать хочу.
Последний раз редактировалось mr_smit Пн июн 15, 2009 23:12:36, всего редактировалось 1 раз.
Нельзя всё знать, достаточно понимать.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Goodefine
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

Сообщение Goodefine »

mr_smit писал(а): Питание от USB, ресет не подключен. Завтра исправлю.
Так может это контроллер USB периодически питалово рвет... Сколько схемка, кстати, потребляет? А ресет через 5-10кОм к питанию подключите. И конденсатор 0.1мкф на землю от ресета тоже. И по питанию кондеры сильно не помешают...
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Реклама
Аватара пользователя
mr_smit
Вымогатель припоя
Сообщения: 651
Зарегистрирован: Пн мар 23, 2009 09:25:58
Откуда: Самара

Сообщение mr_smit »

В протеусе подключил терминал. Простой вывод в USART. Без всяких индикаторов. Я ахренел... пятая строка.

Изображение Изображение
Вложения
Temp.rar
(25.44 КБ) 223 скачивания
Нельзя всё знать, достаточно понимать.
Реклама
Аватара пользователя
mr_smit
Вымогатель припоя
Сообщения: 651
Зарегистрирован: Пн мар 23, 2009 09:25:58
Откуда: Самара

Сообщение mr_smit »

2-ой день работает, вроде нормально. Спасибо Goodefine.
Нельзя всё знать, достаточно понимать.
Аватара пользователя
Danko
Сверлит текстолит когтями
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай
Контактная информация:

Сообщение Danko »

Код: Выделить всё

 if((temp>=0)&&(temp<100))decbin_ds(&temp, buffer); 
т.е. отрицательные температуры не в счет?

У меня были те же грабли в CVAVR. Возможно прерывание на динамическую индикацию мешает.
Я делал так:

Код: Выделить всё

 if(temp!=9999) ... 
Аватара пользователя
Goodefine
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

Сообщение Goodefine »

Danko писал(а):

Код: Выделить всё

 if((temp>=0)&&(temp<100))decbin_ds(&temp, buffer); 
т.е. отрицательные температуры не в счет?
У автора всего две цифры используется...
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Obidjon
Родился
Сообщения: 6
Зарегистрирован: Сб сен 17, 2011 15:44:24

Re:

Сообщение Obidjon »

Alex Medvedev писал(а):Я замучался в свое время с этим.
Исходник прилагается. Все работает но вот тока индикаторов не два а четыре..
Изображение
Помогите мне пожалуйста
Я хочу собрать двухканальный термостат на Atmega8+DS18b20
увидел ваш проект откомпилировал файл но у меня показывает на индикаторе все девятки

а как можно устранить
Спасибо!
Obidjon
Родился
Сообщения: 6
Зарегистрирован: Сб сен 17, 2011 15:44:24

Re: Преобразование числа в строку и обратно (DS18B20 + 7 сег

Сообщение Obidjon »

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");
    }
а как можно устранить
Спасибо!
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»