www.mikrocontroller.net

Forum: Mikrocontroller und Elektronik Atmega88 USART

Autor: LC-HC (Gast)
Datum:

Hi,

nachdem sich nun das Problem mit den Interrupts gelöst hat, macht der
USART nun nicht das, was er soll.
ICh möcht ezu beginn nur mal alle x-sek. ein Zeichen ausgeben. Leider
kommt aber am Terminal nichts, bzw. nur ab un dzu fehlerhafte zeichen
an. Auf dem Oszi betrachtet, werden aber richtige Zeichen mit der
korrekten Baudrate verschickt. Jetzt wird der geneigte Btrachter sagen,
dass die serielle Schnittstelle defekt wäre, ist sie aber nicht.
getestet. Vielleicht ist es wieder eine dieser kleinigkeiten, über die
ich immer stolpere. Den Code habe ich nochmal gepostet. Vielleicht hat
jemand ja Anregungen oder tips ?
//uart0.c





#include <avr/io.h>
#include <avr/interrupt.h>


#define myBRR0 51 // BAUDRATE 9600 bps

volatile unsigned char i = 0;
volatile unsigned char rxFlag = 0;
unsigned char rxCh; 

void Uart0Init(void);
void putc(unsigned char ch);
void puts(unsigned char *str);

void Timer0(unsigned char time);


ISR( TIMER0_OVF_vect )
{
  
}

ISR( USART_RX_vect )
{
  rxCh = UDR0;
  putc(rxCh);
}





void main(void)
{
  
  //STATUS LEDs
  DDRC = (1<<5);
  DDRB = (1<<7);
  
  //POWER REDUCTION REGISTER
  PRR = (1<<7) | (1<<2) | (1<<0);
  
  Uart0Init();
  
    
  sei(); // Interrupts einschalten
  
  
  Timer0(0);
  
  for(;;)
  {    
    
      while( !( TIFR0 & (1<<TOV0) ) )
        ;
    
      
      while( !( UCSR0A & (1<<UDRE0) ) ) 
        ;
      UDR0 = 'a';
      
  }
  
}





void Uart0Init(void)
{
  

    UBRR0H = (unsigned char)(myBRR0 >> 8);
    UBRR0L = (unsigned char)myBRR0;
    
    UCSR0B = (1<<RXEN0) | (1<<TXEN0) | (1<<RXCIE0);
    
    UCSR0C = (3<<UCSZ00);  // 8-Bit Charaktersize
    
  
}


void puts(unsigned char *str)
{
  while(*str)
  {
    putc(*str);
    str++;
  }
}



void Timer0(unsigned char time)
{
  //time = vielfaches von 0,128ms
  /* time Lookuptable der aktueller Konfiguration 19.03.07
    time 0.. - 255
    00 = 0,00 ms
    10 = 1,28 ms
    20 = 2,56 ms
    30 = 3,84 ms
    40 = 5,12 ms
    50 = 6,40 ms
    ...
  */
  
  
  TCNT0 = 128;
  TIMSK0  |= (1 << TOIE0);         // Timer 0 Overflow Interrupt
  TCCR0B = (1<<CS01) | (1<<CS00);   // Teiler 1024  
  
  
}

mfg,

Simon
Autor: Falk (Gast)
Datum:

@LC-HC

>ICh möcht ezu beginn nur mal alle x-sek. ein Zeichen ausgeben. Leider
>kommt aber am Terminal nichts, bzw. nur ab un dzu fehlerhafte zeichen
>an. Auf dem Oszi betrachtet, werden aber richtige Zeichen mit der
>korrekten Baudrate verschickt.

Ist im Terminalprogramm die richtige Baudrate eingestellt?

MFG
Falk
Autor: A.K. (Gast)
Datum:

> Auf dem Oszi betrachtet, werden aber richtige Zeichen mit
> der korrekten Baudrate verschickt.

Daraus muss man ja wohl den Schluss ziehen, dass das Problem nicht beim
Microcontroller liegt, oder?
Autor: Stefan Wimmer (wswbln)
Datum:

...welche Taktquelle verwendet der Controller (interner RC oder Quarz)?
Autor: Uwe ... (uwegw)
Datum:

Guckst du mit dem Oszi auf der TTL-Seite am AVR oder auf der +-12V-Seite
hinter dem Pegelwandler?
Autor: LC-HC (Gast)
Datum:

HI, danke für die antworten. Die DAten liegen sowohl am TTL, als auch
zwischen Treiber und PC in gleicher Form an. Da ich aber noch nebenbei
mit einem M16C arbeite und der ohne Probleme seine Debuganweisungen
ausgibt, kanns der PC nicht sein. Der µC verwendet den internen 8Mhz
Takt.
Autor: johnny.m (Gast)
Datum:

> Der µC verwendet den internen 8Mhz Takt.
Und genau da könnte das Problem liegen...
Autor: Uwe ... (uwegw)
Datum:

Teste mal den RS232-Treiber, indem du auf seiner TTL-Seite RX und TX
verbindest (den AVR aus der Fassung nehmen und nen Draht in die Fassung
stecken) und vom PC aus sendest.

Wenn die Daten dann korrekt zum PC zurückkommen: Treiber in Ordnung,
Fehler beim AVR. Ansonsten kann der Fehler auch im Treiber liegen.
Autor: LC-HC (Gast)
Datum:

Ok, Problem gelöst !? Es lag am Kabel. Der M16C ließ sich jedoch mit dem
selben Kabel ohne Probleme lesen und flashen ... ?

Danke nochmal !

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net