- Akku Tests und Balkonkraftwerk Speicher         
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

    LiFePo4 Akku selber bauen - Video
    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
  •  

fchao-Sinus-Wechselrichter AliExpress