MAX232 kullandigimda CCS kodunda düzenleme gerklimi?

Başlatan Digimensch, 05 Nisan 2007, 19:19:37

Digimensch

Ben serial Port üzerinden 16F84A'ya  bu sefer bir MAX232 Driver kullanarak veri göndermek istiyorum.
RS232'nin 3.Bacagini MAX232'nin 8.Bacagina ve MAX232'nin 9.Bacagindan PIC16F84A'nin RA3 bitine baglantimi kurdum.
Yanliz eskiden MAX232 kullanmadan yaptigim örneklerden bir deneme yapayim dedim olmadi.
CCS de su asagidaki konvigation bölümünde MAX232 kullandigim icin bir degisiklik yapmam greklimi?
#include <16F84A.h>
#use delay(clock=4000000)
#fuses XT,NOWDT,PUT,NOPROTECT
#use rs232(baud=2400,rcv=PIN_A3,parity=N,bits=8)


Bir türlü veriyi PIC'e gönderemiyorum.Yukadaki bölümü  MAX232 kullanmadan direk RS232'yi PIC16F84'e bagladigimda kullaniyorudum.Sorun cikmiyordu.Simdi MAX232 kullaninca calisma olmuyor.Burda degisiklik yapmam gereklimi?

SpeedyX


Digimensch

@SpeedyX,
Invert ile denedim yine olmuyor.
Su basit kod bir türlü max232 driveri araya koyunca calismiyor.
#include <16F84A.h>
#use delay(clock=4000000)
#fuses XT,NOWDT,NOPROTECT,PUT

#use rs232(baud=2400,xmit=PIN_A0,rcv=PIN_A1,bits=8,parity=N,Invert)

#byte PORTA=5
#byte PORTB=6

#define LED_ON output_high(PIN_A4);
#define LED_OFF output_low(PIN_A4);

VOID sinyal();

void main()
{
SET_TRIS_B(0);
PORTB = PORTA= 0;


while(1)
{
int gelen;
tekrar:
gelen=getch();
switch (gelen)
{
case 'x': sinyal();goto tekrar;
case 'y': sinyal();goto tekrar;
case 'z': sinyal();goto tekrar;
}
}
}


VOID sinyal()
{
      LED_ON;
      delay_ms(150);      
      LED_OFF;
      delay_ms(150);
      }


Devre calisiyor elimde ayni islemi yapan hex dosyasi var onu pic16f84 yükledigimde calisiyor.
Ama kendi yazdigim yukardaki kod ile calismyior.

apollaa

ben max232 ile deneme yaptım çalıştı.
aşşağıdaki kodlar bende çalıştı.

#include <16F84.h>
#fuses XT,NOWDT,NOPROTECT
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_A1, rcv=PIN_A2)  

#byte port_b = 6   //portb nin ramdeki yeri

main() {

  int data;

  set_tris_b( 0x00 );   //portb çıkış

  printf("calisiyor…\n\r");

  while (TRUE)
  {
   
    data = getch();
    port_b = data;   //gönderilen sayıyı portb de göster
    delay_ms(1000);

bu kodları yine forumdan almıştım.
"seri_portun_pic_pratik_kullanimi" adındaki word dosyasında mevcut
bu dosyayı bi arat bulursun galiba
Vatan Sizden Hizmet Bekler ( Her Alanda)

SpeedyX

max232 ile çalışan başka bir kod.
#include <16F84a.h>
#fuses XT,NOWDT,NOPROTECT
#use delay(clock=4000000)
#use rs232(baud=9600,rcv=PIN_A0,xmit=PIN_A1)

#byte porta = 5
#byte portb = 6
#bit  led = portb.1

char gelen;

void main() {
     SET_TRIS_A(0x01);
     SET_TRIS_B(0x00);
     porta=portb=0;
     led=1;
     printf("Start\n");
     for(;;) {
        gelen=getc();
        printf("%c",gelen);
        if (gelen=='1') {
           led=0;
        }
        else if (gelen=='2') {
           led=1;
        }
     }
}

sanırım tek fark, sende fuses kısmının altta olması...

serdarkaradeniz

Bence invert kullanmana gerek yok. Hatta kullanma. Kodda problem yok. Problemin bence max232 entegresi için kullanman gereken kapasitörler. Özellikle 6 ve 2 nolu bacaklara giren kapasitörlerin polaritelerine bak. max232 datasheet'inde gösterilmiştir.... Kolay gelsin...

Digimensch

Tamam sorunu buldum Kondansatörü Max232'ye ters polarma ile baglamisim.
Düzelttim sorun kalmadi simdi.