Страница 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
а что это вы делаете сей командой ?
Re: Бегущие огни
Добавлено: Ср мар 21, 2012 06:42:06
pyzhman
Как пробовали?
Re: Бегущие огни
Добавлено: Ср мар 21, 2012 11:35:40
SH_Pasha
FreshMan писал(а):а что это вы делаете сей командой ?
Устанавливаю порт как входной.
Пробовал через else, не работает
Re: Бегущие огни
Добавлено: Ср мар 21, 2012 12:27:40
Engineer_Keen
pyzhman писал(а):Как пробовали?
SH_Pasha писал(а):Пробовал через else, не работает
Звучит как:
"- Я случайно базу данных...
- Случайно что?
- Базу данных"
Код приведите, неизвестно куда вы там else воткнули...
Re: Бегущие огни
Добавлено: Ср мар 21, 2012 12:34:03
pyzhman
2
Engineer_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 является ногой сброса
Сто чертей мне в рот и якорь в попу! Как же я проморгал!?

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