Пятница, 29.03.2024, 00:54
Микроконтроллерная техника AVR
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Микроконтроллеры » Вопросы по МК » Помогите добавить к проекту (Атмега 8)
Помогите добавить к проекту
GizmorsДата: Суббота, 27.02.2010, 15:33 | Сообщение # 1
Рядовой
Группа: Пользователи
Сообщений: 4
Репутация: 0
Статус: Offline
Помогите пожалуйста прикрутить часы к этому проекту.
Хочется еще что бы были часы, но с "Си" и codevisin я не дружу, а очень хочется собрать этот проект.
Спасибо всем заранее.

Код:

#include <mega8.h>
#include <stdlib.h>
#include <delay.h>
#include <ctype.h>
#include <string.h>
#include <stdio.h>
#asm
.equ __w1_port=0x18
.equ __w1_bit=0
#endasm
#asm
.equ __lcd_port=0x12
#endasm

#include <lcd.h>
#include <ds18b20.h>

char lcd_buffer[140],i,j,devices;

/* maximum number of DS18B20 connected to the 1 Wire bus */
#define MAX_DEVICES 8

/* DS18B20 devices ROM code storage area */
unsigned char rom_code[MAX_DEVICES][9];

void system_init(void)
{

lcd_init(20); //LCD 4 строки по 20
lcd_putsf("CONTROL TEMPERATURE");
delay_ms(1000);
lcd_clear();
//Заставим работать все прерывания
#asm("sei")
}

main()
{

system_init();

/* detect how many DS18B20 devices
are connected to the 1 Wire bus */
devices=w1_search(0xf0,rom_code);
sprintf(lcd_buffer,"%u DS18B20\nDevice detected",devices);
lcd_puts(lcd_buffer);
delay_ms(2000);

/* Покажем ROM коды на каждое из обнаруженных устройств */
if (devices)
{
for (i=0;i<devices;i++)
{
sprintf(lcd_buffer,"Device #%u ROM\nCode is:",i+1);
lcd_clear();
lcd_puts(lcd_buffer);
delay_ms(2000);
lcd_clear();
for (j=0;j<8;j++)
{
sprintf(lcd_buffer,"%02X ",rom_code[i][j]);
lcd_puts(lcd_buffer);
if (j==3) lcd_gotoxy(0,1);
};
delay_ms(500);
};
}
else
{
lcd_gotoxy(0,1);
lcd_putsf("NO DS18b20 DEVICES!!!");
while (1); /* Залипнем навсегда если ничего не было подключено */
}
/* Поставим каждый датчик в режим измерения с 12ти битной точностью */
for (i=0;i<devices;)
if (!ds18b20_init(&rom_code[i++][0],20,30,DS18B20_12BIT_RES))
{
sprintf(lcd_buffer,"Init error for\ndevice #%u",i);
lcd_clear();
lcd_puts(lcd_buffer);
while (1); /* Залипаем при ошибках перевода в нужный режим точности*/
};

/* measure and display the temperature(s) */
while (1)
{
j=1;
//lcd_clear(); если мы постоянно по циклу пишем одно на другое то и очищать экран не надо. миганий не будет!!!
for (i=0;i<devices;i++)
{
//В данном варианте первые 4 датчика обзаываются как CPU GPU NB Case. Дополнительные датчики,
//которые еще были налеплены на порт С обзываются как T1, T2, T3 и так далеее

if (i>3)
{
sprintf(lcd_buffer,"T%u=%+.1f\xdfC ",j++,ds18b20_temperature(&rom_code[i][0]));
lcd_gotoxy(0,i-4);
}
else lcd_gotoxy(0,i);
if (!i)
sprintf(lcd_buffer,"CPU=%+.1f\xdfC ",ds18b20_temperature(&rom_code[i][0]));
if (i==1)
sprintf(lcd_buffer,"GPU=%+.1f\xdfC ",ds18b20_temperature(&rom_code[i][0]));
if (i==2)
sprintf(lcd_buffer,"NB=%+.1f\xdfC ",ds18b20_temperature(&rom_code[i][0]));
if (i==3)
sprintf(lcd_buffer,"CASE=%+.1f\xdfC ",ds18b20_temperature(&rom_code[i][0]));
lcd_puts(lcd_buffer);
delay_ms(1000);
};
};
}

 
my-avrДата: Суббота, 27.02.2010, 15:41 | Сообщение # 2
Admin
Группа: Администраторы
Сообщений: 79
Репутация: 10
Статус: Offline
Gizmors, а можно схемку посмотреть, в протеусе или так?
 
GizmorsДата: Суббота, 27.02.2010, 15:51 | Сообщение # 3
Рядовой
Группа: Пользователи
Сообщений: 4
Репутация: 0
Статус: Offline
Quote (my-avr)
Gizmors, а можно схемку посмотреть, в протеусе или так?

Выложил проект на http://upload.com.ua/get/901419717/
Может у Вас получится, буду очень Вам благодарен.


Сообщение отредактировал Gizmors - Суббота, 27.02.2010, 15:57
 
GizmorsДата: Суббота, 27.02.2010, 15:59 | Сообщение # 4
Рядовой
Группа: Пользователи
Сообщений: 4
Репутация: 0
Статус: Offline
проект под именем 23
 
my-avrДата: Суббота, 27.02.2010, 16:08 | Сообщение # 5
Admin
Группа: Администраторы
Сообщений: 79
Репутация: 10
Статус: Offline
Gizmors, у меня и температуры от датчиков не видно...
 
GizmorsДата: Вторник, 02.03.2010, 20:04 | Сообщение # 6
Рядовой
Группа: Пользователи
Сообщений: 4
Репутация: 0
Статус: Offline
в свойствах датчика в протеусе "Automatic Serialization" должно стоять на всех датчиках "yes"
В железе все работает .

Добавлено (27.02.2010, 16:13)
---------------------------------------------

Quote (my-avr)
Gizmors, у меня и температуры от датчиков не видно...

Протеус у меня 7.6

Добавлено (27.02.2010, 16:17)
---------------------------------------------
Да, еще надо частоту внутреннего генератора поставить 8 МГц

Добавлено (02.03.2010, 20:04)
---------------------------------------------
Судя по топикам, тут ни кто не поможет, жаль.

 
Форум » Микроконтроллеры » Вопросы по МК » Помогите добавить к проекту (Атмега 8)
  • Страница 1 из 1
  • 1
Поиск:

Хостинг от uCoz