logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[ATmega32][c/AVR] Brak połaczenia między modułami HM 868MHz

mgiro 09 Sty 2010 18:37 752 0
REKLAMA
  • #1 7510365
    mgiro
    Poziom 22  
    Witam,

    Wykorzystuję ATmege32(kwac 16MHz) i HM-T868S jako nadajnik do przesyłu sygnału do HM-R868S jako odbiornika i ATmegi16(kwac 16MHz).

    Po odebraniu nadanych informacji na początek chcę zapalić diode.

    Podłączyłem nadajnik do ATmegi32 kabelkami(długość 25cm każdy)

    kod:
    
    #include <avr\io.h>
    #include <stdio.h>
    #include <inttypes.h>
    #include <util/delay.h>
    
    
    #include "rs.h"
    #include "harddef.h"
    
    
    int main(void)
    {
    	
    	///////////////////////////////////////////////
    	// Inicjacja portu szeregowego
    	RS_SET_BAUD(DEF_BAUD); // BAUND = 4800
    	UCSRC = 1<<URSEL | 1<<UCSZ1 | 1<<UCSZ0; 
    	UCSRB = 1<<RXEN | 1<<TXEN; 
    	UCSRA = 0;
    	// Koniec inicjacji
    	///////////////////////////////////////////////
    	
    
    	while(1)
    	{
    		rs_put('B');
    	}
    	
    }
    
    


    Odbiornik podłączyłem kabelkami do ATmegi16

    
    #include <avr\io.h>
    #include <stdio.h>
    #include <inttypes.h>
    
    
    
    #include "rs.h"
    #include "harddef.h"
    
    
    int main(void)
    {
    	DDRA = 0xff;
            PORTA = 0x00;
    
           ///////////////////////////////////////////////
    	// Inicjacja portu szeregowego
    	RS_SET_BAUD(DEF_BAUD); BAUND = 4800
    	UCSRC = 1<<URSEL | 1<<UCSZ1 | 1<<UCSZ0; 
    	UCSRB = 1<<RXEN | 1<<TXEN; 
    	UCSRA = 0;
    	// Koniec inicjacji
    	///////////////////////////////////////////////
    	
            _delay_ms(200);
    	PORTA = 0x04;  // stan wysoki => stan aktywny odbiornika
    	_delay_ms(200);
    	while(1)
    	{
    		if(rs_get() == 'B')
    		{
    			PORTA |= 0x02;
    		}
    	}
    		
    	
    }
    


    Funkcje put i get:
    
    int rs_put(char znak)
    {
    	
    	// Oczekiwanie aż bufor nadajnika jest pusty
    	while(!(1<<UDRE & UCSRA)) {}
    	UDR = znak; 
    	return 0;
    }
    
    int rs_get(void)
    {
    	char znak; 
    	// Oczekiwanie na pojawienie się danej
    	while(!(1<<RXC & UCSRA)) {}
    	znak = UDR; 
    	return znak;
    }
    


    Gdy podłączyłem bezpośrednio procesory, dioda się zapaliła. Gdy użyłem modułów, dioda nie chciała się zapalić!!

    Co może być tego powodem??
  • REKLAMA
REKLAMA