|
ATtiny 2313 |
|
|
|
May 6 2010, 13:10
|
Участник

Группа: Участник
Сообщений: 32
Регистрация: 6-05-10
Пользователь №: 57 112

|
Добрый день, возникли трудности с работой с МК. Это мой первый практический опыт в паянии и работе с МК. Есть схема ультразвукового дальномера, пока собрал кусок: питание, кнопки управление, МК и 7сегм индикатор. Столкнулся с проблемой, когда начал писать простенькую прошивку. Цель прошивки: просто отображать какие-то крякозяблы поочереди на 3х знакоместах (использую динамику). Пишу и шьюсь через винавр: Код #include <avr/io.h> void delay_7s() { unsigned int k, l; for(l=0; l<1; l++) { for(k=0;k<65000;k++){} } } void main() { DDRB = 0xFF; DDRD = 0xFF; for(;;) { PORTB = 0b00110011; PORTD = 0x40; delay_7s(); PORTD = 0x0; // PORTB = 0b01010101; PORTD = 0x20; delay_7s(); PORTD = 0x0; // PORTB = 0b11001100; PORTD = 0x10; delay_7s(); PORTD = 0x0; } } Не могу понять почему, но информация отображается сразу на всех знакоместах. Проверял прошивку в Протеусе, там все работает. Следовательно, проблема со спаянной схемой. Меня настараживает что моя тинька, когда на выводах лог 0, выдает 1,2-1,3 В !!!. Следовательно, напряжение после ограничивающих резюков перед транзисторами, колеблется от 0,74 В (когда на выводе PD6 (PD5 или PD4) лог 0) и до 0,82 В (когда лог 1). Думаю, что проблема в этом. То есть напряжения 0,74 и 0,82 способствуют постоянному открытию транзисторов. Опыта мало, так что надеюсь на ваше помощь!
Сообщение отредактировал rezident - May 8 2010, 23:57
Причина редактирования: Оформление цитаты исходника.
Эскизы прикрепленных изображений
|
|
|
|
|
 |
Ответов
|
May 12 2010, 21:29
|
Участник

Группа: Участник
Сообщений: 32
Регистрация: 6-05-10
Пользователь №: 57 112

|
А если использовать такой код: Код for(unsigned char i = 25; i > 0; i--) { PORTD |= 0b00000001; //WAITING(); _delay_us(12.5); PORTD &= 0b11111110; _delay_us(12.5); //WAITING(); } читаю док на функцию: Код void _delay_ms (double __ms) В симмуляторе аврстудио не хочет делать паузу в 12,5 мкс, вместо этого получаю 12 мкс. ЗЫ Еще возник вопрос по функции дилей: Пытался по очереди выводить что-то на знакоместа, код: Код PORTB = 0x01; PORTD = 0x10; _delay_ms(1000); PORTD = 0x00; PORTB = 0x02; PORTD = 0x20; _delay_ms(1000); PORTD = 0x00; PORTB = 0x03; PORTD = 0x40; _delay_ms(1000); PORTD = 0x00; Смотрю док: Код The maximal possible delay is 262.14 ms / F_CPU in MHz.
When the user request delay which exceed the maximum possible one, _delay_ms() provides a decreased resolution functionality. In this mode _delay_ms() will work with a resolution of 1/10 ms, providing delays up to 6.5535 seconds (independent from CPU frequency). The user will not be informed about decreased resolution. Я так понял, 1 секунду оно мне все-таки выдаст... Идем дальше... В мейкфайле ставлю частоту 4000000, задержка составляет 4 сек, а не 1 сек. Ставлю 1000000 и, о чудо, задержка равна 1 сек. Кто может объяснить почему? Да-да, я думал, что понял в чем суть, но ошибался. ЗЫ Забыл добавить, оптимизация -Os
Сообщение отредактировал indi_88 - May 12 2010, 21:51
|
|
|
|
|
May 13 2010, 06:50
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(indi_88 @ May 13 2010, 00:29)  А если использовать такой код: То вы не сможете в это время выводить что-то на индикатор. А если выводить на индикатор в прерываниях (что, в общем-то, грамотоно), то прерывания будут вносить искажения в ваши задержки. Изучите таймер - он может формировать такие импульсы железно на выводах OCx Цитата(indi_88 @ May 13 2010, 00:29)  Идем дальше... В мейкфайле ставлю частоту 4000000, задержка составляет 4 сек, а не 1 сек. Ставлю 1000000 и, о чудо, задержка равна 1 сек. Кто может объяснить почему? Потому что процессор с завода поставляется с фузами, прошитыми на тактирование от внутреннего RC генератора 8МГц и включенным делителем (CVDIV) на 8. Отсюда получается 1 МГц тактовой частоты.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
Сообщений в этой теме
indi_88 ATtiny 2313 May 6 2010, 13:10 GDI Все ноги питания и земли подключили? У биполярных ... May 6 2010, 13:22 indi_88 Исправил ситуацию с принтскрином.
Проблем с земле... May 6 2010, 13:30 akl Может поможет временное подключение лапы RESET к +... May 6 2010, 13:37 AHTOXA Цитата(indi_88 @ May 6 2010, 19:10) инфор... May 6 2010, 13:45 Сергей Борщ Используйте кнопку для оформления исходников. Ина... May 6 2010, 14:06 indi_88 Я б изменил код в теме, но пропала кнопочка едит(
... May 6 2010, 14:46 AHTOXA Цитата(Сергей Борщ @ May 6 2010, 20:06) О... May 6 2010, 15:00 indi_88 ЦитатаВы очень своеобразно трактуете понятие ... May 6 2010, 15:08 AHTOXA Цитата(indi_88 @ May 6 2010, 21:08) Я пра... May 6 2010, 15:41 Сергей Борщ Цитата(indi_88 @ May 6 2010, 17:46) Что в... May 6 2010, 16:24 indi_88 ЦитатаЗначит вы неясно выражаете свои мысли
Прошу ... May 6 2010, 17:58 Сергей Борщ Цоколевка похожа на правду, транзистор npn.Цитата(... May 6 2010, 21:04 indi_88 Купил новый мк и транзисторы, попытаюсь сделать но... May 7 2010, 14:50 -SANYCH- Попробуйте вообще убрать транзисторы и индикатор с... May 11 2010, 08:15 indi_88 Собрал кусок схемы на новом мк и транзисторах, с н... May 12 2010, 12:42 -SANYCH- Такие вещи лучше делать таймером.
Если хотите узн... May 12 2010, 13:14 -SANYCH- ЦитатаВ симмуляторе аврстудио не хочет делать пауз... May 13 2010, 07:58 indi_88 ЦитатаПотому что процессор с завода поставляется с... May 13 2010, 09:23 Сергей Борщ Цитата(indi_88 @ May 13 2010, 12:23) но я... May 13 2010, 09:44 indi_88 Хм, я начинаю понимать, то есть если я в мейкфайле... May 13 2010, 09:57 Сергей Борщ Цитата(indi_88 @ May 13 2010, 12:57) Хм, ... May 13 2010, 10:10 indi_88 Через понипрог убрал галочку с CKDIV и все заработ... May 13 2010, 10:28 Сергей Борщ Цитата(indi_88 @ May 13 2010, 13:28) Чере... May 13 2010, 10:53 indi_88 Спасибо, но я шью через винавр и использую com-про... May 13 2010, 11:02
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|