Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Тема закрыта

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

Чт июн 28, 2012 20:19:05

Код пишу в 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;
   }
  }
 
  }

почему проверка условия проходит только один раз?

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

Чт июн 28, 2012 20:21:38

ishutinvalera48 писал(а):DDRD-0x00;
?

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

Чт июн 28, 2012 20:24:21

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

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

Чт июн 28, 2012 20:40:08

Покажите схему.

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

Чт июн 28, 2012 20:41:48

Вот
Вложения
Безымянный рисунок.png
(14.36 KiB) Скачиваний: 459

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

Чт июн 28, 2012 20:48:11

ошибка зарыта в каких-то цепочках ДНК.

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

Чт июн 28, 2012 20:54:47

Вероятно, как говорится, проблема между комьютером и стулом :))
Уточните, что значит "проверка условия проходит только один раз" ???

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

Чт июн 28, 2012 22:48:59

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

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

Пт июн 29, 2012 09:33:49

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

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

Olecorp правильно заметил по поводу подтяжки выводов МК. По крайней мере для Proteus.
Вложения
ATMega48_test.zip
(8.08 KiB) Скачиваний: 246

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

Пт июн 29, 2012 11:51:13

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