PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : UART Atmega128 M103C fuse abgeschaltet



tanger
05.12.2007, 11:05
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:





#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:




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

tanger
05.12.2007, 13:15
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



#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;
}

tanger
06.12.2007, 11:00
Hallo

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

Danke
Martin



#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;
}