Да, извините, моя ошибка. Делей забыл убрать) А по портам:
- 5 должен генерировать такт для входа тактовых импульсов на 74HC595.
- 6 собственно с него должны лезть байты.
- 7 это защелочка.
Но проблема в том, что компилятор не понимает такой записи PORTB.5 и тд. И ругается. Я просто смотрел пару исходников, и там именно таким образом передавали данные в сдвиговые регистры.
cjA
Отправлено: 01 Февраля, 2011 - 15:29:08
Генерал
Сообщений всего: 3291
Дата рег-ции: Янв. 2010
skyburn пишет:
PORTB.5
ну так правильно что не понимает. В Си идентифекаторы не могут с цифры начинаться.
skyburn
Отправлено: 01 Февраля, 2011 - 15:31:46
Маршал
Сообщений всего: 124
Дата рег-ции: Янв. 2011
ммм
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:
};
}
Вот кусок кода, который я хотел взять за основу. Но не вышло.
cjA
Отправлено: 01 Февраля, 2011 - 15:34:34
Генерал
Сообщений всего: 3291
Дата рег-ции: Янв. 2010
вы delay_ms(что то тут) забыли поставить
Программа- работющая, но...
Время нужно както расчитать (Добавление)
зачем включать обработчик прерываний если ни одного обработчика прерываний не написано?
skyburn
Отправлено: 01 Февраля, 2011 - 15:46:32
Маршал
Сообщений всего: 124
Дата рег-ции: Янв. 2011
Мы сейчас не говорим о работоспособности программы, мне ее для начала откомпилить бы нормально.
Вы можете обьяснить, почему у него допустимы записи в виде PORTC.1=1 а у меня нет?
skyburn
Отправлено: 01 Февраля, 2011 - 16:25:56
Маршал
Сообщений всего: 124
Дата рег-ции: Янв. 2011
Вы меня запутали (Добавление)
И еще вопросик. Вот этот код по идее должен выполняться бесконечно. Но у меня он выполняется пару минут, а потом все гаснет и все. И нужно отключить питание на минуту, что б оно опять заработало
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);
cjA, последнее предупреждеение вам: не знаете, не разбираетесь, сомневаетесь - не троллите.
Ваш бред только вводит в заблуждение.
skyburn пишет:
код по идее должен выполняться бесконечно. Но у меня он выполняется пару минут, а потом все гаснет и все. И нужно отключить питание на минуту, что б оно опять заработало
ничего не перегревается? Запитано от чего?
Фотографию и схему покажите.
Белый Волк
Отправлено: 01 Февраля, 2011 - 19:37:38
Супермодератор
Сообщений всего: 648
Дата рег-ции: Февр. 2007
skyburn cjA не точно выразился - дело в разных компиляторах.
Записи вида:
PORTB.5 = 1;
если я не ошибаюсь, верны для компилятора Code Vision AVR.
Вы используете, насколько я знаю, связку WinAVR + AVR Studio, то есть Ваш компилятор - AVR GCC.
Для Вас следует писать:
PORTB |= 0b00100000;
Насчёт бесконечного цикла: код верный. nest прав: похоже на проблемы с питанием, без фотографии схемы и описания источника питания нельзя сказать точнее.
skyburn
Отправлено: 01 Февраля, 2011 - 19:59:53
Маршал
Сообщений всего: 124
Дата рег-ции: Янв. 2011
Источник питания использую взятый с этого сайта, ну стабилизатор, напряжение ровно 5.00. (Добавление)
И тогда можно еще одну немного наглую просьбу. Можете набросать код, для AVR studio, реализующий передачу байтов в 74HC595, данные берутся из массива. Ну как у меня там, можете поправить, а то я все равно не могу вьехать как его заставить работать.
Это, если я правильно понял PORTB |= 0b00100000; - означает что из всех 8ми портов подать 1 на 3й порт? А на все остальные 0?
ОЛЕГ
Отправлено: 01 Февраля, 2011 - 20:47:04
Супермодератор
Сообщений всего: 1732
Дата рег-ции: Нояб. 2008
С другого конца. На 5.
cjA
Отправлено: 01 Февраля, 2011 - 20:56:58
Генерал
Сообщений всего: 3291
Дата рег-ции: Янв. 2010
GNU Компиляторов коллекция - вот как переводится GCC
(зачем влез? меня же предупредили?)(и AVR тут не причем, они подо все пишут)
skyburn
Отправлено: 01 Февраля, 2011 - 21:47:45
Маршал
Сообщений всего: 124
Дата рег-ции: Янв. 2011
Цитата:
PORTB |= 0b00100000;
Галяк, ругается, говорит что undeclared.
nest
Отправлено: 01 Февраля, 2011 - 21:56:54
Администратор
Сообщений всего: 4866
Дата рег-ции: Сент. 2009
дааа... вот она, сила СИ-кампиляторов!
Вместо того, что бы сразу думать над алгоритмом - убьём пару месяцев на изучение синтаксиса...
skyburn, посмотрите в HELP вашей среды, там наверняка есть куча примеров управления портов. Вот оттуда и спишите.
skyburn
Отправлено: 01 Февраля, 2011 - 22:02:12
Маршал
Сообщений всего: 124
Дата рег-ции: Янв. 2011
Окей) Спасибо)
Белый Волк
Отправлено: 02 Февраля, 2011 - 04:55:58
Супермодератор
Сообщений всего: 648
Дата рег-ции: Февр. 2007
skyburn
На каком языке Вы программировали для PC?
Приведите полный текст ошибки.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.