Arkadaslar su meshur karasimsek animasyonunu seri iletisimle hc595 e gondermek istiyorum. Elimde 74hc595 le yapilmis animasyon var birde normal karasimsek animasyonu normal olan kodu seri olarak gondermek istiyorum iki kodu nasil birlestirecegimi bilemedim.
74hc595 seri tanimlamasi :
#include <16F877.h>
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay(clock=4000000)
#define SH_CP PIN_B0
#define DS PIN_B1
#define ST_CP PIN_B2
#define MR PIN_B3
#define OE PIN_B4
karasimsek koduda bu:
#define YON durum.B0 // YON için bir bayrak tanımlandı
//-----------------------------
char durum=0; // char cinsinden durum değişkeni tanımlandı
//-----------------------------
void main()
{
TRISB=0; // PORTB çıkış yapıldı
PORTB=1; // PORTB'nin ilk pini "1" yapıldı diğerleri "0"
Delay_ms(200); // 200ms bekle
do
{
if(PORTB==1) YON=0; // eğer ilk led yanıyorsa YON "0" yani sola doğru,
if(PORTB==128) YON=1; // eğer son led yanıyorsa YON "1" yani sağa doğru
if(!YON) PORTB<<=1; // eğer yön sol ise PORTB'yi sola 1 kaydır
else PORTB>>=1; // değilse yani sağ ise sağa 1 kaydır
Delay_ms(200); // 200ms bekle
}while(1);
}
Bir dene bakalım.
#include <16F628A.h>
#fuses XT,NOWDT,NOBROWNOUT,NOLVP,NOPUT,NOCPD,NOPROTECT
#use DELAY(CLOCK=4M, CRYSTAL=4MHz)
#define DS pin_A0
#define SH_CP pin_A1
#define ST_CP pin_A2
void HC595_SendData(unsigned char data);
void main(void)
{
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_CCP1(CCP_OFF);
setup_CCP2(CCP_OFF);
char led = 1;
set_tris_b(0x00);
output_b(0x00);
while(TRUE)
{
HC595_SendData(led);
led = led << 1;
delay_ms(100);
if(led==0x80)
{
while(TRUE)
{
HC595_SendData(led);
led = led >> 1;
delay_ms(100);
if(led==0x01) break;
}
}
}
}
void HC595_SendData(unsigned char data)
{
unsigned char i;
for(i = 0x80; i > 0; i >>= 1)
{
if(i & data) output_high(DS);
else output_low(DS);
output_high(SH_CP);
output_low(SH_CP);
}
output_high(ST_CP);
output_low(ST_CP);
}
mesaj birleştirme:: 07 Temmuz 2015, 15:09:38
Ek : 74HC595 Seri iletişim değil SPI mantığı ile çalışır.
MR pini VDD( + )
OE pini GND ye bağlanır.
I2C ile çalışan PCF8574 gibi bir çip kullanmayı da tercih edebilirsiniz. 8 bit tek bir rakam ile çıkışlara gönderilebilir.
Polleme elimde o dediginiz entegrenin hazir modulu var, ama nerede oldugunu bilemiyorum. Bu kodlari pic gelistirme kartindan uygulayabiliyorum. Ayrica hazir kendi yaptigim 16 bitlik led surucu gelistirme karti var. Mantik olarak 595 in calisma sekli ile calisiyor ama 16 bitlik.
Ekrem kardesim derlerken su hatalari verdi:
*** Error 12 "kara simsek hc595 li.c" Line 13(13,14): Undefined identifier -- setup_psp
*** Error 12 "kara simsek hc595 li.c" Line 14(13,14): Undefined identifier -- setup_spi
*** Error 12 "kara simsek hc595 li.c" Line 17(19,20): Undefined identifier -- setup_adc_ports
*** Error 12 "kara simsek hc595 li.c" Line 18(13,14): Undefined identifier -- setup_adc
*** Error 12 "kara simsek hc595 li.c" Line 20(15,16): Undefined identifier -- setup_CCP2
*** Error 51 "kara simsek hc595 li.c" Line 22(4,8): A numeric expression must appear here
*** Error 12 "kara simsek hc595 li.c" Line 28(22,25): Undefined identifier led
*** Error 12 "kara simsek hc595 li.c" Line 29(11,14): Undefined identifier led
*** Error 12 "kara simsek hc595 li.c" Line 32(10,13): Undefined identifier led
*** Error 12 "kara simsek hc595 li.c" Line 36(28,31): Undefined identifier led
*** Error 12 "kara simsek hc595 li.c" Line 37(17,20): Undefined identifier led
*** Error 12 "kara simsek hc595 li.c" Line 39(16,19): Undefined identifier led
12 Errors, 0 Warnings.
Kendi MCU'an göre ayarla olmayan özelliklerin satırlarını sil.
Benim kartta su an 16f877 var ama elimde 16f628 de mevcut. Onlada deneyebilirim sorun yok. Ilgili hangi satirlari?
ADC yi falan sildim derleniyor şimdi 628A da ADC yok.
#include <16F628A.h>
#fuses XT,NOWDT,NOBROWNOUT,NOLVP,NOPUT,NOCPD,NOPROTECT
#use DELAY(CLOCK=4M, CRYSTAL=4MHz)
#define DS pin_A0
#define SH_CP pin_A1
#define ST_CP pin_A2
void HC595_SendData(unsigned char data);
void main(void)
{
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_CCP1(CCP_OFF);
char led = 1;
set_tris_b(0x00);
output_b(0x00);
while(TRUE)
{
HC595_SendData(led);
led = led << 1;
delay_ms(100);
if(led==0x80)
{
while(TRUE)
{
HC595_SendData(led);
led = led >> 1;
delay_ms(100);
if(led==0x01) break;
}
}
}
}
void HC595_SendData(unsigned char data)
{
unsigned char i;
for(i = 0x80; i > 0; i >>= 1)
{
if(i & data) output_high(DS);
else output_low(DS);
output_high(SH_CP);
output_low(SH_CP);
}
output_high(ST_CP);
output_low(ST_CP);
}
16 bitlik halini istemiştiniz.
#include <16F877.h>
#fuses XT,NOWDT,NOBROWNOUT,NOLVP,NOPUT,NOCPD,NOPROTECT
#use DELAY(CLOCK=4M, CRYSTAL=4MHz)
#define DS pin_A0
#define SH_CP pin_A1
#define ST_CP pin_A2
void HC595_SendData(unsigned char data);
void main(void)
{
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_CCP1(CCP_OFF);
int16 led = 1;
set_tris_b(0x00);
output_b(0x00);
while(TRUE)
{
HC595_SendData(led);
led = led << 1;
delay_ms(100);
if(led==0x8000)
{
while(TRUE)
{
HC595_SendData(led);
led = led >> 1;
delay_ms(100);
if(led==0x0001) break;
}
}
}
}
void HC595_SendData(unsigned char data)
{
unsigned int16 i;
for(i = 0x8000; i > 0; i >>= 1)
{
if(i & data) output_high(DS);
else output_low(DS);
output_high(SH_CP);
output_low(SH_CP);
}
output_high(ST_CP);
output_low(ST_CP);
}
Ekrem hocam Allah razi olsun harika calisiyor. Elinize, emeginize saglik.
(http://s15.postimg.cc/85fpa0qk7/16_bit_kara_simsek.jpg) (http://postimg.cc/image/85fpa0qk7/)