lunatictr
Üye
- Katılım
- 25 Ara 2009
- Mesajlar
- 7
- Puanları
- 1
Merhaba arkadaşlar. İlk olarak ilk defa PIC programlama ile uğraşıyorum biraz tecrübesizim bu konuad. bir projemde usb to rs232 seri porttan gelen bilgiye göre step motor sürmem lazım. bunun üzerine devremi şu elemanlardan kurdum
USB to RS232 kablo -> MAX 232 -> PIC 16F877 -> L298 driver -> Step motor
max 232 den çıkan kabloları pic in C portundaki 6. ve 7. pinlere taktım ( RX, C7 ye bağlı sanırım burada bir yanlışım yok)
pic in output unu B portunun 4-7. pinleri yaptım ve L298 e bağladım.
aynı devreyi başka bir program ile çalıştırdım, sorunsuz çalışıyordu proteus ile.
kendi kodumu yazmaya başladım ve mikroC ve CCS C compiler arasında kaldım, ikisinide araştırdım biraz uğraştım ama beceremedim kullanmayı.
CCS C de şöyle bir kod yazdım, fakat çalıştırmayı becermedim. nasıl debug ediceğimide bulamadım şahsen neresinde patlıyor onuda bilmiyorum.
sanırım rs232 den gelen bilgiyi okumuyor, ama bu konuda tecrübesiz olduğumdan dolayı bilemiyorum tam olarak.
nerede yanlış yaptığımı söylermisiniz ? ya da başka ne yapmalıyım ne eksik ?
USB to RS232 kablo -> MAX 232 -> PIC 16F877 -> L298 driver -> Step motor
max 232 den çıkan kabloları pic in C portundaki 6. ve 7. pinlere taktım ( RX, C7 ye bağlı sanırım burada bir yanlışım yok)
pic in output unu B portunun 4-7. pinleri yaptım ve L298 e bağladım.
aynı devreyi başka bir program ile çalıştırdım, sorunsuz çalışıyordu proteus ile.
kendi kodumu yazmaya başladım ve mikroC ve CCS C compiler arasında kaldım, ikisinide araştırdım biraz uğraştım ama beceremedim kullanmayı.
CCS C de şöyle bir kod yazdım, fakat çalıştırmayı becermedim. nasıl debug ediceğimide bulamadım şahsen neresinde patlıyor onuda bilmiyorum.
Kod:
#include <16F877.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#use delay(clock=20000000)
#use rs232(baud=19200,xmit=PIN_C6,rcv=PIN_C7)
#use fast_io(C)
#use fast_io(D)
#use fast_io(B)
#opt 9
void main()
{
int yon;
int currentPosition;
setup_ccp1(CCP_PWM);
setup_timer_2(T2_DIV_BY_1,255,1);
set_tris_c(128);
set_tris_d(0);
set_tris_b(0b11111111);
output_c(0);
output_d(0);
output_b(0);
yon=0;
currentPosition=1;
while (1)
{
yon=0;
delay_ms(200);
yon=getch(); //rs232 den gelen bilgiyi oku
if (yon==1) //sola dön
{
currentPosition--;
if (currentPosition==0)
{
currentPosition=8;
}
}
if (yon==2) //sağa dön
{
currentPosition++;
if (currentPosition==8)
{
currentPosition=1;
}
}
switch (currentPosition)
{
case 1 : output_b(0b00010000); delay_ms(200);
case 2 : output_b(0b00110000); delay_ms(200);
case 3 : output_b(0b00100000); delay_ms(200);
case 4 : output_b(0b01100000); delay_ms(200);
case 5 : output_b(0b01000000); delay_ms(200);
case 6 : output_b(0b11000000); delay_ms(200);
case 7 : output_b(0b10000000); delay_ms(200);
case 8 : output_b(0b10010000); delay_ms(200);
}
}
}
sanırım rs232 den gelen bilgiyi okumuyor, ama bu konuda tecrübesiz olduğumdan dolayı bilemiyorum tam olarak.
nerede yanlış yaptığımı söylermisiniz ? ya da başka ne yapmalıyım ne eksik ?
Son düzenleme: