Помогите найти ошибку

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
ishutinvalera48
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Чт июн 21, 2012 21:15:56

Помогите найти ошибку

Сообщение ishutinvalera48 »

Код пишу в CodeVisionAVR, мк Atmega48.

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

#include <mega48.h>
#include <delay.h>

//0b00000001 --1
//0b00000010 --2
//0b00000011 --3
//0b00000100 --4
//0b00000101 --5
//0b00000110 --6
//0b00000111 --7
//0b00001000 --8
//0b00001001 --9
//0b00001010 --0
//0b00001011 --*
//0b00001100 --#

void main(void) {
  DDRC=0xff;
  DDRD-0x00;
  while (1) {
   if (PIND == 0b00000001) {
    PORTC.0 = 1;
   }           
   else {
    PORTC.0 = 0;
   }
  }
 
  }

почему проверка условия проходит только один раз?
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7357
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: Помогите найти ошибку

Сообщение uldemir »

ishutinvalera48 писал(а):DDRD-0x00;
?
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
ishutinvalera48
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Чт июн 21, 2012 21:15:56

Re: Помогите найти ошибку

Сообщение ishutinvalera48 »

Исправил но всё равно проверка проходит только 1 раз
Аватара пользователя
Ser60
Друг Кота
Сообщения: 3780
Зарегистрирован: Ср дек 24, 2008 09:58:58

Re: Помогите найти ошибку

Сообщение Ser60 »

Покажите схему.
ishutinvalera48
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Чт июн 21, 2012 21:15:56

Re: Помогите найти ошибку

Сообщение ishutinvalera48 »

Вот
Вложения
Безымянный рисунок.png
(14.36 КБ) 486 скачиваний
Аватара пользователя
Flasher
Мудрый кот
Сообщения: 1802
Зарегистрирован: Ср сен 07, 2011 21:40:30

Re: Помогите найти ошибку

Сообщение Flasher »

ошибка зарыта в каких-то цепочках ДНК.
Аватара пользователя
Ser60
Друг Кота
Сообщения: 3780
Зарегистрирован: Ср дек 24, 2008 09:58:58

Re: Помогите найти ошибку

Сообщение Ser60 »

Вероятно, как говорится, проблема между комьютером и стулом :))
Уточните, что значит "проверка условия проходит только один раз" ???
Аватара пользователя
Olecorp
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Пт май 21, 2010 01:15:10
Откуда: Латвия

Re: Помогите найти ошибку

Сообщение Olecorp »

Лень проверять, но разве свободные лапы контроллера не прочитаются как "1" (из-за внутренних подтягивающих резисторов)? И как, в таком случае может прочитаться 0b000...?
Попробуй завести кнопки на корпус, а не на питание.
И в любом случае, если ты хочешь проверить состояние одного бита, то проверяй один бит:

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

if (PIND & 0b00000001) {
Soir
Друг Кота
Сообщения: 3956
Зарегистрирован: Ср окт 14, 2009 10:37:49
Откуда: Украина

Re: Помогите найти ошибку

Сообщение Soir »

ishutinvalera48 писал(а):Исправил но всё равно проверка проходит только 1 раз

??? Поставьте breakpoint или прогоните в пошаговом режиме симуляции и посмотрите сколько раз...

Olecorp правильно заметил по поводу подтяжки выводов МК. По крайней мере для Proteus.
Вложения
ATMega48_test.zip
(8.08 КБ) 269 скачиваний
Аватара пользователя
mazda
Потрогал лапой паяльник
Сообщения: 382
Зарегистрирован: Сб фев 18, 2012 14:50:22

Re: Помогите найти ошибку

Сообщение mazda »

две причины
1-кнопки нужно повечсить на ноль, а не на питание, при чтении порта, он сам (как сказали ранее и как написано в даташите) подтянут на +5 в самой мк
2-проверяй так if ( PIND & 0b00000001==0 ) то...иначе...
здесь 1 ставь на проверяемой ноге, пришёл ЗЕМЛЯ сигнал - сработает, не пришол - там будет +5, логика не обнулится и не сработает условие.
я его в гугл на дрц прогнал, вы знаете, пи-када нет.
Закрыто

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