Форум myROBOT.ru » Шаг за шагом » Делаем роботов » Светодиодная панель

Страниц (11): « 1 2 3 4 [5] 6 7 8 9 ... » В конец
 

61. skyburn - 01 Февраля, 2011 - 14:49:43 - перейти к сообщению
Да, извините, моя ошибка. Делей забыл убрать) А по портам:
- 5 должен генерировать такт для входа тактовых импульсов на 74HC595.
- 6 собственно с него должны лезть байты.
- 7 это защелочка.

Но проблема в том, что компилятор не понимает такой записи PORTB.5 и тд. И ругается. Я просто смотрел пару исходников, и там именно таким образом передавали данные в сдвиговые регистры.
62. cjA - 01 Февраля, 2011 - 15:29:08 - перейти к сообщению
skyburn пишет:
PORTB.5

ну так правильно что не понимает. В Си идентифекаторы не могут с цифры начинаться.
63. skyburn - 01 Февраля, 2011 - 15:31:46 - перейти к сообщению
ммм
CODE:
// Global enable interrupts
#asm("sei")
#asm("wdr");
while (1)
{
for(k=0;k<SHIFT_SPEED;k++)
{
//for(j=1;j<65;j<<=1)//7 strings
for(j=0;j<8;j++)//8 strings
{//выводим информацию из видеопамяти в регистры сдвига
l=1<<j;
for(i=0;i<MATRIX_LEN;i++)
{
PORTC.2=0;//SH_CP=0
PORTC.0=VideoRAM[i] & l;//transmit bit - наложим на байт маску текущей строки и выставим в порт(на вход DS)
PORTC.2=1;//SH_CP=1 - протолкнем бит в сдвиг. регистры
};
PORTC.1=1;//ST_CP=1 - защелкнем данные в регистрах
PORTB=l;//set output string
PORTC.1=0;
delay_us(50);//wait
};
};
#asm("wdr");
//проверим, включен ли эффект
if(dissolve_flag) {dissolve_effect(); goto no_shift;};
if(!mode)data_shift();//если активирован редактор, то просто регенерируем табло
no_shift:
};
}


Вот кусок кода, который я хотел взять за основу. Но не вышло.
64. cjA - 01 Февраля, 2011 - 15:34:34 - перейти к сообщению
вы delay_ms(что то тут) забыли поставить
Программа- работющая, но...
Время нужно както расчитать
(Добавление)
зачем включать обработчик прерываний если ни одного обработчика прерываний не написано?
65. skyburn - 01 Февраля, 2011 - 15:46:32 - перейти к сообщению
Мы сейчас не говорим о работоспособности программы, мне ее для начала откомпилить бы нормально.
Вы можете обьяснить, почему у него допустимы записи в виде PORTC.1=1 а у меня нет?
66. skyburn - 01 Февраля, 2011 - 16:25:56 - перейти к сообщению
Вы меня запутали
(Добавление)
И еще вопросик. Вот этот код по идее должен выполняться бесконечно. Но у меня он выполняется пару минут, а потом все гаснет и все. И нужно отключить питание на минуту, что б оно опять заработало
CODE:
#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
DDRD=0xff;
while(1)
{
PORTD|=_BV(PD4);
_delay_ms(25);
PORTD&=~_BV(PD4);
_delay_ms(50);


PORTD|=_BV(PD5);
_delay_ms(25);
PORTD&=~_BV(PD5);
_delay_ms(50);


PORTD|=_BV(PD3);
_delay_ms(25);
PORTD&=~_BV(PD3);
_delay_ms(50);


PORTD|=_BV(PD2);
_delay_ms(25);
PORTD&=~_BV(PD2);
_delay_ms(50);
}

}

67. nest - 01 Февраля, 2011 - 19:05:10 - перейти к сообщению
cjA, последнее предупреждеение вам: не знаете, не разбираетесь, сомневаетесь - не троллите.
Ваш бред только вводит в заблуждение.



skyburn пишет:
код по идее должен выполняться бесконечно. Но у меня он выполняется пару минут, а потом все гаснет и все. И нужно отключить питание на минуту, что б оно опять заработало
ничего не перегревается? Запитано от чего?
Фотографию и схему покажите.
68. Белый Волк - 01 Февраля, 2011 - 19:37:38 - перейти к сообщению
skyburn
cjA не точно выразился - дело в разных компиляторах.
Записи вида:
PORTB.5 = 1;
если я не ошибаюсь, верны для компилятора Code Vision AVR.
Вы используете, насколько я знаю, связку WinAVR + AVR Studio, то есть Ваш компилятор - AVR GCC.
Для Вас следует писать:
PORTB |= 0b00100000;

Насчёт бесконечного цикла: код верный. nest прав: похоже на проблемы с питанием, без фотографии схемы и описания источника питания нельзя сказать точнее.
69. skyburn - 01 Февраля, 2011 - 19:59:53 - перейти к сообщению
Источник питания использую взятый с этого сайта, ну стабилизатор, напряжение ровно 5.00.
(Добавление)
И тогда можно еще одну немного наглую просьбу. Можете набросать код, для AVR studio, реализующий передачу байтов в 74HC595, данные берутся из массива. Ну как у меня там, можете поправить, а то я все равно не могу вьехать как его заставить работать.
Это, если я правильно понял PORTB |= 0b00100000; - означает что из всех 8ми портов подать 1 на 3й порт? А на все остальные 0?
70. ОЛЕГ - 01 Февраля, 2011 - 20:47:04 - перейти к сообщению
С другого конца. На 5. Улыбка
71. cjA - 01 Февраля, 2011 - 20:56:58 - перейти к сообщению
GNU Компиляторов коллекция - вот как переводится GCC
(зачем влез? меня же предупредили?)(и AVR тут не причем, они подо все пишут)
72. skyburn - 01 Февраля, 2011 - 21:47:45 - перейти к сообщению
Цитата:
PORTB |= 0b00100000;

Галяк, ругается, говорит что undeclared.
73. nest - 01 Февраля, 2011 - 21:56:54 - перейти к сообщению

дааа... вот она, сила СИ-кампиляторов!
Вместо того, что бы сразу думать над алгоритмом - убьём пару месяцев на изучение синтаксиса... Помираю со смеху



skyburn, посмотрите в HELP вашей среды, там наверняка есть куча примеров управления портов. Вот оттуда и спишите.
74. skyburn - 01 Февраля, 2011 - 22:02:12 - перейти к сообщению
Окей) Спасибо)
75. Белый Волк - 02 Февраля, 2011 - 04:55:58 - перейти к сообщению
skyburn
На каком языке Вы программировали для PC?
Приведите полный текст ошибки.