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

BTM222 i ATmega8 - problem z komendami AT

ziggi87 12 Lut 2009 22:37 2905 6
REKLAMA
  • #1 6142080
    ziggi87
    Poziom 12  
    Witam,
    mam problem z modułem bluetooth BTM222 podłączonym do ATmegi8. Napisałem sobie program w C, wysyłam znaki z ATmegi przez UART do BTM-a i dostaje je z powrotem(czyli echo działa) . Za to wysłanie jakiejkolwiek komendy AT nie przynosi rezultatu - BTM zwraca po prostu wszystkie znaki. Nie mam zielonego pojęcia co robię źle, próbowałem już różnych kombinacji. Wrzucam napisany przeze mnie kod, proszę o pomoc/naprowadzenie na rozwiązanie. Dodam, że całość chodzi na wew. oscylatorze 1 MHz

    
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <stdlib.h> 
    #include <util/delay.h>
    
    
    
    volatile char znak_nadawany[5]={'A','T','E','0',13};  //tablica ze znakami do wysłania
    volatile char znak_odebrany=0;
    uint8_t  liczba=0;									//licznik obiegów pętli nadawczej
    
    
    SIGNAL(SIG_UART_TRANS){
    	while(!(UCSRA & (1<<UDRE)))
    	;
    	if (liczba<4){								
    		liczba=(liczba+1);
    		_delay_ms(60);
    		//_delay_ms(262);
    		//_delay_ms(262);
    		//_delay_ms(262);
    		//_delay_ms(262);
    		//_delay_ms(262);
    		UDR=znak_nadawany[liczba];
        }
    
    }
    
    SIGNAL (SIG_UART_RECV){
    	znak_odebrany=UDR;
    	PORTB=~znak_odebrany;
    
    }
    
    
    int main(){
    
    	DDRB=0B11111111;
    	PORTB=0B11111111;
    
     
    void usart_init(unsigned int baud) {
    	
    	//ustawienie predkosci transmisji
    	UBRRH=(unsigned char)(baud>>8);
    	UBRRL=(unsigned char)(baud);
    
    	//Ustawienie odbiornika i nadajnika
    	UCSRB=(1<<RXEN)|(1<<TXEN)|(1<<TXCIE)|(1<<RXCIE);
    
    	
    	//Ustawienie parametrow ramki
    
    	UCSRC=(1<<URSEL)|(0<<USBS)|(3<<UCSZ0);	
    }
    
    
    
    void rozpocznij_nadawanie(){
    	while(!(UCSRA & (1<<UDRE)))
    	;
    		
        UDR=znak_nadawany[0];
    }
    
    
        cli();
    	usart_init(2);
    	
    	sei();
    
    
    	rozpocznij_nadawanie();
    
    while(1){
      
    
        
    }
    
    
    return 0;
    }
    
    
    
  • REKLAMA
  • #2 6150171
    kaken
    Poziom 15  
    Dopiero przymierzam się do tego układu ale możliwe, że problem jest w tym, że najpierw trzeba przejść w tryb komend za pomocą +++.

    PS. Używasz wszystkiego na 3.3V czy przez jakiś konwerter poziomów?
  • REKLAMA
  • #3 6150573
    ziggi87
    Poziom 12  
    +++ też nic nie zmienia. Co do konwertera poziomów to mam takowy zrobiony za pomocą układu 7414 i dzielnika rezystorowego.
  • #4 6182383
    poczitamagoczi
    Poziom 14  
    Skoro zwraca znaki to działa poprawnie ... zastanów się co chcesz zrobić.. najpierw mu wyłączasz echo i to praktycznie nic nie zmienia, spróbuj mu wpisać jakąś domyślną nazwę komendom "ATN=moj bluetooth\r" i zobacz na komórce czy ci go wykryło. A odnośnie kodu to nie definiował bym funkcji w środku maina.
    Pozdro
  • REKLAMA
  • #5 6182665
    tom_ny
    Poziom 14  
    A może moduł odsyła odpowiedź tylko źle sprawdzasz? Bo na początku zawsze otrzymasz to co wysłałeś, gdy masz echo włączone.
    Jak wyślesz:
    ATE0<cr>
    to dostaniesz w odpowiedzi:
    ATE0<cr><lf><cr><lf>OK<cr><lf>
    czy jakoś tak. Gdzie:

    <cr> - kod 0x0D (enter)
    <lf> - kod 0x0A

    A jak masz podłączone linie RTS, CTS? Powinny być zwarte lub niepodłączone, ale lepiej zewrzyj.
    Czy ten kod na pewno ci się kompiluje? ;)
  • #6 12025273
    Zari44
    Poziom 11  
    Mam podobny problem. Nie wiem jak skonfigurować BTM'a tak, żeby chodził jak ja chcę. Wysyłam taże po USARCie komenty z uC, ale nic to nie zmienia.
  • REKLAMA
REKLAMA