Страница 1 из 1

Бегущие огни

Добавлено: Вт мар 20, 2012 23:13:33
SH_Pasha
Вот написал свое первое приложение на codevision:

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

#include <tiny13.h>
#include <delay.h>

void main(void)
{     

DDRB  = 0xFF;   
DDRB.5=0x00;    
while (1 == 1) {
if (PINB.5 == 1)
{
PORTB.4=1;
delay_ms(50);
PORTB.3=1;
delay_ms(50);
PORTB.2=1;
delay_ms(50);
PORTB.1=1;
delay_ms(50);
PORTB.0=1;
delay_ms(50);
PORTB.4=0;
delay_ms(50);
PORTB.3=0;
delay_ms(50);
PORTB.2=0;
delay_ms(50);
PORTB.1=0;
delay_ms(50);
PORTB.0=0;
delay_ms(50);
}
}
     };
Но не получается одно: как сделать так, чтоб если на 5 портб нет питания, светодиоды все вместе просто мигали. Пробовал через else, что-то не получается :(
Заранее спасибо :)

Re: Бегущие огни

Добавлено: Ср мар 21, 2012 00:28:23
FreshMan
а что это вы делаете сей командой ?

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

DDRB.5=0x00;

Re: Бегущие огни

Добавлено: Ср мар 21, 2012 06:42:06
pyzhman
Как пробовали?

Re: Бегущие огни

Добавлено: Ср мар 21, 2012 11:35:40
SH_Pasha
FreshMan писал(а):а что это вы делаете сей командой ?

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

DDRB.5=0x00;
Устанавливаю порт как входной.
Пробовал через else, не работает

Re: Бегущие огни

Добавлено: Ср мар 21, 2012 12:27:40
Engineer_Keen
pyzhman писал(а):Как пробовали?
SH_Pasha писал(а):Пробовал через else, не работает
Звучит как:
"- Я случайно базу данных...
- Случайно что?
- Базу данных" :)))
Код приведите, неизвестно куда вы там else воткнули...

Re: Бегущие огни

Добавлено: Ср мар 21, 2012 12:34:03
pyzhman
2Engineer_Keen: :) . Я уж было отрекся.

Re: Бегущие огни

Добавлено: Ср мар 21, 2012 12:36:47
SH_Pasha
Engineer_Keen, вставлял else по шаблону

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

#include <tiny13.h>
#include <delay.h>

void main(void)
{     

DDRB  = 0xFF;   
DDRB.5=0x00;    
while (1 == 1) {
if (PINB.5 == 1)
{
PORTB.4=1;
delay_ms(50);
PORTB.3=1;
delay_ms(50);
PORTB.2=1;
delay_ms(50);
PORTB.1=1;
delay_ms(50);
PORTB.0=1;
delay_ms(50);
PORTB.4=0;
delay_ms(50);
PORTB.3=0;
delay_ms(50);
PORTB.2=0;
delay_ms(50);
PORTB.1=0;
delay_ms(50);
PORTB.0=0;
delay_ms(50);
}
else {
PORTB.4=1;
PORTB.3=1;
PORTB.2=1;
PORTB.1=1;
PORTB.0=1;
delay_ms(100);
PORTB.4=0;
PORTB.3=0;
PORTB.2=0;
PORTB.1=0;
PORTB.0=0;
delay_ms(100);
}
}
     };

Re: Бегущие огни

Добавлено: Ср мар 21, 2012 12:46:19
pyzhman
Программа красивая. Пятый вывод без питания не означает болтающийся в воздухе(предполагаю), надо его припаять к земле/кнопкой подключить к земле.

Re: Бегущие огни

Добавлено: Ср мар 21, 2012 12:51:30
SH_Pasha
pyzhman, так и сделано :) в протеусе проверял, работает, но как только добавляю else, перестает работать :(
И еще одна проблема, скачал с официального сайта ponyprog2000, но в нем нет Attiny13 :(. Можете скинуть понипрог, поддерживающий этот микроконтроллер?

Re: Бегущие огни

Добавлено: Ср мар 21, 2012 14:01:59
Engineer_Keen
А теперь ВНИМАНИЕ!!! Вы в курсе, что используемая вами нога PB5 является ногой сброса, и для работы вашей программы надо отключать фьюз RSTDISBL? После этого вы уже не сможете программировать этот МК по ISP.
А то потом будут вопросы, типа "почему у меня не получается больше прошить МК?"...

Что если if (PINB.5 == 1) поменять на if (PINB.5 == 0)? Не спец в Си, но вот такой код работает (WinAVR):

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

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

int main(void)
{     

DDRB= 0x1F;   
while (1 == 1) {
asm("nop");
if (PINB&=~(1<<PB5))
{
asm("nop");
PORTB|=(1<<PB4);
_delay_ms(50);
PORTB|=(1<<PB3);
_delay_ms(50);
PORTB|=(1<<PB2);
_delay_ms(50);
PORTB|=(1<<PB1);
_delay_ms(50);
PORTB|=(1<<PB0);
_delay_ms(50);
PORTB&=~(1<<PB4);
_delay_ms(50);
PORTB&=~(1<<PB3);
_delay_ms(50);
PORTB&=~(1<<PB2);
_delay_ms(50);
PORTB&=~(1<<PB1);
_delay_ms(50);
PORTB&=~(1<<PB0);
_delay_ms(50);
}
else {
PORTB|=(1<<PB4);
PORTB|=(1<<PB3);
PORTB|=(1<<PB2);
PORTB|=(1<<PB1);
PORTB|=(1<<PB0);
_delay_ms(100);
PORTB&=~(1<<PB4);
PORTB&=~(1<<PB3);
PORTB&=~(1<<PB2);
PORTB&=~(1<<PB1);
PORTB&=~(1<<PB0);
_delay_ms(100);
}
}
};

Индусы в восторге :))

Re: Бегущие огни

Добавлено: Ср мар 21, 2012 15:57:00
SH_Pasha
Engineer_Keen, выдало порядка 25 ошибок, но после исправления кода до такого:

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

#include <tiny13.h>
#include <delay.h>

void main(void)
{     

DDRB= 0x1F;   
while (1 == 1) {
if (PINB&=~(1<<PORTB5))
{
PORTB|=(1<<PORTB4);
delay_ms(50);
PORTB|=(1<<PORTB3);
delay_ms(50);
PORTB|=(1<<PORTB2);
delay_ms(50);
PORTB|=(1<<PORTB1);
delay_ms(50);
PORTB|=(1<<PORTB0);
delay_ms(50);
PORTB&=~(1<<PORTB4);
delay_ms(50);
PORTB&=~(1<<PORTB3);
delay_ms(50);
PORTB&=~(1<<PORTB2);
delay_ms(50);
PORTB&=~(1<<PORTB1);
delay_ms(50);
PORTB&=~(1<<PORTB0);
delay_ms(50);
}
else {
PORTB|=(1<<PORTB4);
PORTB|=(1<<PORTB3);
PORTB|=(1<<PORTB2);
PORTB|=(1<<PORTB1);
PORTB|=(1<<PORTB0);
delay_ms(100);
PORTB&=~(1<<PORTB4);
PORTB&=~(1<<PORTB3);
PORTB&=~(1<<PORTB2);
PORTB&=~(1<<PORTB1);
PORTB&=~(1<<PORTB0);
delay_ms(100);
}
}
};
Работает точно так же как и моя версия, т.е. когда нажимаю на кнопку, ничего не происходит, просто светодиоды перестают переключаться.
Наверное это из-за того, что я компилировал в CodeVision, а WinAvr у меня не устанавливается, хоть и делал все по инструкции :(

if (PINB.5 == 0)
Пробовал, толку нет.
вашей программы надо отключать фьюз RSTDISBL?
Как собственно это реализовать?
В PonyProg у меня в списке микроконтроллеров вообще нет attiny13, вот и еще одна проблема :(

Re: Бегущие огни

Добавлено: Ср мар 21, 2012 16:08:37
Engineer_Keen
SH_Pasha писал(а): выдало порядка 25 ошибок
Разные компиляторы, у меня ваш код тоже не работал пока я его до winavr-овского варианта не допилил.
SH_Pasha писал(а): Работает точно так же как и моя версия, т.е. когда нажимаю на кнопку, ничего не происходит, просто светодиоды перестают переключаться.
Ресет отключили?
SH_Pasha писал(а): Наверное это из-за того, что я компилировал в CodeVision, а WinAvr у меня не устанавливается, хоть и делал все по инструкции :(
Че там делать? Он инсталлируется и авр-студия сама его подхватывает...
надо отключать фьюз RSTDISBL? Как собственно это реализовать?
Без этого нога PB5 - это просто нога сброса! В протеусе фьюзы есть в окне свойств контроллера.

Re: Бегущие огни

Добавлено: Ср мар 21, 2012 16:12:44
SH_Pasha
Ресет отключили?
Нееет, как это сделать?

upd
Как в протеусе в свойствах микроконтроллера RSTDISML поставил programmed, все заработало как надо :))
Значит ли это, что если собрать устройства, все заработает как надо?

Re: Бегущие огни

Добавлено: Ср мар 21, 2012 17:05:40
radteh
Заработать то оно должно, но сменить прошивку можно будет только параллельным программатором. Если надо много светодиодов лучше добавь сдвиговый регистр.
SH_Pasha писал(а):В PonyProg у меня в списке микроконтроллеров вообще нет attiny13, вот и еще одна проблема :(
в версии 2.07c с оффсайта этот контроллер есть, или воспользуйся avrdude.

Re: Бегущие огни

Добавлено: Ср мар 21, 2012 17:16:10
SH_Pasha
лучше добавь сдвиговый регистр.
я же писал, это мое первое приложение для МК, так что как такие вещи реализовывать я пока не понимаю :))
в версии 2.07c с оффсайта этот контроллер есть
пробовал, при установке ругаться начинает т.е. у вас не x86...

Re: Бегущие огни

Добавлено: Ср мар 21, 2012 17:20:17
Engineer_Keen
Можно без регистров, например чарлиплексингом, но это тоже сложнее чем "просто к выводу светодиод подключить". Зато на 4 ноги - 12 светодиодов, и одна нога для управления и ресет свободен.

На x64 ругается если скачали установщик для 64 разрядной винды при стоящей 32-х разрядной системе.

Re: Бегущие огни

Добавлено: Ср мар 21, 2012 17:23:35
pyzhman
Engineer_Keen писал(а):PB5 является ногой сброса
Сто чертей мне в рот и якорь в попу! Как же я проморгал!? :oops:

Re: Бегущие огни

Добавлено: Ср мар 21, 2012 17:28:54
SH_Pasha
Engineer_Keen, мой косяк, я уже исправил, ругается из-за того что x86, а для x64 вот не могу найти версию...