реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Новый вопрос возник., Опять новичек, опять простейшее (имхо).
ps1x
сообщение Mar 18 2006, 02:21
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



Написал программу для Avr MEGA 8, которая занимается тем, что следит за состоянием кнопки на ножке PORTC.0 (ножка - кнопка - Vcc) и если кнопка нажата, то загорается диод, подключенный к ножке PORTB.0. Вся проблема в том, что ISIS напрочь отказывается выполнять программу, т.е. вне зависимости от того, нажата кнопка, или нет, светодиод либо горит либо нет (в зависимости от начальных условий). Бъюсь уже ап стену, но не помогает, может вы поможете?
Вот исходник:


/*****************************************************
This program was produced by the
CodeWizardAVR V1.24.5 Standard
Automatic Program Generator
© Copyright 1998-2005 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
e-mail:office@hpinfotech.com

Project :
Version :
Date : 18.03.2005
Author : ps1x
Company : ccc
Comments:


Chip type : ATmega8
Program type : Application
Clock frequency : 4,000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
*****************************************************/

#include <mega8.h>

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port B initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTB=0x00;
DDRB=0xFF;

// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

for (;;)

{
while (PORTC.0 & 0);
{
PORTB.0=0;
while (PORTC.0 & 1);
{
PORTB.0 = 1;
}
}
}
Go to the top of the page
 
+Quote Post
defunct
сообщение Mar 18 2006, 02:43
Сообщение #2


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Код
for(;;)
{
   if (PC0)   // или PORTC.0
      PORTB.0 = 1;
   else
      PORTB.0 = 0;
}


Если кнопка замыкает пин порта с GND и отсутствует pull-up резистор, то необходимо сперва подключить внутренний pull-up резистор:

Код
PORTC.0 = 1; // Подключаем внутренний pull-up резистор
for(;;)
{
   if (PC0)   // или PORTC.0  
      PORTB.0 = 1;
   else
      PORTB.0 = 0;
}


Сообщение отредактировал defunct - Mar 18 2006, 03:52
Go to the top of the page
 
+Quote Post
ps1x
сообщение Mar 18 2006, 02:55
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



Не работает :____((
Go to the top of the page
 
+Quote Post
defunct
сообщение Mar 18 2006, 03:02
Сообщение #4


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(ps1x @ Mar 18 2006, 04:55) *
Не работает :____((

Дык кнопку с GND соедините и см. второй вариант кода с внутренним pull-up.
Go to the top of the page
 
+Quote Post
ps1x
сообщение Mar 18 2006, 03:07
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



Приложил рисунок для ясности дела.
Еще, может быть дело в симуляторе? или в CVAVR?


Рисунок в момент работы симулятора, второй вариант тоже пробовал, однако не помогло...

Еще настораживает момент, что (см рисунок) ярлычки рядом с кнопкой и на МК красные (на них Vcc???), хотя прошивка залита с 0 на всех разьемах порта C...
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
defunct
сообщение Mar 18 2006, 03:20
Сообщение #6


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Симулятор это дело десятое.. Как вы на нем нажатие кнопки эмулируете?
Прикрепил картинку с типовой схемой включения кнопки.
Прикрепленные изображения
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
ps1x
сообщение Mar 18 2006, 03:30
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



Нажатие на кнопку симулирую просто - нажимаю на нее (т.е. кликаю, при этом изображение кнопки меняется и цветные ярлычки тоже, значит вроде бы меняется напряжение на соответствующей ножке).
Такой вариант подключения тоже не сработал angry.gif sad.gif ohmy.gif
Go to the top of the page
 
+Quote Post
defunct
сообщение Mar 18 2006, 03:40
Сообщение #8


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(ps1x @ Mar 18 2006, 05:30) *
Такой вариант подключения тоже не сработал angry.gif sad.gif ohmy.gif

Абаждите, а в CV часом порты не разнесены?
регистр ввода - PINX
регистр вывода - PORTX
Go to the top of the page
 
+Quote Post
ps1x
сообщение Mar 18 2006, 03:44
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



УРАААААААААА!!!!!!!!! ОГРОМНЕЙШЕЕ СПАСИБО!!!!!! Действительно порты разнесены )))) правда я об этом не знал... (( чтож учиться учиться и еще раз учиться!
Go to the top of the page
 
+Quote Post
defunct
сообщение Mar 18 2006, 03:49
Сообщение #10


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(ps1x @ Mar 18 2006, 05:44) *
Действительно порты разнесены )))) правда я об этом не знал... (( чтож учиться учиться и еще раз учиться!

Дык, а я с определениями портов в CV не знаком т.к. с ним не работал.. Понадеялся, что ваш код был изначально правильный. wink.gif
Ну зато теперь кнопку включите по типовой схеме..
Go to the top of the page
 
+Quote Post
MakFatum
сообщение Mar 18 2006, 07:51
Сообщение #11


Участник
*

Группа: Новичок
Сообщений: 54
Регистрация: 7-12-05
Пользователь №: 11 912



не могу понять, что значит разнесены порты?...
я тоже CVavr пользуюсь...
Go to the top of the page
 
+Quote Post
SpyBot
сообщение Mar 18 2006, 08:17
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 285
Регистрация: 5-11-05
Пользователь №: 10 491



Цитата(MakFatum @ Mar 18 2006, 10:51) *
не могу понять, что значит разнесены порты?...
я тоже CVavr пользуюсь...

Это значит, что чтобы вывести значение в порт надо написать PORTx, а чтобы считать значение - PINx.
Go to the top of the page
 
+Quote Post
MakFatum
сообщение Mar 18 2006, 12:48
Сообщение #13


Участник
*

Группа: Новичок
Сообщений: 54
Регистрация: 7-12-05
Пользователь №: 11 912



ага, понятно....просто термин "разнесены" сбил с толку...
Вот вопрос по синтаксису...

for (;;)

вот это в скобках (;;) - что обозначает?...
Попробую догадаться: Бесконечный цикл?
Go to the top of the page
 
+Quote Post
AVR
сообщение Mar 18 2006, 13:00
Сообщение #14


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Цитата(MakFatum @ Mar 18 2006, 15:48) *
Вот вопрос по синтаксису...
for (;;)
вот это в скобках (;;) - что обозначает?...
Попробую догадаться: Бесконечный цикл?

Да, это бесконечный цикл. Ведь в for первое это начальное значение, второе условие выхода из цикла, третье - выражение, которое выполняется в конце каждого цикла. т.к. ничего не укаазно, то значит и выхода из цикла не будет.
Сам лично предпочитаю while(true), красивее смотрится... smile.gif


--------------------
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Mar 18 2006, 13:11
Сообщение #15


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Цитата
Сам лично предпочитаю while(true), красивее смотрится... smile.gif

Красиво конечно, но как правило не оптимально, будут лишние операторы.
До jmp label компилируется именно for (;;)


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 15th July 2025 - 13:18
Рейтинг@Mail.ru


Страница сгенерированна за 0.01489 секунд с 7
ELECTRONIX ©2004-2016