Да, извините, моя ошибка. Делей забыл убрать) А по портам:
- 5 должен генерировать такт для входа тактовых импульсов на 74HC595.
- 6 собственно с него должны лезть байты.
- 7 это защелочка.
Но проблема в том, что компилятор не понимает такой записи PORTB.5 и тд. И ругается. Я просто смотрел пару исходников, и там именно таким образом передавали данные в сдвиговые регистры.
61. skyburn - 01 Февраля, 2011 - 14:49:43 - перейти к сообщению
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:
};
}
#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 а у меня нет?
Вы можете обьяснить, почему у него допустимы записи в виде 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);
}
}
#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 прав: похоже на проблемы с питанием, без фотографии схемы и описания источника питания нельзя сказать точнее.
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?
(Добавление)
И тогда можно еще одну немного наглую просьбу. Можете набросать код, для 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 тут не причем, они подо все пишут)
(зачем влез? меня же предупредили?)(и 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?
Приведите полный текст ошибки.
На каком языке Вы программировали для PC?
Приведите полный текст ошибки.