mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik atmega8 mit RS-485


Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo nach langer suche hier im Forum und im Internet wollte ich euch 
mal fragen ob ihr mir bei einem Problem zum Kommunikation zwischen 2 
Atmega8 über RS 485 helfen könnt.
Ich habe ein kleines Testprogramm geschrieben was alle 2 Sekunden einen 
Text über denn Bus schicken soll doch nach 4 Sendungen bricht die 
Kommunikation ab und nichts passiert mehr.
Hier mal mein Programm:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <stdlib.h>
#define F_CPU 4000000UL    
#define BAUD 9600
#include <util/setbaud.h>
#include <util/delay.h>


void USART_Init()
{
 UBRRH = UBRRH_VALUE;
 UBRRL = UBRRL_VALUE;
 UCSRB =(1<<TXEN)|(1<<RXEN)|(1<<RXCIE);
 UCSRC |= (1<<URSEL)|(1 << UCSZ1)|(1 << UCSZ0); 
}

int uart_putc(unsigned char c)
{
    while (!(UCSRA & (1<<UDRE)))  /* warten bis Senden moeglich */
    {
    }                              
    UDR = c;                      /* sende Zeichen */
    return 0;
}
void uart_puts (char *s)
{
    while (*s)
    {   /* so lange *s != '\0' also ungleich dem "String-Endezeichen" */
        uart_putc(*s);
        s++;
    }
}

int main()
{
  DDRB = 0xFF;
  sei();
  USART_Init ();
  while(1)
  {  
  _delay_ms(200);
  _delay_ms(200);
  _delay_ms(200);
  _delay_ms(200);
  PORTB |= (1<<PB0);
  _delay_ms(20);
  uart_puts("00010002H*");
  while (!(UCSRA & (1<<TXC)))
        ;
  PORTB &= ~(1<<PB0);
  }
}
Ich weiß wirklich nicht mehr weiter und währe über eure Hilfe sehr 
dankbar.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zwei Dinge sind mir aufgefallen:

>  UCSRB =(1<<TXEN)|(1<<RXEN)|(1<<RXCIE);

Was macht das RXCIE hier?  Wenn Dein Programm vollständig ist, gibt es 
für den zugehörigen Interrupt keine Routine.  --> Aufhänger.

>   while (!(UCSRA & (1<<TXC)))
>         ;

Da Du TXC nirgends löschst und kein passender Interrupt das tut, wird 
TXC immer gesetzt sein und die Schleife wird immer sofort verlassen.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke danke danke das war die Ursache des Problems.

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
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
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 bestätigst du, die Nutzungsbedingungen anzuerkennen.