драйвер светодиодного индикатора MAX7221

Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить
vovik15
Опытный кот
Сообщения: 768
Зарегистрирован: Сб ноя 08, 2008 18:32:36
Контактная информация:

драйвер светодиодного индикатора MAX7221

Сообщение vovik15 »

здравствуйте!
у меня такая проблема, потребовалось использовать этот драйвер, нашел в интернете на него документацию
написал свою программу,весь день с ней мучался,неработает
делал так : c этого проекта http://avrproject.ru/publ/kak_podkljuch ... /2-1-0-142 снимал осцилограмму, и полученные значения вписывал в свою программу , тоесть мой мк выдает импульсы такие же как и в том проекте, но почему то не работает. помогите разобраться
вот мой исходник

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

#include <pic.h>

__CONFIG (INTIO & UNPROTECT & LVPDIS 
& BOREN & MCLRDIS & PWRTEN & WDTDIS);

#define CS  RA1
#define CLK RA2
#define DIN RA0

void write_data(unsigned char addr,unsigned char dat);

// === начало программы
void main (void){
INTCON = 0;  // чистим регистр прерываний
TRISA = 0b00000000; TRISB = 0b00000000;
CMCON = 0x07; // отключение компараторов 
PORTA = 0; PORTB = 0; 
RBPU = 0; // подтягивающие R (1-откл, 0-вкл)
PEIE = 1;  //  разрешаем прерывания периферии)

//===========подготовка МАХ7221==========
write_data(0b00001100,0b00000000); //гашение нет
write_data(0b00001001,0b00000000); //отключить режим декодирования
write_data(0b00001010,0b00001010); //интенсивность свечения 11/16
write_data(0b00001011,0b00000011); //включаем в работу индикаторы 1,2,3,4
write_data(0b00001111,0b00000000); //тест индикаторов нет
write_data(0b00001100,0b00000000); //гашение нет

while(1) 
{
//начало бесконечного цикла
//должна быть надпись GOOD
write_data(0b00000001,0b01011110);//G
write_data(0b00000010,0b00011101);//O
write_data(0b00000011,0b00011101);//O
write_data(0b00000100,0b00111110);//D
} //конец бесконечного цикла
} //конец программы


//вывод данных по SPI
void write_data(unsigned char addr,unsigned char dat)
{
//выводим адрес
unsigned char s=8;
CS=0; //обращаемся к микросхеме
while (s>0) 
{ 
s--;
DIN = ((addr>>(s))&1);//на линию данных выставляем бит
CLK=1; NOP(); CLK=0; //синхроимпульс
}
s=8;
//выводим команду
while (s>0) 
{ 
s--;
DIN = ((dat>>(s))&1);//на линию данных выставляем бит
CLK=1; NOP(); CLK=0; //синхроимпульс
}
CS=1;//конец обращения
}
проект протеуса и скомпелированный исходник во вложении
Вложения
max.rar
(7.24 КБ) 174 скачивания
Реклама
Аватара пользователя
Ser60
Друг Кота
Сообщения: 3784
Зарегистрирован: Ср дек 24, 2008 09:58:58

Re: драйвер светодиодного индикатора MAX7221

Сообщение Ser60 »

Для включения индикации в регистр 0x0C МАХ7221 следует записать 1 а не 0.
Реклама
vovik15
Опытный кот
Сообщения: 768
Зарегистрирован: Сб ноя 08, 2008 18:32:36
Контактная информация:

Re: драйвер светодиодного индикатора MAX7221

Сообщение vovik15 »

тоесть если я правильно понял нужно сделать вот так
write_data(0b00001100,0b00000001); //
...
Аватара пользователя
Ser60
Друг Кота
Сообщения: 3784
Зарегистрирован: Ср дек 24, 2008 09:58:58

Re: драйвер светодиодного индикатора MAX7221

Сообщение Ser60 »

Да.
Реклама
Эиком - электронные компоненты и радиодетали
vovik15
Опытный кот
Сообщения: 768
Зарегистрирован: Сб ноя 08, 2008 18:32:36
Контактная информация:

Re: драйвер светодиодного индикатора MAX7221

Сообщение vovik15 »

огромное вам спосибо,все заработало
Реклама
Ответить

Вернуться в «PIC»