Atmega8A UART Rx problém - vyřešeno
Petr T
p.tr na atlas.cz
Úterý Květen 1 12:30:41 CEST 2012
chyba byla ISR(USART_RXC_vect) místo ISR(USART__RXC_vect),
zajímavé, že kompilátor na to nic neřekl...
PeTr
--
Dne 1.5.2012 9:53, Petr T napsal(a):
> Zdravím,
>
> prosím o radu...
> Pokouším se rozchodit komunikaci mezi Atmega8A a Bluetooth modulem.
> Vytvořil jsem si jednoduchý program v AVR Studiu a mám problém
> přijmout data do procesoru...
> Odchozí data fungují normálně, ale jakmile pošlu byte do procesoru tak
> se to někde sekne a procesor přestane reagovat (přestane blikat LED,
> která je v timeru).
>
> Má být nějak speciálně ošetřen vstup RX u procesoru?
> Už jakmile na něj přivedu L úroveň, tak se to sekne...
>
> Přikládám i testovaci SW...
>
> Díky za případnou ochotu pomoci
>
> PeTr
>
> /*
> * UART_TEST1.cpp
> */
>
> #include "avr\io.h" // definiční soubor pro mikrokontrolér
> #include "avr\interrupt.h" // přerušení mikrokontroléru
> #include "avr\sfr_defs.h"
> //*******************************************************************************************
> // MOJE UPRAVY
> //-------------------------------------------------------------------------------------------
> //
> #define setb(port,pin) port |= 1<<pin //nastav bit
> #define clrb(port,pin) port &= ~(1<<pin) //nuluj bit
> #define negb(port,pin) port ^= 1<<pin //neguj bit
>
> //***********************************************************************************
>
> volatile unsigned char prijem = 0;
> volatile unsigned char rxData = 0;
>
> volatile unsigned char ixTmr0 = 0;
>
> volatile unsigned char fTmr0 = 0;
>
> volatile unsigned char fMerSpeed = 0;
>
> volatile unsigned char prom1;
>
> //---------------------------------------------------
> //Preruseni pri prijmu dat seriovou linkou
> ISR(USART_RXC_vect)
> {
> rxData = UDR;
> prijem = 1;
> negb(PORTD,6);
> }
>
> //---------------------------------------------------
> // Přerušení při přetečení T/T0
> ISR(TIMER0_OVF_vect)
> {
> TCNT0 = 112;
> ixTmr0++;
> // ixTmr0 >> 1 = 20ms, 4 = 100ms, 24 = 500ms
> if (ixTmr0 > 49)
> {
> ixTmr0 = 0;
> fTmr0 = 1;
> negb(PORTB,0);
> }
> }
>
> // *** Zašle data na UART
> void sendUart(unsigned char value)
> {
> while(!(UCSRA & (1<<UDRE)));
> UDR = value;
> }
>
> //---------------------------------------------------
> int main( void )
> {
>
> // ******Nastaveni portu******
> // DDR: 0 - vstup, 1 - výstup
> // PORT: 0 - "L"/Hi-Z , 1 - "H"/Pull-up
>
> DDRB = 0b00000001;
> PORTB = 0b00000000;
> DDRC = 0b00000000;
> PORTC = 0b00111110;
> DDRD = 0b11000010;
> PORTD = 0b00011100;
>
> // ********Nastaveni seriove linky********
> // USART: Příjem On, Vysílání On
> // 8 bitů, Parita Žádná, StopBity Jeden
> // Přenosová rychlost 9,6kBaut
> // Přerušení při odeslání bajtu: Off
> // Přerušení při příjmu bajtu: On
> // Přerušení při Data Register Empty: Off
>
> UCSRC = (1<<URSEL)|(3<UCSZ0);
> UCSRB = 0b10011000; // TX a RX
>
> UBRRH = 0b10000110;
> UBRRL = 47; //Bautrate 9,6kBaut
>
> // ********Nastaveni čítačů a časovačů********
>
> // *******Čítač časovač0*******
> // Vstupní signál: CK/1024 (f=7,2kHz, T=138,889us)
> // Přerušení při přetečení T/T0
>
>
> // *******Čítač časovač1*******
> // Vstupní signál: Extertní vstup T1, sestupná hrana
> // Mód časovače: Normální čítání
> // Výstup OC1A odpojen
> // Výstup OC1B odpojen
>
> TCCR0 = 0b00000101;
> TIMSK = 0b00000001;
> TCCR1B = 0b00000110;
> TCCR1A = 0b00000000;
> TCNT0 = 112;
> TCNT1 = 0;
> ICR1 = 0;
> OCR1A = 0;
> OCR1B = 0;
>
> sei(); // Zapnutí všech přerušení
>
> while(1)
> {
> if (prijem == 1)
> {
> prijem = 0;
> sendUart(51);
> sendUart(rxData); // vrátí přijatý byte
> }
> if (fTmr0 == 1)
> {
> fTmr0 = 0;
> sendUart(TCNT1H); // odešle stav čítače 1
> sendUart(TCNT1L);
> }
> }
> return (1);
> }
>
>
>
>
>
>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20120501/12521d5a/attachment.htm>
Další informace o konferenci Hw-list