merhaba arkadaşlar iki pic i uartla haberleştirmeye çalışıyorum kafasına göre bazen çalışıyor bazen çalışmıyor . vericide gönderilen verilerin osiloskop görüntüsü aşşağıda foto olarak yapıştırdım.
// verici kısmı
void main()
{
trisb.rb3=1;
UART1_Init(1200);
delay_ms(150);
while(1)
{
if(portb.rb3==1)
{
if (UART1_Tx_Idle() == 1) {
UART1_Write_Text( "A");
}
}
}
}
// alıcı kısmı
char uart_rd=0;
char A;
void main ()
{
trisa.ra0=0;
porta.ra0=0;
trisb.rb4=0;
portb.rb4=0;
cmcon=7;
UART1_Init(1200); // Initialize UART module at 9600 bps
Delay_ms(100);
while (1) { // Endless loop
if (UART1_Data_Ready()) { // If data is received,
uart_rd = UART1_Read(); // read the received data,
}
if(uart_rd== 0x41)
{
portb.rb4=1;
delay_ms(1000);
portb.rb4=0;
delay_ms(1000);
}
}
}
(https://s27.postimg.cc/ardrn2xkv/abc.png) (https://postimg.cc/image/ardrn2xkv/)
Hocam programın amacı nedir?
Ben böyle anladım:
Verici devrede PORTB'nin 3. pinine bağlanan butona basınca, A karakterini gönderecek.
Alıcı devre ise A karakterini alınca PORTB'nin 4. pinine bağlanan LED'i 1sn aralıklarla yakıp söndürecek.
Acaba doğru anlamış mıyım?
Peki sıkıntı nerde? Yanı "kafasına göre çalışıyor" 'dan kastınız nedir? Tam olarak nasıl davranıyor?
Gözüme çarpan iki şey oldu.
Birincisi verici programında veriyi String olarak gönderiyorsunuz, Char olarak dener misiniz?
İkincisi yine verici programında buton için arkları önlemek için bir şey yapmamışsınız.
Ben biraz değişiklik yaptım, sıkıntı yok gibi. Yine sizin cevabınıza göre hareket ederiz.
Verici:
void main() {
TRISB3_bit = 1;
PORTB = 0x00;
UART1_Init(1200);
Delay_ms(150);
while (1) {
if (PORTB.B3 == 1) {
UART1_Write('A');
while(PORTB.B3);
}
}
}
Alıcı:
char uart_rd;
void main() {
TRISB4_bit = 0;
PORTB = 0x00;
UART1_Init(1200);
Delay_ms(100);
while (1) {
if (UART1_Data_Ready()) {
uart_rd = UART1_Read();
}
if (uart_rd == 'A') {
PORTB.B4 = ~PORTB.B4;
Delay_ms(1000);
}
}
}
Sonuç ise bu şekilde:
https://youtu.be/4-QjSZbgJLc
cevabınız için çok teşekkür ederim doğru anlamışsınız 16f88 de karşılaştırıcıları ve analog okuyucuları kapatınca düzeldi sorun ancak ikinci adımda ben araya rf modülü bağladım fs1000a 433 mhz likten şimdide alıcıya dokununca çalışıyor bazen , bazende çalışmıyor beslemelerden dolayı iç gürültü oluşuyor olabilir diye düşündüm ama çokta emin değilim
Alıcıya dokununca çalışıyor ise frekanslar tutmuyor olabilir. Ayrıca veriyi rf de gönderirken arada boşluk verip yollayın. Sürekli uart haberleşmesini parazit olarak gorup filtre yapabiliyor.