UART Empfangsproblem | ATMega8

OP #4804956
Hallo,

mal wieder ein UART-Problemchen.

Problem: über uart_getc() soll ein 8bit Variablenwert als Dezimalzahl 
vom PC via UART an einen ATMega8 gesendet werden. Problem hierbei: es 
werden ohne auf eine Eingabe zu warten irgendwelche Zufallszahlen über 
den UART übertragen, ohne dass ich eine Eingabe mache.

Hier der entsprechende Teil des Codes bei dem die Variablen 
"stunde,minute,sekunde" über UART eingelesen werden sollen:
1
void uhrzeit_eingeben_uart(void)
2
{
3
  char string[20];
4
    
5
  uint8_t ja_nein=0;
6
  
7
  while (ja_nein==0)
8
  {
9
            
10
    uart_puts("Stunden eingeben: \r\n");    
11
    stunde=uart_getc();      
12
    uart_puts("Minuten eingeben: \r\n");    
13
    minute=uart_getc();
14
    uart_puts("Sekunden eingeben: \r\n");    
15
    sekunde=uart_getc();
16
    sprintf(string,"%i:%i:%i\r\n",stunde,minute,sekunde);
17
    uart_puts("\r\nUhrzeit: ");
18
    uart_puts(string);
19
    uart_puts("\r\nSind die Eingaben korrekt? Eingabe: (1)=ja oder (0)=nein\r\n");
20
    ja_nein=uart_getc();
21
    if (ja_nein==0)
22
    {
23
      ja_nein=0;
24
    }
25
    else if (ja_nein==1)
26
    {
27
      ja_nein=1;
28
    }
29
    
30
    
31
  }
32
  
33
  
34
}


die Variablen stunde, minute, sekunde sind global definiert als:
volatile uint8_t sekunde, ..... da eine ISR (Zeitzähler 1sek.) noch 
darauf zugreift.

Die Funktion uart_getc() sieht folgendermaßen aus:
1
/* Zeichen empfangen */
2
uint8_t uart_getc(void)
3
{
4
  while (!(UCSRA & (1<<RXC)))   // warten bis Zeichen verfuegbar
5
  ;
6
  return UDR;                   // Zeichen aus UDR an Aufrufer zurueckgeben
7
}


Die Kommunikation an sich ist ok, strings/Variablen senden = i.O., ich 
überprüfe die Eingaben/Ausgaben und auch das Problem in Hterm und 
TeraTerm (beides mal das gleiche Phänomen).

Im Anhang ein Foto  von der Übertragung mit den Zufallswerten.


Was lässt sich noch überprüfen/einstellen, wenn einfach Zeichen gesetzt 
werden ohne, dass man eine Eingabe gemacht hat?

Gruß
Markus
Angehängte Dateien:
(Firma: Vescomp)
Markus E. schrieb:
> Die Funktion uart_getc() sieht folgendermaßen aus:
> /* Zeichen empfangen */
> uint8_t uart_getc(void)
> {
>   while (!(UCSRA & (1<<RXC)))   // warten bis Zeichen verfuegbar
>   ;
>   return UDR;                   // Zeichen aus UDR an Aufrufer
> zurueckgeben
> }

 Vor langer Zeit passierte mir dasselbe (wahrscheinlich sogar auch
 mit MEGA8) und ich habe das so gemacht (natürlich nicht in C):
1
  while (!(UCSRA & (1<<RXC)))   // warten bis Zeichen verfuegbar
2
  ...                           /* UDR einlesen */
3
  UCSRA &= ~(1 << RXC);         /* loescht RXC Bit */

 ob das auch bei dir hilft, weiss ich nicht, must du halt ausprobieren.
OP
Georg G. schrieb:
> Markus E. schrieb:
>> ich mache doch aber gar keine Eingabe.
>
> Dann hast du entweder ein Hardware Problem oder ET ist in der Nähe und
> telefoniert nach Hause :-)
>
> Beschreibe bitte mal den Aufbau, vielleicht mit Foto.

--> so ein Mist. ET sagt: Hardware defekt :)

Mein USB-UART Konverter ist wohl defekt, habe einen anderen ausprobiert, 
damit geht es.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.