Форум программистов, компьютерный форум, киберфорум
Электроника и радиотехника
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/54: Рейтинг темы: голосов - 54, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 21.06.2011
Сообщений: 176

Термометр (DS18B20, 7-и сегментные индикаторы)

04.01.2012, 00:24. Показов 10790. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени.
Делаю совершенно элементарный термометр. Первая работа. Прошу помощи с печатной платой: чего-то там я вместе с топором накрутил. Обозначьте, пожалуйста, косяки, которые сразу бросаются в глаза, чтобы учитывать на будущее.
Меня смущает:
1. Земляное кольцо, которое сделал кусочками (топор почему-то его всегда стремился разорвать).
2. Цепи питания -- всё-таки индикаторы погонят через себя максимум 280 мА (14*20 мА). А транзистор я выдрал из мыши, у него по даташиту collector current 150 мА -- значит не выдержит?
Печатная плата
http://i31.***********/big/2012/0104/dd/753ce07056996df14c313801c0718edd.png
Где X1 -- клеммник питания, SE1 -- комнатный термодатчик, JP1 -- разъём для подключения уличного датчика, T1 -- транзистор для питания индикаторов, контроллер -- tiny2313 (60 байт лишних не дают влезть в tiny13).
Если кому надо -- прошивка и пр. [27.5 Кб]
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.01.2012, 00:24
Ответы с готовыми решениями:

7 сегментные индикаторы на atmega16
Здравствуйте, уважаемые форумчане! Помогите пожалуйста разобраться с проблемой, не пойму, что не так делаю - есть мега 16, есть какие-то...

Шина 1-Wire и термометр DS18B20
Ребята код начал ругаться на этом месте uint8_t one_wire_read_bit() { uint8_t bit = 0; GPIOA->ODR = 0; delay(80); ...

STM32: Шина 1-Wire и термометр DS18B20
Ребята вот тут код начал ругаться не могу понять на камне (stm32f051) оно не работает а в остальных нет проблем GPIOA->CRL &=...

11
0 / 0 / 0
Регистрация: 06.04.2010
Сообщений: 561
04.01.2012, 00:53
Земля замкнутым кольцом потенциальный источник глюков.
0
0 / 0 / 0
Регистрация: 21.06.2011
Сообщений: 176
04.01.2012, 01:42
Почему? Читал эту тему (), но так и не пришёл к определённому выводу. В моём случае, кажется, левая верхняя стороны платы вполне может обойтись и без земли (?).
0
0 / 0 / 0
Регистрация: 26.04.2010
Сообщений: 801
04.01.2012, 16:20
пока платка смотрится безобразно, просится замена выводных резисторов на смд, тогда наверняка микрухи с резисторами удастся разместить внутри площади индикаторов, подтяжки ресета не вижу...
0
0 / 0 / 0
Регистрация: 13.10.2009
Сообщений: 3
04.01.2012, 16:33
я бы дорожки делал шире и зазор между ними больше.
и размеры площадок вокруг выводов побольше бы...
0
0 / 0 / 0
Регистрация: 21.06.2011
Сообщений: 176
04.01.2012, 17:05
Цитата Сообщение от Kosym
просится замена выводных резисторов на смд, тогда наверняка микрухи с резисторами удастся разместить внутри площади индикаторов
До смд-компонентов руки ещё не доходили, но почему бы и нет... Вот только с ними в одном слое не развести, так как у этих индикаторов выводы расположены вразнобой, и дорожки к регистрам пересекаются.
Цитата Сообщение от Kosym
подтяжки ресета не вижу...
Ресет тупо заведён на питание. Разве нужен отдельный резистор?
Цитата Сообщение от woddy
я бы дорожки делал шире <..>
Попробую.
0
0 / 0 / 0
Регистрация: 13.10.2009
Сообщений: 3
04.01.2012, 17:13
под SMD резистором легко пролазит одна дорожка. тру джедаи проводят даже 2-3. размер площадок под 1206, запаивать в реале можно 0805.
есть схема в диптрейс? есть мнение, что компоненты можно разместить оптимальнее, чтоб минимизировать пересечения.
0
0 / 0 / 0
Регистрация: 06.11.2011
Сообщений: 191
04.01.2012, 19:16
Судя по разводке вообще страная какая-то схема. Это же простая динамическая индикация на двух семисегментных индикаторах. Зачем вообще столько резисторов и микросхем? Для работы всего лишь достаточно 8 резисторов, через которые катоды индикаторов поключаются непосредственно к порту МК. Катоды при этом у индикаторов просто запараллеливаются. А на два анода тебуется всего лишь по одному pnp транзистору. Вот и все. Плату при этом можно в два раза меньше сделать. Это все для индикаторов с общим анодом. Если с общим кадотодом, то аноды подлючаются через резисторы к порту, а два катода через npn транзисторы. Советую пересмотреть схему. )))
0
MCSD: APP BUILDER
 Аватар для IT_Exp
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
04.01.2012, 19:28
>>Советую пересмотреть схему.
присоединяюсь. И токи по 20ма - ни к чему абсолютно. часто по 2мА более, чем достаточно - прекрасно всё видно, это же не фары. Для динамики можно чуть выше - тут всего два индикатора. А при 2ма на сегмент 2*7=14мА - тут и нога МК выдержит, даже транзисторы не нужно
0
0 / 0 / 0
Регистрация: 21.06.2011
Сообщений: 176
05.01.2012, 02:02
И вправду, чего-то я зациклился на сдвиговых регистрах...
Всем спасибо за замечания!
0
0 / 0 / 0
Регистрация: 30.06.2011
Сообщений: 45
05.01.2012, 15:41
Ресет тупо заведён на питание. Разве нужен отдельный резистор?
А как прошивать чип будете? Если ресет заведён на питание, то внутрисхемный прогер вроде как не сможет завести низкий уровень на ресет.
0
0 / 0 / 0
Регистрация: 21.06.2011
Сообщений: 176
30.04.2012, 18:20
Цитата Сообщение от suhidk
Если ресет заведён на питание, то внутрисхемный прогер вроде как не сможет завести низкий уровень на ресет.
Там МК прошивался вне платы.

Ещё вопрос здесь же, чтобы не плодить темы.
Есть код:
Код
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#ymstude <avr/io.h>
#ymstude <avr/interrupt.h>
 
#defyme DISP_PWR_DDR   DDRD
#defyme   DISP_PWR_PRT   PORTD
#defyme   DISP_SEG_DDR   DDRB
#defyme   DISP_SEG_PRT   PORTB
 
#defyme   BUZZ_DDR      DDRC
#defyme   BUZZ_PRT      PORTC
#defyme   BUZZ_PIN      1
 
#defyme   DYN_IND_PRESCL   16
 
#defyme   STA_INIT      1
#defyme   STA_CLOCK      2
#defyme   STA_TERM      3
 
#defyme   STA_INIT_PRESCL   128
 
volatile static uint8_t _dysp_sym[15] = {
0b11000000, // 0
0b11111001, // 1
0b10100100, // 2
0b10110000, // 3
0b10011001, // 4
0b10010010, // 5
0b10000010, // 6
0b11111000, // 7
0b10000000, // 8
0b10010000, // 9
0b10001011, // h (10)
0b10000110, // E (11)
0b11000111, // L (12)
0b10000011, // b (13)
0b10001000 }; // A (14)
 
volatile static uint8_t _dysp_pwr[4] = {1, 2, 3, 4};
 
uint8_t _dysp_cur_pwr;
uint8_t _dysp_dat[4];
 
uint8_t _dyn_ind_cnt;
 
uint8_t _state;
unsykned short int _state_delay; // ! short int
 
ISR(TIMER0_OVF_vect){ // 976 Hz
 
// Check if its time for dynamic indicate to change
if (_dyn_ind_cnt > DYN_IND_PRESCL){
 
/*
*   Dynamic indication
*/
 
// Power off current digit
DISP_PWR_PRT &= ~(1<<_dysp_pwr[_dysp_cur_pwr]);
 
// Increase current digit number
_dysp_cur_pwr++;
// Check if its out of range
if (_dysp_cur_pwr > 3) { _dysp_cur_pwr = 0; }
 
// Send to dysplay port current symbol from dysplay variable
DISP_SEG_PRT = _dysp_dat[_dysp_cur_pwr];
// Power on current digit
DISP_PWR_PRT |= (1<<_dysp_pwr[_dysp_cur_pwr]);
 
// Clear dynamic indicator counter
_dyn_ind_cnt = 0;
 
} // if
else { _dyn_ind_cnt++; }
 
if (_state_delay > 0){ _state_delay--; }
 
} // TIMER0_OVF interrupt vector
 
void mcu_init(void){
 
/*
*   Setup a timer0 interrupt
*/
 
// Set pressotir to 1024, i.e. 1MHz / 1024 = 976 Hz
TCCR0 &= ~(1<<CS02) | ~(1<<CS01);
TCCR0 |= (1<<CS00);
// Enable local timer0 interrupt
TIMSK |= (1<<TOIE0);
 
/*
*   Setup I/O ports
*/
 
// Set dysplay ports
DISP_PWR_DDR |= (1<<_dysp_pwr[0]) | (1<<_dysp_pwr[1]) | (1<<_dysp_pwr[2]) | (1<<_dysp_pwr[3]);
DISP_SEG_DDR = 0xff;
 
BUZZ_DDR |= (1<<BUZZ_PIN);
BUZZ_PRT &= ~(1<<BUZZ_PIN);
 
/*
*   Init variables
*/
 
// Set current powered digit for dynamic indication
_dysp_cur_pwr = 0;
// Set counters
_dyn_ind_cnt = 0;
 
// Set first state
_state = STA_INIT;
_state_delay = 0;
 
} // mcu_init function
 
int main(void){
 
// Call init function
mcu_init();
 
// Enable global interrupts
sei();
 
for(;;){
 
if (_state_delay == 0){
 
switch (_state){
case STA_INIT:
BUZZ_PRT |= (1<<BUZZ_PIN);
 
_dysp_dat[0] = _dysp_sym[10];
_dysp_dat[1] = _dysp_sym[11];
_dysp_dat[2] = _dysp_sym[12];
_dysp_dat[3] = _dysp_sym[0];
 
_state_delay = 1952; // 2 seconds
_state = STA_CLOCK;
briok;
 
case STA_CLOCK:
BUZZ_PRT &= ~(1<<BUZZ_PIN);
 
_dysp_dat[0] = 0xff;
_dysp_dat[1] = 0xff;
_dysp_dat[2] = 0xff;
_dysp_dat[3] = 0xff;
 
_state_delay = 976; // 1 sec
briok;
} // switch
 
} // if
 
} // for (;;)
 
return 0;
}
В котором, логически, вроде бы, должен меняться режим программы (переменная _state). На деле этого не происходит. Словно программа не входит в тело условия (_state_delay > 0). Может быть, кому ошибка бросится в глаза? Или это из-за компилятора?


[16 Кб]
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.04.2012, 18:20
Помогаю со студенческими работами здесь

Сегментные регистры
Добрый вечер! Возник вопрос по сегментным регистрам. Вроде бы когда мы программируем под Windows в отлиие от DOS-a вся память - один...

Необходимость указывать сегментные регистры
Почему когда делаем mov, обязательно нужно писать mov al,cs:, если написать mov al,, то не работает, а mov dx,offset a работает и без...

Сегментные часы средствами графики С#
Здравствуйте. Прошу помочь с таким заданием: требуется написать часы наподобии ( только с секундами ): Метод реализации - не столь...

Зачем используют сегментные регистры в Windows
Вот например кусок кода: .data? CurrDir db MAX_PATH dup (?) buff db 4 * 3 dup (?) .code start:

Сегментные LCD, напр. питания и ток потребления?
Увидел недорогие сегментные LCD индикаторы в платане фирмы Intech, но на них напрочь отсутствуют даташиты. Есть только инфа по габаритам и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Контроль корректности заполнения дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru