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

Atmega8 Uart reset procka

w.adamczak 11 Mar 2009 20:52 1822 6
REKLAMA
  • #1 6268924
    w.adamczak
    Poziom 10  
    Witam!

    Walczę z Uartem na atmedze8. Procek dobrze wysyła dane i tez prawidłowo je odbiera.
    Natomiast przy każdej probie wysłanie danych z procka do komputera dane się wysyłają, ale zaraz potem procek się resetuje. Nie mam pojęcia dlaczego
    może ktoś z Was już miał taki problem

    Będę wdzięczny za pomoc
  • REKLAMA
  • #2 6269159
    wader_669
    Poziom 28  
    program i schemat
  • REKLAMA
  • #3 6269419
    w.adamczak
    Poziom 10  
    Schemat i program:

    Atmega8 Uart reset procka

    
    //-------------------------------
    #include <avr/io.h>
    #include <avr/interrupt.h>  
    
    
    unsigned char  m=0, ii=0;
    
    unsigned char znak [30];
    
    
    #define F_CPU 7372800// Clock Speed
    #define BAUD 19200
    #define MYUBRR ((F_CPU/(16*BAUD))-1)
    
    /**************************************************************/
    void USART_Init( unsigned int baud )
    {
       /* Set baud rate */
       UBRRH = (F_CPU/(BAUD*16L)-1) >> 8; //(unsigned char)(baud>>8);
       UBRRL = (unsigned char)(F_CPU/(BAUD*16L)-1); //(unsigned char)baud;
       /* Enable receiver and transmitter */
       UCSRB = (1<<RXCIE)|(1<<TXEN)|(1<<RXEN)|(1<<TXCIE);
          /* Set frame format: 8data, 1stop bit */
       UCSRC = (1<<URSEL)|(3<<UCSZ0);//|(1<<USBS)
    }
    
    
    /**************************************************************/
    
    void USART_Transmit( unsigned char data )
    {
       /* Wait for empty transmit buffer */
       while ( !( UCSRA & _BV(UDRE)) );
       /* Put data into buffer, sends the data */
       UDR = data;
    }
    
    /**************************************************************/
    
    unsigned char USART_Receive( void )
    {
       /* Wait for data to be received */
       while ( !(UCSRA & (1<<RXC)) );
       /* Get and return received data from buffer */
       return UDR;
    }
    /**************************************************************/
    void wyslij(char *tekst)	//wysyla znaki po RS'ie
    {
    for(m=0; m<5;m++)
     {
       USART_Transmit(tekst[m]);
     }
    
    }
    /**************************************************************/
    
    void USART_write_text(char *s)
    {
       while(*s)                               // do napotkania 0
            {
            //tu by sie cos przydalo atoi np
            USART_Transmit(*s);                   // zapisz znak wskazywany przez s na LCD
            s++;                               // zwiększ s (przygotuj nastepny znak)
            }
    } 
    
    
    
    
    SIGNAL(SIG_INTERRUPT0) // przerwanie zewnetrzne INT0
    {
    	wyslij("dane");
    
    }
    
    /**************************************************************/
    SIGNAL(SIG_UART_RECV)
    {
    	znak[ii]=UDR;
    	ii++;
    	if(ii>29) ii=0;
    } 
    
    /**************************************************************/
    int main(void)
    {
    	PORTD ^= (1<<6);
    	DDRD=0xC2;				//0 to wejscie
    						//1 to wyjscie
    
    
    GICR=(1<<INT0);			//zezwolenie na przerwanie zewnetrzne INT0
    MCUCR=(1<<ISC01); 			//wjescie INT0 reaguje na zbocze opadajace
    
    			//preskaler XTAL/8
    
       USART_Init(BAUD);
       sei(); 
    
       while(1)
       {
    
       }
    }
    
  • REKLAMA
  • #4 6269621
    janbernat
    Poziom 38  
    A czy w J4 na schemacie nie masz wpiętego
    programatora?
    To przypomina gniazdo do programatora ZL11-PRG lub Kanda.
    Pin 5 idzie do resetu.
  • #5 6269669
    w.adamczak
    Poziom 10  
    tak, J4 to wyprowadzenia do programatora. Ale czy jest podpiety czy nie to i tak procek sie resetuje gdy cos z niego wysylam
  • #6 6269960
    janbernat
    Poziom 38  
    Jestem kiepski z C.
    Ale sprawdź którą wersję masz AVR GCC.
    I SIGNAL(SIG_INTERRUPT0) jest już nieaktualne
    w nowszych wersjach.
    Chyba ISR.
    Przeszukaj forum.
    PS.
    Na INT0 nie ma żadnego zabezpieczenia przed "dzwonieniem"
    przycisku.
    Może procesor wysyła dane wielokrotnie?
  • REKLAMA
  • #7 6286025
    w.adamczak
    Poziom 10  
    Okazuje sie, że mialem niepotrzebnie wlaczone przerwanie od nadajnika UART. Wystarczylo je wylaczyc i juz sie procek nie resetuje.
REKLAMA