-         
Ergebnis 1 bis 3 von 3

Thema: UART Atmega128 M103C fuse abgeschaltet

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    13.06.2006
    Beiträge
    45

    UART Atmega128 M103C fuse abgeschaltet

    Anzeige

    Hallo
    ich hab meinen mega128 im M103C mode laufen lassen nun bruach ich Portc als input, daher hab ich es raus genommen.
    Leider funktioniert nun mein UART nicht mehr:

    Code:
    
     #define BAUD        9600
     #define UBRR_BAUD   ((16000000/(16UL*BAUD))-1)
    
        UBRR0H = (uint8_t) (UBRR_BAUD>>8);
        UBRR0L = (uint8_t) (UBRR_BAUD & 0x0FF);
    	cli();
        UCSR0B = (1<<RXEN1) | (1<<TXEN1) | (1 << RXCIE1);  
        UCSR0A = (1 << RXC1) | (1 << TXC1); 
    
    void put_uart_c(uint8_t c)
    {
      while(!( UCSR0A & (1<<UDRE)));
      UDR0 = c;
    }
    uint8_t get_data(void)
    {
      while(!(UCSR0A & (1<<RXC0)));
      return UDR0;
    }
    //sei wurd in der main ausgeführt
    so ging das im m103c mode
    nun bekomm ich es nicht mehr hin
    aktueller code:

    Code:
    UCSR0C = ( 1<< UCSZ01) | ( 1 << UCSZ00) | (1 <<USBS0);
      //  UCSR0B = (1<<RXEN1) | (1<<TXEN1) | (1 << RXCIE1);  
        UCSR0A = (1 << RXC1) | (1 << TXC1);
    
    //rest gleich
    wäre echt super wenn mir einer helfen könnte
    gruß
    martin

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    13.06.2006
    Beiträge
    45
    Hi
    also hiermit bekomme ich mein terminal mit 'c' s zugeschossen... wenn ich das ganze ohne funktion mache bekomme ich auch nur ein c! jemand ne idee woran das liegt?
    Danke
    Martin

    Code:
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <avr/iom128.h>
    #include <util/delay.h>
    
    #define BAUD 9600L
    #define UBRR_BAUD ((16000000/(16UL*BAUD))-1)
    
    
    void put_uart_c(uint8_t c)
    {
    while(!( UCSR0A & (1<<UDRE0)));
       UDR0 = c; 
    _delay_ms(100);
    }
    
    ISR (USART0_RX_vect)
    {
     char c=UDR0;
     put_uart_c(c);
    }  
    
    int main(void)
    {
    cli();
    UBRR0H = (uint8_t) (UBRR_BAUD>>8);
    UBRR0L = (uint8_t) (UBRR_BAUD);
    UCSR0B = (1<<RXEN0)|(1<<TXEN0)|(1<<RXCIE0);
    UCSR0C = (1<<UCSZ01)|(1<<UCSZ00);
       sei();    
       put_uart_c('c');      
     while (1)
        {
        }
        
    return 0;                     
    }

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    13.06.2006
    Beiträge
    45
    Hallo

    ich bin jetz soweit, leider funktioniert entweder der UART oder das PWM signal sieht einer einen fehler

    Danke
    Martin

    Code:
    #include <avr/io.h>
    #include <avr/interrupt.h>
    
    #define BAUD        9600L
    #define UBRR_BAUD   ((16000000/(16UL*BAUD))-1)
    //function definition
    void uart_init(void)
    {
    
    UBRR0H |= (uint8_t) (UBRR_BAUD>>8);
    UBRR0L |= (uint8_t) (UBRR_BAUD);
    UCSR0B |= ((1<<RXCIE0) | (1<<RXEN0)|(1<<TXEN0));    /* Enable receiver */
    UCSR0C |= ((1<<UCSZ10) | (1<<UCSZ00)); //8 bits
    
    }
    void pwm_init(void)
    {  DDRB=0x00;
       DDRB|=(1<<PB7)|(1<<PB6)|(1<<PB5) | (1<<PB4);
       
       TCCR0|=(1<<WGM00)|(1<<COM01)|(1<<CS01);
       TCCR2|=(1<<WGM20)|(1<<COM21)|(1<<CS20);
       TCCR1A|= (1<<WGM10)|(1<<COM1A1)|(1<<COM1B1);
       TCCR1B|= (1<<CS10);
       
       OCR0=128;
       OCR1A=128; 
       OCR1B=128;
       OCR2=128;  
    }
    
    
    void put_uart_c(uint8_t c)
    {
    while(!( UCSR0A & (1<<UDRE0)));
       UDR0 = c; 
    return;
    }
    
    uint8_t get_data(void)
    {
      while(!(UCSR0A & (1<<RXC0)));
      return UDR0;
    }
    ISR (USART0_RX_vect)
    { 
        char c=UDR0;
    	put_uart_c(c);
    }
    int main(void){
    
    
        
    	sei();
    	uart_init();
    	pwm_init();
    	put_uart_c('H');
    	
    
    while(1);
    return 0;
    }

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •